这取决于您要刷新的控件是否为DataBound()。
换句话说,您是否可以通过使用DataBind() 方法调用强制控件重新加载自身,使用相同的数据或新数据来强制控件重新加载?
大多数 GUI 控件都有DataBind() 方法,但如果控件实际上没有使用数据来工作,它就毫无用处!
这就是为什么在您的情况下,您的面板没有用新数据“刷新”,因为在面板上使用 DataBind() 什么都不做。在整个 GridView 上使用 databind() 是另一回事,应该可以工作。也许在整个区域放置一个 UPDATEPANEL?如果你这样做,你必须小心你的正常编辑和行上的其他命令将继续工作。
然而,您可以将modalpopupextender 放在您的TemplateField 中,并使用“技巧”,您可以保持服务器回发并仍然触发弹出面板。
即
<asp:UpdatePanel ID="upADDMAIN" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="btnADD" runat="server" Text="NEW LOGIN" BackColor="Blue" Font-Bold="True" ForeColor="#FFFFCC" OnClick="btnADD_Click" />
<asp:Button ID="btnDUM" runat="server" style="display:none" />
<div style="height:20px">
</div>
<ajaxToolkit:ModalPopupExtender ID="mpeADD" runat="server"
targetcontrolid="btnDUM"
popupcontrolid="upADD"
backgroundcssclass="modelbackground">
</ajaxToolkit:ModalPopupExtender>
<asp:UpdatePanel ID="upAdd" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="pnlADD" runat="server" Width="700px" HorizontalAlign="Center" CssClass="auto-style10" Height="200px">
..
..
<div id="puFTR" class="auto-style17" style="vertical-align: middle">
<asp:Button id="btnOK" runat="server" Text="OK" style="width: 80px" OnClick="btnOK_Click" />
<asp:Button id="btnCAN" runat="server" Text="CANCEL" style="width: 80px" OnClick="btnCAN_Click" CausesValidation="False" />
</div>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</asp:UpdatePanel>
如您所见,btnDUM 控件是让 MPE 工作的 Dummy,但实际上并未使用它,因为它被 style="display:none" 标记隐藏。
但是,btnADD 确实有效,因为它在服务器端调用 Click() 方法来刷新新行上的数据。您可能需要使用一点 jScript 将 ROWINDEX 传递给 Click() 方法,以便它与 GridView 一起工作。
顺便说一句,在我的例子中,Click() 方法手动“控制”了 MPE...
protected void btnADD_Click(object sender, EventArgs e)
{
ClearADDform();
mpeADD.Show();
}
protected void ClearADDform()
{
txtLOGIN.Text = string.Empty;
cbISActive.Checked = true;
txtPWD.Text = string.Empty;
ddlAgent.SelectedIndex = -1;
}
就我而言,上面的代码示例在 GridView 之外,因此您需要进行调整。
但重点是,您仍然可以使用 Ajax 弹出窗口进行服务器端调用!
祝你好运。