這是我有:LookupEdit在XtraGrid中單元格的值變爲空白
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
的子集,該子集在運行時由businessrules定義。
這是我試圖做到這一點:
我創建三個BindingSources
viewModelBindingSource
:與DataSource = ViewModel
rowsBindingSource
:與DataSource = viewModelBindingSource
和DataMember = Rows
selectablesBindingSource
與DataSource = viewModelBindingSource
和DataMember = Selectables
我設置網格的DataSource
到rowsBindingSource
。 我爲網格中的LookupEdit創建一個就地編輯器存儲庫。 我設置repositoryItemLookUpEdit
的DataSource
到selecteablesBindingSource
我設置repositoryItemLookUpEdit
作爲列的ColumnEdit
值
我掛鉤到GridView的ShownEditor
事件:
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
。
現在對我的問題,當細胞鬆動焦點時,細胞內容變成空白。
這似乎是不知何故,我創建一個新的BindingSource
新的,因爲如果我在ViewModel.Selectables
ommit的DataSource
這種變化,則值代替的事實引起的,它按預期工作。
那麼,有沒有人知道爲什麼在這種情況下失去焦點後,單元格中顯示的文本爲空?
你有什麼必然的網格數據源的列名?將數據添加到網格時,您必須具有數據源,否則它將變爲空白。您可以在InitNewRow事件中預先初始化它。 –
@Sres,是的,正如我所描述的那樣,我將網格dataSource設置爲綁定到ViewModel類中的行的BindingSource rowsBindingSource。網格不是空白的。 –