2015-04-01 54 views
0

我有一個gridview,裏面是一個項目的狀態複選框, 複選框有checkchanged事件,但當我試圖檢查或取消選中它時, checkchanged不會觸發。檢查更改沒有觸發時,在asp.net中的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(); 
    } 

感謝您與複選框GridView控件的代碼!

回答

1

兩件事情來了我的腦海裏時使用的內部代碼:

  1. 您的Page_Load不處理IsPostBack屬性,因此即使在回發時,您也始終在數據綁定網格。這可以防止事件。
  2. GridViewRow row = dgvItems.SelectedRow;null

使用此代碼來獲取從檢查CheckBoxGridViewRow

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

您好,感謝! isPostBack防止checkchanged被更改 – Dave 2015-04-01 10:41:45

0

如果您的選中狀態最初爲false,則將其重新設置爲false不會觸發CheckedChanged事件。 這是因爲選中狀態實際上並未更改

這是試圖設置CheckBox1.Checked屬性

public void set_Checked(bool value) 
{ 
if (value != this.Checked) 
{ 
    this.CheckState = value ? CheckState.Checked : CheckState.Unchecked; 
} 
} 
相關問題