在WPF中选择数据网格行时显示数据网格中相关表的数据

时间:2017-11-11 08:27:00

标签: c# sql wpf entity-framework datagrid

我有两个表,设备和组件。每个设备由一个或多个组件组成。现在我有一个显示设备的数据网格,以及我数据库中View的相关属性。

我想要的是在同一窗口中有第二个数据网格,它将显示数据网格中所选设备所包含的组件。

到目前为止,我知道我可以使用SelectedItem属性获取选定的行:

 Equipment eq= (Equipment )myDataGrid.SelectedItem;

但什么时候应该运行此代码?我使用EF将我的数据库实体映射到CLR对象,其中我也包含了组件及其关系表。

当用户在设备中选择一行时,我当然需要使用新信息刷新组件数据网格,我可以这样做。

 myGrid.ItemsSource = myDataSource;

如何开始解决此问题?

我正在使用一个视图,其中包含来自我的设备数据网格中3个不同表的数据,因此设置为数据网格ItemsSource的表与组件表没有直接关系。

2 个答案:

答案 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