7

Windows フォームにデータバインドされた XtraGrid があります。列の 1 つはチェック ボックスです。問題は次のとおりです。ユーザーがチェックボックスをオンにして [OK] ボタンをクリックすると、チェックボックスは目に見えてオンになっているにもかかわらず、グリッドではオンと見なされません。これを行うと(行をループしながら):

isAllowed = Convert.ToBoolean(viewMain.GetRowCellValue(nRowCtr, "IsAllowed"))

私はFalseを返します。しかし、ユーザーがボックスをチェックしてからフォームの別の場所またはこのグリッドの別の行をクリックすると、チェックされたチェックボックスからフォーカスが奪われ、上記の同じコードは True を返します。

この動作を修正する方法についての洞察をいただければ幸いです。

見つかった回避策: デフォルト設定では、ユーザーがセルをクリックして編集すると、セルが編集モードになり、エディター コントロール (この場合は CheckEdit リポジトリ コントロールがあります) が読み込まれ、コントロールの値が変更されます (この場合はチェックされた状態)。 . 別の行または別のコントロールをクリックすると、セルは編集モードから抜け出し、データ項目への変更をコミットします。しかし、ボタンをクリックすると、変更が失われます。回避策は、CheckEdit の CheckedChanged イベントを使用してエディターを閉じることです。

Private Sub edCheck_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles edCheck.CheckedChanged
        gridYears.FocusedView.CloseEditor()
End Sub
4

2 に答える 2

10

実際には、これを行うためのよりクリーンな方法があります (すべての RepositoryItems で機能します) 。DevExpress サイトで詳しく説明されています。アイデアは、リポジトリ アイテムの EditValueChanged イベント ハンドラーから GridView.PostEditor メソッドを呼び出して、編集した値をグリッドのセルと基になる列にすぐに保存することです。

于 2011-08-26T15:22:56.327 に答える
0

ビューのCellValueChangingイベント ハンドラーの次のコードで問題が解決しました。

private void OnCellValueChanging(object sender, CellValueChangedEventArgs e)
{
    _gridView.SetFocusedRowCellValue(_gridView.FocusedColumn, e.Value);
}
于 2015-10-26T09:31:06.767 に答える