微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

解决方法

未经测试,但这应该足够接近.当我遇到同样的问题时,我读过一篇关于这篇的文章.诀窍是在单击框时立即提交编辑,然后触发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有时会很挑剔.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐