我有一个DX网格视图,它有2个bool列。我的目的是当我检查第1列中的第2行时,第2列必须立即更改第2行,但不是。单击另一行后它会发生变化。这是我的rowcellvaluechanged事件代码:
void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
//button1.PerformClick();
if (e.Column.Name == "col1")
{
var x = gridView1.GetRowCellValue(e.RowHandler, col1);
gridView1.SetRowCellValue(e.RowHandler, col2, x);
}
}
我在DX网站上寻找并且没有解决方案。我怎么处理呢?
答案 0 :(得分:1)
您可以使用GridView.PostEditor方法立即将更改后的值从编辑器传递到Grid的基础数据源。这样做的最佳位置是真实单元格编辑器的EditValueChanged事件。您可以按如下方式处理此事件:
gridView1.PopulateColumns();
var checkEdit = gridView1.Columns["Value1"].RealColumnEdit as RepositoryItemCheckEdit;
checkEdit.EditValueChanged += checkEdit_EditValueChanged;
//...
void checkEdit_EditValueChanged(object sender, EventArgs e) {
gridView1.PostEditor();
}
然后,您可以实现所有必需的依赖项:
gridView1.CellValueChanged += gridView1_CellValueChanged;
//...
void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) {
if(e.Column.FieldName == "Value1")
gridView1.SetRowCellValue(e.RowHandle, gridView1.Columns["Value2"], e.Value);
}
答案 1 :(得分:0)
当您切换到另一个单元格时,网格会发布编辑器值。要强制它,请调用PostEditor方法。但是,在这种情况下,您将需要使用活动编辑器的EditValueChanged事件。要获得它,请使用ActiveEditor属性。要抓住时机,在创建编辑器时,请使用ShownEditor事件。
gridView1.ShownEditor += gridView1_ShownEditor;
private void gridView1_ShownEditor(object sender, EventArgs e) {
GridView view = (GridView)sender;
view.ActiveEditor.EditValueChanged += editor_EditValueChanged;
}
private void editor_EditValueChanged(object sender, EventArgs e) {
if (!gridView1.FocusedColumn.Name == "col1")
return;
gridView1.PostEditor();
var x = gridView1.GetRowCellValue(e.RowHandler, col1);
gridView1.SetRowCellValue(e.RowHandler, col2, x);
}