我们在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
答案 0 :(得分:10)
实际上有一种更简洁的方法(它适用于所有RepositoryItems),详见DevExpress site。我们的想法是从存储库项目的EditValueChanged事件处理程序中调用GridView.PostEditor方法,以立即将编辑后的值保存到网格的单元格和基础列中。
答案 1 :(得分:0)
视图的CellValueChanging
事件处理程序中的此代码解决了问题:
private void OnCellValueChanging(object sender, CellValueChangedEventArgs e)
{
_gridView.SetFocusedRowCellValue(_gridView.FocusedColumn, e.Value);
}