如何在WindowsForms应用程序中的DataGridView中计算已检查的CheckBox数

时间:2015-08-05 11:42:22

标签: winforms datagridview

我有一个DataGridView.In CheckBox列是There.if我想检查DataGrid中的复选框如果没有选中复选框,则一个按钮是可见的按钮将被启用,如果我选择了多于5个复选框,则一个小心将我试着这样尝试

 private void GridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {           
        DataGridViewCheckBoxCell ch1 = new DataGridViewCheckBoxCell();
        ch1 = (DataGridViewCheckBoxCell)GridView1.Rows[GridView1.CurrentRow.Index].Cells[0];
        if (ch1.Value == null)
        {
            btnShow.Visible = false;
        }
        else
            btnShow.Visible = true;
   }

在这里,我没有得到Exact Out Put。我怎样才能解决这个Pls帮助...

1 个答案:

答案 0 :(得分:-1)

  1. 使用CellContentClick代替CellClickCheckBox值仅在前者中触发更改。
  2. 使用CurrentCell代替当前行Cells[0],否则即使您点击了同一行中CheckBoxCell以外的其他单元格,也会不必要地触发此代码。
  3. 如果单击CheckBoxCell(选中/取消选中),则遍历行以计算正确列中已检查单元格的数量。 Cell.Value可以是nulltruefalse,当前点击的单元格尚未反映新值。因此,请使用Cell.EditedFormattedValue,其中包含更新后的值,并且始终为truefalse
  4. 例如:

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if ((dataGridView1.CurrentCell as DataGridViewCheckBoxCell) != null)
        {
            int count = 0;
    
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                bool isChecked = (bool)row.Cells[0].EditedFormattedValue;
    
                if (isChecked)
                {
                    count++;
                }
            }
    
            btnShow.Visible = count > 0; // Whatever your condition may be.
    
            if (count > 5)
            {
                // Your caution here. For example:
                MessageBox.Show(this, "Danger, Will Robinson!", "Caution");
            }
        }
    }