html代码
<asp:GridView ID="gridprodlist" runat="server" AutoGenerateColumns="False" EmptyDataText="No record" Width="100%">
<Columns>
<asp:TemplateField HeaderText="Edit<br/>Delete<br/>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中,但仍然点击我的复选框,我的页面会刷新。 我该怎么办? 我不希望我的页面得到刷新
答案 0 :(得分:2)
尝试将UpdatePanel移出GridView,并将整个GridView包装在UpdatePanel中,看看是否会产生影响。
答案 1 :(得分:2)
尝试将此CheckBox
注册为codebehind:
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>