在DataGridView中触发复选框值更改事件

mus*_*bar 30 c# checkbox events datagridview winforms

我有一个带有复选框列的网格视图,我想在切换单元格的值后立即触发绘图事件.我尝试了ValueChaged和CellEndEdit以及BeginEdit,并选择了选择模式作为CellSelect.至于前2个事件,事件是在编辑模式结束时触发的,例如移出当前单元格或来回移动.这只是一种奇怪的行为.

一旦单元格值发生变化,是否有任何东西在网格视图上触发事件?

最好的祝福,

Chr*_*sto 33

我使用CellContentClick事件,确保用户单击该复选框.即使用户停留在同一个小区,它也会多次触发.一个问题是Value没有得到更新,并且总是返回"false"表示未选中.诀窍是使用单元格的.EditedFormattedValue属性而不是Value属性.EditedFormattedValue将使用复选标记进行跟踪,并且是当CellContentClick被触发时,Value希望其具有的内容.

无需定时器,不需要任何花哨的东西,只要使用CellContentClick事件和检查EditedFormattedValue告诉复选框会是什么状态进入/刚走进.如果EditedFormattedValue = true,则会检查复选框.


小智 23

我的同事建议捕获CurrentCellDirtyStateChanged事件.请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcelldirtystatechanged.aspx.

  • 将其与datagridview.EndEdit()相结合,并更新绑定数据 (2认同)
  • 对我来说这是正确的事件.与DataGridViewName.EndEdit()结合使用.thx的解决方案 (2认同)

Stu*_*art 20

另一种方法是处理CellContentClick事件(它不会在单元格的Value属性中提供当前值),调用grid.CommitEdit(DataGridViewDataErrorContexts.Commit)更新值,然后触发CellValueChanged然后你可以获取实际(即正确)DataGridViewCheckBoxColumn值.

private void grid_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
   grid.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

private void grid_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    // do something with grid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value
}
Run Code Online (Sandbox Code Playgroud)

目标.NET框架:2.0


use*_*029 5

小更新....确保您使用EditedFormattedValue而不是像value我尝试的那样value,但它永远不会给出正确的状态,即已选中/未选中的大多数网站仍在使用value,但下面最新的c# 2010 Express中使用的是一种访问方式。

grdJobDetails.Rows[e.RowIndex].Cells[0].EditedFormattedValue
Run Code Online (Sandbox Code Playgroud)

此外,_CellValueChanged少数人建议或使用的事件在某些情况下必须可用,但如果您正在寻找单元格的每个选中/取消选中,请确保_CellContentClick根据我的通知使用其他内容,我看到并不是每次_CellValueChanged都会被触发..也就是说,如果单击相同的复选框一遍又一遍它不会触发_CellValueChanged,但如果您交替单击,例如您有两个复选框并在其他_CellValueChanged事件被触发后单击一个,但通常如果每次选中/取消选中任何单元格时都会触发事件,_CellValueChanged则不会触发。