2011-03-20 84 views
1

我有複選框列的datagridview,列中的複選框可以選中或取消選中與外部複選框。在選擇所有列並將數據保存在數據庫中時,它工作正常。但是,當我使用外部複選框取消選中datagridview中的複選框並再次選擇datagridview中的單個複選框時,它將再次使用列中所有複選框的rowindex。關於複選框和datagridview的問題

if (chkbranches.Checked == true) 
{ 
    foreach (DataGridViewRow dr in gridviewholiday.Rows) 
    { 
    dr.Cells[0].Value = true; 
    } 

    for (int i = 0; i < gridviewholiday.Rows.Count; i++) 
    { 
    rowindex = i; 
    list.add(rowindex);//to put the rowindex in array list 
    } 
} 
else if (chkbranches.Checked == false) 
{ 
    foreach (DataGridViewRow dr in gridviewholiday.Rows) 
    { 
    dr.Cells[0].Value = false; 
    gridviewholiday.Refresh(); 
    gridviewholiday.ClearSelection(); 
    list.Clear(); 
    } 
} 
+0

是不是該代碼選擇/取消選擇所有複選框,你說工作正確?當您在DataGridView中選擇一個複選框時,我們需要的是編碼... – 2011-03-21 14:07:23

+0

您在哪裏編寫了此代碼(哪個事件),您還應該標記爲您之前的問題的答案,並且您發現了令人滿意的答案 – V4Vendetta 2011-03-22 05:30:21

回答

0

爲什麼你循環兩次,如果chkbranches被檢查?你不能在第一個foreach中添加項目到列表中嗎?在循環中取消選中,爲什麼要刷新,並且每次都清除兩個控件?可能只需要一次。

而且如前所述,這並沒有對單個檢查做任何事情。如果你期待它,那似乎是問題所在。

0

不太清楚你想要做什麼,但我有一個類似的按鈕,刪除所有選中的行。我使用模板領域,像這樣的複選框:

<asp:TemplateField> 
    <ItemTemplate> 
    <asp:CheckBox ID="cbSelector" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 

然後對我身後的刪除按鈕的代碼做:

protected void btnDeleteChecked_Click(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in gridOrders.Rows) 
    { 
     CheckBox cb = (CheckBox)row.FindControl("cbSelector"); 
     if ((null != cb) && cb.Checked) 
     { 
      uint id = Convert.ToUInt32(gridOrders.DataKeys[row.RowIndex].Value); 
      gInvoiceDB.DeleteInvoice(id, true); 
     } 
    } 
}