我在数据网格内对数据进行分组时遇到问题。 数据包含在一个数据表中,该数据表由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"
答案 0 :(得分:7)
我找到了解决问题的方法......
可以将DataTable直接绑定到CollectionViewSource对象!
有了这个,没有什么可做的了。更改DataTable时,DataGrid会自动重新加载。 所有分组和过滤都可以像Alex Bell的link中所描述的那样完成。
<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>
答案 1 :(得分:1)
要以编程方式执行上述操作,您可以尝试以下代码,
CollectionViewSource mycollection = new CollectionViewSource();
mycollection.Source = MyDataTable;
mycollection.GroupDescriptions.Add(new PropertyGroupDescription("PropertyToGroup"));
dataGrid.ItemsSource = mycollection.View;
此处MyDataTable
是您的网格的可数据源,而PropertyToGroup
是您想要按其分组的属性,可能是DataTable
中的列。