2015-04-07 131 views
2

我无法计数DataGridView中的复选框。在复选框被选中的时候,我想对选中的复选框进行计数,并在标签中存储选中项目的数量。我想下面的代码,但是没有得到正确的计数:如何在c#中更改复选框值时在DataGridView中检查复选框?

int num = 0; 
    private void dgvLoadData_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
    { 
     bool isChecked = Convert.ToBoolean(dgvLoadData.Rows[dgvLoadData.CurrentCell.RowIndex].Cells[0].Value.ToString()); 

     if (isChecked) 
     { 
      num+=1; 
     } 
     else 
     { 
      num-=1; 
     } 

     labelSelectedSum.Text = "Selected Items: " + num; 
    } 
+0

当越来越检查这些复选框?只是当datagridview绑定数据? – renakre

+0

看看下面的@Michay。 http://stackoverflow.com/questions/1237829/datagridview-checkbox-column-value-and-functionality以及http://www.codeproject.com/Articles/42437/Toggling-the-States-of-all-CheckBoxes -Inside-a-Dat –

+1

你的代码似乎只适用于单行,如果单元格被选中则返回1,否则返回'-1'。由于您只使用一行,因此您希望如何计算任何内容? –

回答

2

在桌子上应用CurrentCellDirtyStateChanged事件。致电gridview.CommitEdit更新复选框列的值。请执行以下操作:

private void dgvLoadData_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    if (dgvLoadData.IsCurrentCellDirty) 
    { 
     dgvLoadData.CommitEdit(DataGridViewDataErrorContexts.Commit); 
    } 
} 

这会调用_CellValueChanged事件。任何更改将在代码完成里面CellValueChanged事件:

int num = 0; 
private void dgvLoadData_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    bool isChecked = Convert.ToBoolean(dgvLoadData.Rows[dgvLoadData.CurrentCell.RowIndex].Cells[0].Value.ToString()); 

    if (isChecked) 
    { 
     num+=1; 
    } 
    else 
    { 
     num-=1; 
    } 

    labelSelectedSum.Text = "Selected Items: " + num; 
} 
0

您可以使用事件:CellContentClick和CellContentDoubleClick:

祝您好运!

int num = 0; 
    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     bool isChecked = (bool)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue; 
     CheckCount(isChecked); 
    } 
    private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) 
    { 
     bool isChecked = (bool)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue; 
     CheckCount(isChecked); 
    } 
    private void CheckCount(bool isChecked) 
    { 
     if (isChecked) 
     { 
      num++; 
     } 
     else 
     { 
      num--; 
     } 
     labelSelectedSum.Text = "Selected Items: " + num; 
    } 
0

我有一个DataTable绑定到我的DataGridView,我检查第一列具有任何选中复选框 这是我的例子:

private void dataGridViewMain_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    if (e.ColumnIndex == 0) 
    { 
    int numberOfRow = dataTableCsvFile.AsEnumerable().Count(r => r[0].ToString() == true.ToString()); 
    buttonDataGridviewVerify.Enabled = numberOfRow > 0; 
    } 
} 
相关问题