2011-08-24 55 views
-1

我試圖獲取一列數據並將其填入組合框,但無法使其正常工作。有人可以幫我解決這個問題嗎?如何從實體模型中獲取列數據?

代碼:

test_DataEntities db = new test_DataEntities(); 
DataGrid test = new DataGrid(); 
test.ItemsSource = db.testTbls; 
cmbWorkOrder.ItemsSource = test.Columns[2]; 

回答

1

你可以試試:

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)。

+0

其實我只是在爭鬥了一個小時後才發現它。代碼:var query = from a in db.testTbl select a.testColumn; cmbWorkOrder.ItemsSource = query; – user779610

+0

真棒。你給我的代碼片段工作!!!!!!非常感謝Slauma – user779610

+0

@ user779610:很好,那也可以。它會發出一個Db查詢。如果你將完整的實體加載到你的'test.ItemsSource'中,那麼你可以從內存數據中爲你的組合框拉出單個列,從而避免第二次DB查詢。這是我上面例子中的想法。 – Slauma