繁体   English   中英

WPF Datagrid使用Datatable作为ItemSource进行分组

[英]WPF Datagrid grouping with Datatable as ItemSource

我在数据网格内对数据进行分组时遇到问题。 数据包含在一个数据表中,该数据表由SQL数据库填充并绑定到我的数据网格。 这一切都很好......

现在我想通过多次包含相同数字的字段'ID'对我的数据网格进行分组...我已经尝试了很多可能的解决方案,我在这里和那里找到了,但它们都没有工作。 他们中的大多数使用CollectionViewSource而不是Datatable ...

是不是有任何直接的方法来分组(+过滤)我的数据表并在数据网格中显示它? 我希望有人能帮助我找到一个简单的方法,或者至少给我一个提示,我需要寻找什么。

编辑:要从SQL数据库获取数据,我使用以下(简化)代码:

this.db = new DBConnection(...);
DataTable dt_Applications = 
                        this.db.ExecuteReader( Properties.SqlQueries.SQL_GetApplications );

WPF:

<DataGrid Name="dg_Applications" 
          ItemsSource="{Binding dt_Applications}" 
          IsReadOnly="True" 
          CanUserResizeRows="False" 
          ClipboardCopyMode="IncludeHeader" 
          AutoGenerateColumns="True" />

数据看起来像:

[ID]   [Name]     [Var1]         [Var2]
0      "App0"     "Value0.1.0"   "Value0.2.0"
0      "App0"     "Value0.1.1"   "Value0.2.1"
0      "App0"     "Value0.1.2"   "Value0.2.2"
1      "App1"     "Value1.1.0"   "Value1.2.0"
2      "App2"     "Value2.1.0"   "Value2.2.0"
2      "App2"     "Value2.1.1"   "Value2.2.1"

输出:

[ID]   [Name]     [Var1]         [Var2]
"App0 [0]:"
-      -          "Value0.1.0"   "Value0.2.0"
-      -          "Value0.1.1"   "Value0.2.1"
-      -          "Value0.1.2"   "Value0.2.2"
"App1 [1]:"
-      -          "Value1.1.0"   "Value1.2.0"
"App2 [2]:"
-      -          "Value2.1.0"   "Value2.2.0"
-      -          "Value2.1.1"   "Value2.2.1"

我找到了解决问题的方法......

可以将DataTable直接绑定到CollectionViewSource对象!

有了这个,没有更多的事要做。 更改DataTable时,DataGrid会自动重新加载。 所有分组和过滤都可以像Alex Bell的链接中所描述的那样完成。

<Window.Resources>
    <CollectionViewSource x:Key="cvsDataTable" Source="{Binding dt_myDataTable}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="ID"/>
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Window.Resources>

<DataGrid Name="dg_myDataTable" ItemsSource="{Binding Source={StaticResource cvsDataTable}}">
    <DataGrid.GroupStyle>...</DataGrid.GroupStyle>
    <DataGrid.Columns>...</DataGrid.Columns>
</DataGrid>

要以编程方式执行上述操作,您可以尝试以下代码,

CollectionViewSource mycollection = new CollectionViewSource();
mycollection.Source = MyDataTable;
mycollection.GroupDescriptions.Add(new PropertyGroupDescription("PropertyToGroup"));
dataGrid.ItemsSource = mycollection.View;

这里MyDataTable是网格的可数据源, PropertyToGroup是您想要分组的属性,它可能是DataTable的列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM