Checkedchanged 在 asp.net 中的 gridview 内时不触发
Checkchanged not firing when inside a gridview in asp.net
我有一个 gridview,里面有一个项目状态的复选框,
复选框有 checkchanged 事件,但是当我尝试选中或取消选中它时,checkchanged 没有触发。
这里是带有复选框的 gridview 的代码
<asp:GridView ID="dgvItems" runat="server" OnRowCreated="dgvItems_RowCreated" OnRowDataBound="dgvItems_RowDataBound" OnSelectedIndexChanged="dgvItems_SelectedIndexChanged" OnRowDeleting="dgvItems_RowDeleting">
<Columns>
<asp:TemplateField HeaderText ="Status">
<ItemTemplate>
<asp:CheckBox ID="chkStatus" runat="server" Checked = <%# (string)Eval("item_status") == "Active" ? true : false %> OnCheckedChanged="chkStatus_CheckedChanged" AutoPostBack="True" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void chkStatus_CheckedChanged(object sender, EventArgs e)
{
GridViewRow row = dgvItems.SelectedRow;
string item_id = row.Cells[0].Text.ToString();
con.Open();
SqlCommand cmd = new SqlCommand("Update Items set item_status = 'Inactive' where item_id = @item_id ",con);
cmd.Parameters.AddWithValue("@item_id", cmd);
cmd.ExecuteNonQuery();
con.Close();
}
提前致谢!
如果您的检查状态最初为 false,则再次将其设置为 false 不会触发 CheckedChanged
事件。
发生这种情况是因为检查状态实际上并没有改变
这是尝试设置 CheckBox1.Checked
属性
时使用的内部代码
public void set_Checked(bool value)
{
if (value != this.Checked)
{
this.CheckState = value ? CheckState.Checked : CheckState.Unchecked;
}
}
我想到两件事:
- 您的
Page_Load
不会处理 IsPostBack
-属性,因此您总是对网格进行数据绑定,即使在回发时也是如此。这样可以防止发生事件。
GridViewRow row = dgvItems.SelectedRow;
是 null
。
使用此代码从选中的 CheckBox
中获取 GridViewRow
:
CheckBox chkStatus = (CheckBox) sender;
GridViewRow row = (GridViewRow) chkStatus.NamingContainer;
我有一个 gridview,里面有一个项目状态的复选框, 复选框有 checkchanged 事件,但是当我尝试选中或取消选中它时,checkchanged 没有触发。
这里是带有复选框的 gridview 的代码
<asp:GridView ID="dgvItems" runat="server" OnRowCreated="dgvItems_RowCreated" OnRowDataBound="dgvItems_RowDataBound" OnSelectedIndexChanged="dgvItems_SelectedIndexChanged" OnRowDeleting="dgvItems_RowDeleting">
<Columns>
<asp:TemplateField HeaderText ="Status">
<ItemTemplate>
<asp:CheckBox ID="chkStatus" runat="server" Checked = <%# (string)Eval("item_status") == "Active" ? true : false %> OnCheckedChanged="chkStatus_CheckedChanged" AutoPostBack="True" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void chkStatus_CheckedChanged(object sender, EventArgs e)
{
GridViewRow row = dgvItems.SelectedRow;
string item_id = row.Cells[0].Text.ToString();
con.Open();
SqlCommand cmd = new SqlCommand("Update Items set item_status = 'Inactive' where item_id = @item_id ",con);
cmd.Parameters.AddWithValue("@item_id", cmd);
cmd.ExecuteNonQuery();
con.Close();
}
提前致谢!
如果您的检查状态最初为 false,则再次将其设置为 false 不会触发 CheckedChanged
事件。
发生这种情况是因为检查状态实际上并没有改变
这是尝试设置 CheckBox1.Checked
属性
public void set_Checked(bool value)
{
if (value != this.Checked)
{
this.CheckState = value ? CheckState.Checked : CheckState.Unchecked;
}
}
我想到两件事:
- 您的
Page_Load
不会处理IsPostBack
-属性,因此您总是对网格进行数据绑定,即使在回发时也是如此。这样可以防止发生事件。 GridViewRow row = dgvItems.SelectedRow;
是null
。
使用此代码从选中的 CheckBox
中获取 GridViewRow
:
CheckBox chkStatus = (CheckBox) sender;
GridViewRow row = (GridViewRow) chkStatus.NamingContainer;