我有两个表,设备和组件。每个设备由一个或多个组件组成。现在我有一个显示设备的数据网格,以及我数据库中View的相关属性。
我想要的是在同一窗口中有第二个数据网格,它将显示数据网格中所选设备所包含的组件。
到目前为止,我知道我可以使用SelectedItem属性获取选定的行:
Equipment eq= (Equipment )myDataGrid.SelectedItem;
但什么时候应该运行此代码?我使用EF将我的数据库实体映射到CLR对象,其中我也包含了组件及其关系表。
当用户在设备中选择一行时,我当然需要使用新信息刷新组件数据网格,我可以这样做。
myGrid.ItemsSource = myDataSource;
如何开始解决此问题?
我正在使用一个视图,其中包含来自我的设备数据网格中3个不同表的数据,因此设置为数据网格ItemsSource的表与组件表没有直接关系。
答案 0 :(得分:1)
我通过使用获取组件并在调用Equipment数据网格上的SelectionChanged事件时将它们插入到数据网格中来修复它:
private void EquipDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
var row_list = GetDataGridRows(EquipDataGrid);
foreach (DataGridRow single_row in row_list)
{
if (single_row.IsSelected == true)
{
EquipmentView selectedEquipment = (EquipmentView)EquipDataGrid.SelectedItem;
using (wiki_nolek_dk_dbEntities db = new wiki_nolek_dk_dbEntities())
{
db.Configuration.LazyLoadingEnabled = true;
var equipmentRelation = db.EquipmentComponents.Where(c => c.EquipmentID == selectedEquipment.EquipmentId);
var componentsForEquipment = new List<Component>();
foreach (var row in equipmentRelation)
{
var component = db.Components.FirstOrDefault(c => c.ComponentId == row.ComponentID);
componentsForEquipment.Add(component);
}
CompDataGrid.ItemsSource = componentsForEquipment;
}
}
}
}
catch
{
MessageBox.Show("Det valgte udstyr eksisterer ikke.");
}
}
答案 1 :(得分:0)
我修改了您自己的回复代码以删除无用的foreach
循环。我不知道wiki_nolek_dk_dbEntities
如何正常工作,但我还要添加{{ 1}}到任意ToList()
个查询结果,以确保结果为db
而不是List
。
IQueryable