DevExpress XtraGrid - 当column1更改时,更改/禁用column2中的单元格

时间:2013-01-15 15:06:54

标签: devexpress xtragrid

我在XtraGrid中使用了2列。当Column1的值发生变化时,我想执行一些逻辑并可能更改Column2的值并禁用Column2。你可以在下面看到我的代码,但我有3个问题:

  1. 我的CustomRowCellEdit函数似乎在后台不间断运行。
  2. 除非我点击该行,否则Column2上的SetRowValue似乎不会发生;我需要在Column1更改后立即进行更改。
  3. 如何在IF块中禁用?
  4. 我已将以下事件添加到网格中:

    this._myGridView.CustomRowCellEdit += 
        new DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventHandler(
            this.myGridView_CustomRowCellEdit);
    

    这是事件:

    private void myGridView_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
    {
        if (e.Column.FieldName == "Column1" && e.RowHandle >= 0)
        {
            GridView gv = sender as GridView;
            string value1 = gv.GetRowCellValue(e.RowHandle, gv.Columns["Column1"]).ToString();
    
            if (value1 == "something")
            {
                gv.SetRowCellValue(e.RowHandle, gv.Columns["Column2"], someOtherValue);
                // I'd like to disable Column2 in this IF logic.
            }
        }
    }
    

1 个答案:

答案 0 :(得分:2)

在DevX文档中,有一条关于CustomRowCellEdit事件的说明

  

由于XtraGrid控件的基础结构,每次刷新单元格时,CustomRowCellEdit事件都会频繁触发。因此,不要为CustomRowCellEdit事件处理程序实现复杂的逻辑...

根据您声明的要求,我的方法是使用CellValueChanged事件而不是CustomRowCellEdit。然后你的处理程序可以说像

private void myGridView_CellValueChanged(object sender, CellValueChangedEventArgs e) {
    if (e.Column.FieldName != "Column1") return;
    GridView gv = sender as GridView;
    if (e.Value == "something") {
        gv.SetRowCellValue(e.RowHandle, gv.Columns["Column2"], someOtherValue);
    }
}

要在运行时使单个单元格不可编辑,请在DevExpress支持网站上查看此主题。 how to set readyonly for rows at runtime using Devxpress Grid Contorl。 基本上你需要做的是处理网格视图的ShowingEditor事件,并使用FocusedRowHandle和FocusedColumn属性,决定是否允许编辑当前单元格。要禁用编辑,请将CancelEventArgs的Cancel属性设置为true。

希望这有帮助。