2011-08-24 56 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