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 イベント ハンドラに複雑なロジックを実装しないでください...

あなたの述べられた要件を考えると、私のアプローチは CustomRowCellEdit の代わりに CellValueChanged イベントを使用することです。ハンドラーは次のように言うことができます

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 に答える