これは私が持っているものです:
public class ViewModel
{
public BindingList<Row> Rows { get; set; }
public BindingList<MyElement> Selectables { get; set; }
}
public class Row
{
public MyElement Selected { get; set; }
}
public class MyElement
{
public string Value { get; set; }
public string Friendly { get; set; }
}
これが私が欲しいものです:XtraGrid
各セルにコンボボックスエディターがある列を持つ。ドロップダウンオプションの値は、行ごとに異なります。具体的には、使用可能なオプションはのサブセットでViewModel.Selectables
あり、サブセットは実行時にビジネスルールによって定義されます。
これが私がこれを実現しようとする方法です:
私は3つ作成しますBindingSources
viewModelBindingSource
: とDataSource = ViewModel
rowsBindingSource
:DataSource = viewModelBindingSource
AND付きDataMember = Rows
selectablesBindingSource
DataSource = viewModelBindingSource
ANDでDataMember = Selectables
グリッドをに設定しDataSource
ましたrowsBindingSource
。グリッドにLookupEditのインプレースエディターリポジトリを作成します。repositoryItemLookUpEdit
'sDataSource
を列の値として設定selecteablesBindingSource
しますrepositoryItemLookUpEdit
ColumnEdit
gridViewsShownEditor
イベントに接続します。
this.gridView1.ShownEditor += gridView1_ShownEditor;
メソッドではgridView1_ShownEditor(object sender, EventArgs e)
、ビューへの参照を取得できるため、次のようなことができます。
GridView view = sender as GridView;
var newSelectables = new BindingList<MyElement>();
// businesslogic to populate newSelectables ...
var bs = new BindingSource(newSelectables, "");
edit = (LookUpEdit)view.ActiveEditor;
edit.Properties.DataSource = bs;
これは、クリックしたコンボボックスで新しいオプションを取得し、オプションを選択すると、バインドされたオブジェクト、つまりに値が設定される範囲で機能しますRow.Selected
。
そして今、私の問題として、セルがフォーカスを失うと、セルの内容が空白になります。
これは、newでnewを作成したことが原因のようBindingSource
です。この変更を省略すると、代わりにDataSource
の値が使用され、期待どおりに機能するためです。ViewModel.Selectables
それで、この場合、セルに表示されるテキストがフォーカスを失った後に空白になる理由を誰かが知っていますか?