1

html代码

<asp:GridView ID="gridprodlist" runat="server" AutoGenerateColumns="False" EmptyDataText="No record" Width="100%">
<Columns>
<asp:TemplateField HeaderText="Edit&lt;br/&gt;Delete&lt;br/&gt;Disable">
<ItemTemplate>
<table cellpadding="0" cellspacing="0" border="0">
     <tr>
        <td valign="top">
         <asp:UpdatePanel ID="UpdatePanel100" runat="server">
            <ContentTemplate>
        <asp:CheckBox ID="chkdis" runat="server" AutoPostBack="True" OnCheckedChanged="chkdis_CheckedChanged" ValidationGroup='<%# Eval("pid") %>' Text="Disable" />
            </ContentTemplate>
          </asp:UpdatePanel>
         </td>
    </tr>
</table>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />

.cs 代码

protected void chkdis_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chkdis = (CheckBox)sender;
    int id = Convert.ToInt32(((CheckBox)sender).ValidationGroup);

    if (chkdis.Checked == true)
    {

    }
    else
    {

    }

}

我已将 updatepanel 放在 gridview 中,但仍然单击我的复选框,我的页面会刷新。我应该怎么办?我不希望我的页面刷新

4

4 回答 4

2

尝试将 UpdatePanel 移出 GridView,并将整个 GridView 包装在 UpdatePanel 中,看看是否有区别。

于 2013-10-18T12:02:16.377 回答
2

尝试将其注册CheckBox为来自代码隐藏的异步回发控件:

protected void Page_Init(Object sender, EventArgs e)
{
     gridprodlist.DataBound += GridprodList_DataBound;
}  

private void GridprodList_DataBound(Object sender, EventArgs e)
{
    ScriptManager sm = ScriptManager.GetCurrent(Page);
    foreach(GridViewRow row in gridprodlist.Rows)
    {
        CheckBox chkdis = (CheckBox) row.FindControl("chkdis");
        sm.RegisterAsyncPostBackControl(chkdis);
    }
}

它仅第一次工作,但第二次再次刷新我的页面

然后尝试使用RowCreatedwhich 在每行的每个回发时触发:

ScriptManager sm = ScriptManager.GetCurrent(Page);

private void GridprodList_RowCreated(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox chkdis = (CheckBox) e.Row.FindControl("chkdis");
        sm.RegisterAsyncPostBackControl(chkdis);
    }
}
于 2013-10-18T12:07:15.887 回答
0

它不能这样工作,因为GridView在呈现时被转换为表格。更新面板肯定不会在渲染时添加到每一行。因此,最好的方法是将gridview 放在更新面板中。

于 2013-10-18T12:12:24.297 回答
0

将 UpdatePanel 移出 GridView,并将 GridView 包装在 UpdatePanel 中。如果您仍需要对某些控件进行回发,请在 UpdatePanel 的结束标记之前使用。

<Triggers> 
<PostBackTriggers ControlId="YourControlId"/>
<Triggers>
</asp:UpdatePanel>
于 2013-10-18T12:30:30.493 回答