首页 文章

C#/ WPF将数据集中的一个表绑定到两个DataGrids . 可能吗?

提问于
浏览
0

我的项目中有一个 DataSet ,我想用一个表中的数据制作两个 DataGrid .

在这个表上,我有一个值为0或1的列,我希望显示两个不同的 DataGrid :一个只显示0和0的行 .

我在做什么是这样的:

defaultDataSet.AudioDataTable audio_table = new defaultDataSet.AudioDataTable();
SQLiteConnection con = new SQLiteConnection("Data Source=" + configurations_folder + AppDbFile);
con.Open();
SQLiteCommand cmd = con.CreateCommand();
cmd.CommandText = string.Format("SELECT * FROM Audio WHERE Type = 0");
SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd);
SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter);
adapter.Fill(audio_table);
con.Close();

defaultDataSet.AudioDataTable audio_customized_table = new defaultDataSet.AudioDataTable();
con = new SQLiteConnection("Data Source=" + configurations_folder + AppDbFile);
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = string.Format("SELECT * FROM Audio WHERE Type = 1");
adapter = new SQLiteDataAdapter(cmd);
builder = new SQLiteCommandBuilder(adapter);
adapter.Fill(audio_customized_table);
con.Close();

那么如何将 audio_tableaudio_customized_table 绑定到两个DataGrids呢?我应该使用像 CollectionViewSource 这样的东西吗?如果有,怎么样?

EDIT

以下是我的XAML代码上的 DataGrid

<DataGrid   x:Name="AudioReservedDataGrid" 
            ColumnHeaderHeight="60" 
            CanUserAddRows="False" 
            AutoGenerateColumns="False" 
            EnableRowVirtualization="True" 
            ItemsSource="{Binding Source={StaticResource AudioViewSource}}"  
            RowDetailsVisibilityMode="VisibleWhenSelected"
            Loaded="AudioReservedDataGrid_Loaded" 
            CanUserResizeColumns="False" 
            CanUserReorderColumns="False" 
            Height="500" 
            CanUserSortColumns="False">

<DataGrid   x:Name="AudioCustomizedDataGrid" 
            ColumnHeaderHeight="60" 
            CanUserAddRows="True" 
            AutoGenerateColumns="False" 
            EnableRowVirtualization="True"
            ItemsSource="{Binding Source={StaticResource AudioViewSource}}" 
            RowDetailsVisibilityMode="VisibleWhenSelected"
            CanUserResizeColumns="False" 
            CanUserReorderColumns="False" 
            Height="500" 
            CanUserSortColumns="False" 
            RowEditEnding="AudioCustomizedDataGrid_RowEditEnding" 
            CanUserDeleteRows="True">

我几乎可以肯定问题是 ItemsSource ,但我不知道如何根据需要绑定我的表格 .

1 回答

  • 1

    我刚刚发现了如何解决这个问题 . 我需要做两个不同的 DataTable 并从那里工作来过滤我想要的东西以及两个不同的 CollectionViewSource ,因为我在我的代码上显示:

    //AUDIO DEFAULT
    AudioTableAdapter databaseDataSetAudioDefaultTableAdapter = new AudioTableAdapter();
    databaseDataSetAudioDefaultTableAdapter.Fill(databaseDataSet.Audio);
    defaultDataSet.AudioDataTable audio_table = new defaultDataSet.AudioDataTable();
    using (SQLiteConnection con = new SQLiteConnection("Data Source=" + configurations_folder + AppDbFile)) 
    {
        con.Open();
        SQLiteCommand cmd = con.CreateCommand();
        cmd.CommandText = string.Format("SELECT * FROM Audio WHERE Type = 0");
        using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd))
            adapter.Fill(audio_table);
    }
    System.Windows.Data.CollectionViewSource AudioDefaultViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("AudioDefaultViewSource")));
    AudioDefaultViewSource.Source = audio_table;
    AudioDefaultViewSource.View.MoveCurrentToFirst();
    
    //AUDIO CUSTOMIZED
    AudioTableAdapter databaseDataSetAudioCustomizedTableAdapter = new AudioTableAdapter();
    databaseDataSetAudioCustomizedTableAdapter.Fill(databaseDataSet.Audio);
    defaultDataSet.AudioDataTable audio_customized_table = new defaultDataSet.AudioDataTable();
    using (SQLiteConnection con = new SQLiteConnection("Data Source=" + configurations_folder + AppDbFile))
    {
        con.Open();
        SQLiteCommand cmd = con.CreateCommand();
        cmd.CommandText = string.Format("SELECT * FROM Audio WHERE Type = 1");
        using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd))
            adapter.Fill(audio_customized_table);
    }
    System.Windows.Data.CollectionViewSource AudioCustomizedViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("AudioCustomizedViewSource")));
    AudioCustomizedViewSource.Source = audio_customized_table;
    AudioCustomizedViewSource.View.MoveCurrentToFirst();
    

    在.xaml中:

    <CollectionViewSource x:Key="AudioDefaultViewSource" Source="{Binding Audio, Source={StaticResource databaseDataSet}}"/>
    <CollectionViewSource x:Key="AudioCustomizedViewSource" Source="{Binding Audio, Source={StaticResource databaseDataSet}}"/>
    
    <DataGrid 
        x:Name="AudioReservedDataGrid" 
        ColumnHeaderHeight="60" 
        CanUserAddRows="False" 
        AutoGenerateColumns="False" 
        EnableRowVirtualization="True" 
        ItemsSource="{Binding Source={StaticResource AudioDefaultViewSource}}"  
        RowDetailsVisibilityMode="VisibleWhenSelected"
        Loaded="AudioReservedDataGrid_Loaded" 
        CanUserResizeColumns="False" 
        CanUserReorderColumns="False" 
        Height="500" 
        CanUserSortColumns="False">
    
    <DataGrid 
        x:Name="AudioCustomizedDataGrid" 
        ColumnHeaderHeight="60" 
        CanUserAddRows="True" 
        AutoGenerateColumns="False" 
        EnableRowVirtualization="True" 
        ItemsSource="{Binding Source={StaticResource AudioCustomizedViewSource}}" 
        RowDetailsVisibilityMode="VisibleWhenSelected"      
        CanUserResizeColumns="False" 
        CanUserReorderColumns="False" 
        Height="500" 
        CanUserSortColumns="False"
        RowEditEnding="AudioCustomizedDataGrid_RowEditEnding"         
        CanUserDeleteRows="True">
    

相关问题