Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两个数据网格一个数据集如何设置实现(多对多)?_C#_Wpf_Database_Mvvm_Datagrid - Fatal编程技术网

C# 两个数据网格一个数据集如何设置实现(多对多)?

C# 两个数据网格一个数据集如何设置实现(多对多)?,c#,wpf,database,mvvm,datagrid,C#,Wpf,Database,Mvvm,Datagrid,我在这里遇到了一些问题,关于在一个数据集中显示两个数据表的关系,这两个数据表具有多对多关系。每个数据表都绑定到一个数据网格 因此,我在VS 2015 DataSet Designer中设计了我的文件数据库,因此有一个datatable材质和一个datatable Technik,以及多对多关系。若我启动我的应用程序,我会连接到我的数据库,并用表格填充我的数据集-这一切都发生在viewmodel中 private void InitDataSet() { if (F

我在这里遇到了一些问题,关于在一个数据集中显示两个数据表的关系,这两个数据表具有多对多关系。每个数据表都绑定到一个数据网格

因此,我在VS 2015 DataSet Designer中设计了我的文件数据库,因此有一个datatable材质和一个datatable Technik,以及多对多关系。若我启动我的应用程序,我会连接到我的数据库,并用表格填充我的数据集-这一切都发生在viewmodel中

    private void InitDataSet()
    {
        if (File.Exists(dbFilepath))
        {
            using (SQLiteConnection connection = new SQLiteConnection(dbConnection))
            using (SQLiteCommand cmd = connection.CreateCommand())
            {
                string query = "";

                connection.Open();

                systemTime = DateTime.Now;

                query = "SELECT * FROM Tbl_Materialliste";
                dataAdapter = new SQLiteDataAdapter(query, connection);

                dataAdapter.Fill(MlDb.Tbl_Materialliste);

                query = "SELECT * FROM Tbl_Technik";
                dataAdapter = new SQLiteDataAdapter(query, connection);
                dataAdapter.Fill(MlDb.Tbl_Technik);
                //dataAdapter.Fill(MlDb.Temp_Technik);

                query = "SELECT * FROM Tbl_Besitzt";
                dataAdapter = new SQLiteDataAdapter(query, connection);
                dataAdapter.Fill(MlDb.Tbl_Besitzt);
           }

                MlDataSetCollection.Add(MlDb);

                // hier muss noch die Tabelle "Log" hinzugefuegt werden
            }
        }
        else
        {
            // Pfad oder Datei existiert nicht
        }
    }
MlDb是从设计器创建的对象,是一个扩展数据集

因此,我的XAML如下所示:

           <DataGrid x:Name="MaterialDataGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
                              AutoGenerateColumns="False" 
                              CanUserAddRows="True" CanUserSortColumns="False" 
                              ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible"
                              ItemsSource="{Binding Path=MlDb.Tbl_Materialliste, UpdateSourceTrigger=PropertyChanged}" 
                              IsSynchronizedWithCurrentItem="True">
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="RowEditEnding">
                                <ic:CallMethodAction MethodName="RowEditEnding" TargetObject="{Binding}" />
                            </i:EventTrigger>
                            <i:EventTrigger EventName="SelectionChanged">
                                <ic:CallMethodAction MethodName="SelectionChanged" TargetObject="{Binding}" />
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="Material" Width="Auto" Binding="{Binding Path=MaterialID}"/>
                            <DataGridTextColumn Header="Materialkurztext" Width="Auto" Binding="{Binding Path=Materialkurztext}"/>
                            <DataGridTextColumn Header="Herstellername" Width="Auto" Binding="{Binding Path=Herstellername}"/>
                            <DataGridTextColumn Header="Her.-Artikelnummer" Width="Auto" Binding="{Binding Path=Her.-Artikelnummer}"/>
                            <DataGridTextColumn Header="Dokument" Width="Auto" Binding="{Binding Path=Dokument}"/>
                            <DataGridTextColumn Header="Subst.-Material" Width="Auto" Binding="{Binding Path=Subst.-Material}"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </Grid>
                <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="1" Grid.Column="1" Margin="26,1,-25,-1">
                    <DataGrid x:Name="TechnikDataGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                              AutoGenerateColumns="False" 
                              CanUserAddRows="True" CanUserSortColumns="False" 
                              ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible"
                              ItemsSource="{Binding Path=MlDb.Temp_Technik}" Margin="0,0,34,0">
                        <DataGrid.Columns>
                            <DataGridCheckBoxColumn Binding="{Binding Path=IsSelected}" Header="Auswahl" Width="70" />
                            <DataGridTextColumn Header="Technik ID" Width="100" Binding="{Binding Path=TechnikID}"/>
                            <DataGridTextColumn Header="Techniktyp" Width="100" Binding="{Binding Path=Techniktyp}"/>
                            <DataGridTextColumn Header="Anlage" Width="100" Binding="{Binding Path=Anlage}"/>
                            <DataGridTextColumn Header="Anlagengruppe" Width="100" Binding="{Binding Path=Anlagengruppe}"/>
                            <DataGridTextColumn Header="Bemerkung" Width="100" Binding="{Binding Path=Bemerkung}"/>
                        </DataGrid.Columns>
                    </DataGrid>

因此,父表是Material,子表是Technik-如何在datagrid中选择一种材料,然后在另一个datagrid中选择一个完整的Technik表lsit,并显示与复选框的关系。选中复选框表示材料帽子技术和未选中无关系


我真的需要一些帮助这里的家伙-如果你有其他的建议,让我知道!提前感谢

您可以将MlDb对象分解为2个ObservableCollection,并让第二个集合根据第一个DataGrid的选定项更新其项


您的数据网格应该将其ItemsSource绑定到保存集合的属性。

这篇文章有什么帮助?也许我是个新手,但我知道mvvm,我知道OCs能做什么。。。但问题是,我不知道你的方法将如何帮助我解决我面临的问题。。。这是在datagrid中完成的,DG1的itemssource是datatable1,DG2的itemssource是datatable2。。。也许你可以展示一些代码,我可能会得到你的方法