Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DevExpress XtraGrid-在列1更改时更改/禁用列2中的单元格_Devexpress_Xtragrid - Fatal编程技术网

DevExpress XtraGrid-在列1更改时更改/禁用列2中的单元格

DevExpress XtraGrid-在列1更改时更改/禁用列2中的单元格,devexpress,xtragrid,Devexpress,Xtragrid,我在XtraGrid中有两个专栏。当Column1的值更改时,我想执行一些逻辑,可能会更改Column2的值并禁用Column2。您可以在下面看到我的代码,但我有3个问题: 我的CustomRowCellEdit函数似乎在后台不间断地运行 第2列上的SetRowValue似乎不会真正出现,除非我单击远离该行的位置;我需要在第1列更改后立即进行更改 如何在IF块中禁用 我已将以下事件添加到网格中: this._myGridView.CustomRowCellEdit += new Dev

我在XtraGrid中有两个专栏。当Column1的值更改时,我想执行一些逻辑,可能会更改Column2的值并禁用Column2。您可以在下面看到我的代码,但我有3个问题:

  • 我的CustomRowCellEdit函数似乎在后台不间断地运行
  • 第2列上的SetRowValue似乎不会真正出现,除非我单击远离该行的位置;我需要在第1列更改后立即进行更改
  • 如何在IF块中禁用
  • 我已将以下事件添加到网格中:

    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.
            }
        }
    }
    

    在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支持站点上的此主题。 . 基本上,您需要处理网格视图的ShowingEditor事件,并使用FocusedRowHandle和FocusedColumn属性决定是否允许编辑当前单元格。要禁用编辑,请将CancelEventArgs的Cancel属性设置为true

    希望这有帮助