0

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

  1. 我的 CustomRowCellEdit 函数似乎在后台不停地运行。
  2. Column2 上的 SetRowValue 似乎并没有真正发生,除非我点击远离该行;我需要在更改 Column1 后立即进行更改。
  3. 如何在我的 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.
        }
    }
}
4

1 回答 1

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

希望这可以帮助。

于 2013-01-15T15:43:00.163 回答