我在网格视图中有一个Checkbox,我有一个OnCheckedChange事件。此事件在Check上触发,如果Grid中有多行。但当只有一行时,OnCheckedChanged事件会在选中复选框时触发,但不会取消选中复选框。我正在努力解决这个问题。但到目前为止还没有发生任何好事。 这是WebApplication而不是Windows窗体应用程序。所以我无法使用CellValueChanged事件。以下是我的代码。
<asp:TemplateField HeaderStyle-CssClass="GridHeaderStyle" ItemStyle-CssClass="GridRowStyle" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:CheckBox ID="chkSelectEmployee" runat="server" key="chkEmployeeSrcItem" index='<%# DataBinder.Eval (Container, "RowIndex") %>' pair='<%# DataBinder.Eval (Container.DataItem, "ID") %>' AutoPostBack="true" OnCheckedChanged="chkSelectEmployee_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
protected void gvEmployeeSource_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//Code Goes here
}
}
protected void chkSelectEmployee_CheckedChanged(object sender, EventArgs e)
{
//Code goes here
}
答案 0 :(得分:0)
尝试以下解决方案,取自here:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:CheckBox runat="server" ID="id" AutoPostBack="true" OnCheckedChanged="id_CheckedChanged"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
然后是服务器端代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
}
private void BindGrid()
{
// Get data from datasource and bind it to the gridview.
}
protected void id_CheckedChanged(object sender, EventArgs e)
{
CheckBox lnkView = (sender as CheckBox);
if (lnkView.Checked)
{
Response.Write( "you checked the checkbox");
}
else if (!lnkView.Checked)
{
Response.Write("checkbox is not checked");
}
}