你可以試試:
cmbWorkOrder.ItemsSource = (test.ItemsSource as IEnumerable<testTblEntity>)
.Select(t => t.PropertyToDisplayInComboBox);
它返回一個IEnumerable<T>
其中T
是要在組合框中(例如一個string
)顯示屬性的類型。我期望綁定到test.ItemsSource
將執行查詢以從DB中將實體提取到內存中,然後綁定到cmbWorkOrder.ItemsSource
只從內存集合中讀取其數據並且不再次訪問數據庫。雖然我不是。
編輯
也許這是一個有點清潔:
test_DataEntities db = new test_DataEntities();
DataGrid test = new DataGrid();
List<testTblEntity> list = db.testTbls.ToList(); // executes the query
test.ItemsSource = list;
cmbWorkOrder.ItemsSource = list.Select(t => t.PropertyToDisplayInComboBox);
查詢的時候居然被執行您現在擁有控制權。在第一個例子中,它將依賴於綁定引擎,當它綁定網格時,以及組合框到您的數據可能取決於XAML中控件的順序(假設它是WPF)。
其實我只是在爭鬥了一個小時後才發現它。代碼:var query = from a in db.testTbl select a.testColumn; cmbWorkOrder.ItemsSource = query; – user779610
真棒。你給我的代碼片段工作!!!!!!非常感謝Slauma – user779610
@ user779610:很好,那也可以。它會發出一個Db查詢。如果你將完整的實體加載到你的'test.ItemsSource'中,那麼你可以從內存數據中爲你的組合框拉出單個列,從而避免第二次DB查詢。這是我上面例子中的想法。 – Slauma