DevExpress Grid,Bool行变化不能立即反映

时间:2016-01-21 12:50:56

标签: c# winforms datagridview devexpress

我有一个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网站上寻找并且没有解决方案。我怎么处理呢?

2 个答案:

答案 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);
}