4

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

我还有一个文本框,到目前为止,员工输入他要移动的物品数量,然后检查适当的序列号,然后移动物品。

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

4

1 回答 1

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 能正常工作。foreach如果没有,您将不得不使用 sum 变量以老式方式进行操作。我知道DataGridViewRowCollection有时可能很挑剔。

于 2012-10-26T18:55:52.973 回答