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

我想到两件事:

  1. 您的 Page_Load 不会处理 IsPostBack-属性,因此您总是对网格进行数据绑定,即使在回发时也是如此。这样可以防止发生事件。
  2. GridViewRow row = dgvItems.SelectedRow;null

使用此代码从选中的 CheckBox 中获取 GridViewRow:

CheckBox chkStatus = (CheckBox) sender;
GridViewRow row = (GridViewRow) chkStatus.NamingContainer;