在gridview中,updatepanel无法正常工作

时间:2013-10-18 11:58:10

标签: c# asp.net

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 个答案:

答案 0 :(得分:2)

尝试将UpdatePanel移出GridView,并将整个GridView包装在UpdatePanel中,看看是否会产生影响。

答案 1 :(得分:2)

尝试将此CheckBox注册为codebehind:

中的async-postback控件
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);
    }
}

  

它只是第一次工作,但第二次我的页面得到了   刷新

然后尝试使用RowCreated,它会在每一行的每个回发中触发:

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);
    }
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

<Triggers> 
<PostBackTriggers ControlId="YourControlId"/>
<Triggers>
</asp:UpdatePanel>