我有一个带有CheckBox列的DataGridView。 (这是一个库存系统。)该检查用于将公司的序列号从一个位置移动到另一个位置。
我还有一个文本框,截至目前,员工输入他正在移动的项目数,然后检查相应的序列号,并移动项目。
我希望根据检查的序列号来生成文本框中的数字。它甚至可能吗?我已经尝试了大约一百种不同的解决方案,它们都以奇怪的错误结束,或者没有给我任何结果。
答案 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
有时会很挑剔。