如何在datagridview中的列中显示文本框中已选中复选框的数量?

时间:2012-10-26 18:47:59

标签: c# datagridview checkbox datagridviewcheckboxcell

我有一个带有CheckBox列的DataGridView。 (这是一个库存系统。)该检查用于将公司的序列号从一个位置移动到另一个位置。

我还有一个文本框,截至目前,员工输入他正在移动的项目数,然后检查相应的序列号,并移动项目。

我希望根据检查的序列号来生成文本框中的数字。它甚至可能吗?我已经尝试了大约一百种不同的解决方案,它们都以奇怪的错误结束,或者没有给我任何结果。

1 个答案:

答案 0 :(得分:1)

未经测试,但这应该足够接近。当我遇到同样的问题时,我读过一篇关于这篇的文章。诀窍是在单击框时立即提交编辑,然后触发CellValueChanged事件。然后你可以从那里拿起计数。

这应该在您选中时更新文本框,并取消选中复选框:

private void dgv_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dgv.IsCurrentCellDirty && dgv.CurrentCell.OwningColumn.Name == "MyCheckColumn")
        dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex == -1) //just a guard for the header row
        return;

    if (dgv.Columns[e.ColumnIndex].Name == "MyCheckColumn")
        textBox.Text = dgv.Rows.Cast<DataGridViewRow>().Count(r => Convert.ToBoolean(r.Cells["MyCheckColumn"].Value)).ToString();
}

希望Linq有效。如果没有,你将不得不使用sum变量的老式foreach方式。我知道DataGridViewRowCollection有时会很挑剔。