CurrentCellDirtyStateChanged提交太快了

时间:2012-06-11 18:25:40

标签: c# .net winforms .net-2.0

我有一个带有文本列和复选框列的DataGridView。当用户单击复选框时,我想提示用户。我使用下面的代码工作了这个:

private void grid_CurrentCellDirtyStateChanged( object sender, EventArgs e )
{
  var grid = sender as DataGridView;
  if ( grid.IsCurrentCellDirty)
    grid.CommitEdit( DataGridViewDataErrorContexts.Commit );
}

但是,当我尝试输入文本列时,它会在我输入时保持提交,而不是在我完成输入时。这会导致文本单元格不断突出显示,只允许我输入单个字符。如何修改此事件以仅在复选框值更改时进行处理?

2 个答案:

答案 0 :(得分:2)

您需要做的只是注意复选框,而不是文本。我发现类似问题的解决方案是在CellEnter上放置一个事件,记录正在编辑的字段。脏处理事件然后检查这个以决定做什么。

为什么坐标在脏检查中不可用我无法想象。

答案 1 :(得分:1)

我遇到了同样的问题。如果你想关注特定的列(CheckBox列),这将适合你。

private void grid_CurrentCellDirtyStateChanged( object sender, EventArgs e )
{
  var grid = sender as DataGridView;

  if ( grid.IsCurrentCellDirty && grid.CurrentCell.ColumnIndex == 1 )
     grid.CommitEdit( DataGridViewDataErrorContexts.Commit );
}