【问题标题】:How to count checked checkboxes in DataGridView when Checkbox value is changed in c#?当 C# 中的复选框值更改时,如何计算 DataGridView 中的选中复选框?
【发布时间】:2015-04-07 03:10:44
【问题描述】:

我无法计算 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;
    }

【问题讨论】:

  • 这些复选框何时被选中?就在datagridview绑定数据的时候?
  • 您的代码似乎只适用于单行,如果单元格被选中则返回1,否则返回-1。由于您只处理单行,您希望如何计算任何内容?
  • @Grant Winney:我尝试将 num 移到事件之外,但仍然没有给出正确的计数。 . .

标签: c# checkbox datagridview


【解决方案1】:

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

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

这将调用_CellValueChanged 事件。 CellValueChanged event 中的代码不会做任何更改:

int num = 0;
private void dgvLoadData_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex < 0)
            return;
    bool isChecked = (bool)dgvItemsToShip.Rows[e.RowIndex].Cells[0].Value;

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

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

【讨论】:

【解决方案2】:

您可以使用事件: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;
    }

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多