除非焦点发生变化,否则不会注册DevExpress XtraGrid复选框

时间:2011-03-11 20:22:20

标签: checkbox xtragrid

我们在Windows窗体上有一个数据绑定XtraGrid。其中一列是复选框。问题如下:当用户选中复选框并单击“确定”按钮时,网格不会检查明确检查的复选框。当我这样做(循环遍历行)时:

isAllowed = Convert.ToBoolean(viewMain.GetRowCellValue(nRowCtr, "IsAllowed"))

我回来假。但是,如果用户选中该框,然后单击表单上的其他位置或此网格中的另一行,从而从已选中的复选框中取消焦点,则上述相同的代码将返回True。

非常感谢任何有关如何解决此问题的见解。

找到解决方法: 使用默认设置,当用户单击一个单元格进行编辑时,单元格进入编辑模式,加载编辑器控件(在本例中我有一个CheckEdit存储库控件)并更改控件的值(在本例中为checked状态)。如果我单击另一行或另一个控件,则单元格将退出编辑模式,将更改提交到数据项。但是,如果我点击一个按钮,那么我的更改就会丢失。解决方法是使用CheckEdit的CheckedChanged事件来关闭编辑器:

Private Sub edCheck_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles edCheck.CheckedChanged
        gridYears.FocusedView.CloseEditor()
End Sub

2 个答案:

答案 0 :(得分:10)

实际上有一种更简洁的方法(它适用于所有RepositoryItems),详见DevExpress site。我们的想法是从存储库项目的EditValueChanged事件处理程序中调用GridView.PostEditor方法,以立即将编辑后的值保存到网格的单元格和基础列中。

答案 1 :(得分:0)

视图的CellValueChanging事件处理程序中的此代码解决了问题:

private void OnCellValueChanging(object sender, CellValueChangedEventArgs e)
{
    _gridView.SetFocusedRowCellValue(_gridView.FocusedColumn, e.Value);
}