C#WPFDataGrid分组统计
DataGrid分组就不再介绍了,主要讲下如何把分组后的数据统计并显⽰出来,思路如下:
DataGrid分组产⽣的组类型为CollectionViewGroup,其Items属性即组内元素,⾃定义⼀个转换类GroupSum计算如求和等统计数据(这⾥就以求和为例),在GroupStyle中⽤转换⼀下即可;
下⾯是相关类的定义和xaml代码:
public class GroupSum : IValueConverter
{
#region 分组组内求和
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var total = 0.0;
/
/ DataGrid分组后对应的组及组内元素CollectionViewGroup.Items 类型是ReadOnlyObservableCollection<object>
if (value is ReadOnlyObservableCollection<object> items)
{
foreach (var item in items)
{
var de = item as XXXX(我⾃定义的类);
total += de.ZongJia;
}
}
return Math.Round(total, 2).ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
xaml⽂件中添加:
....
xmlns:local1="clr-namespace:命名空间..."
....
fontweight属性bold<UserControl.Resources>
<local1:GroupSum x:Key="GroupSum" />
</UserControl.Resources>
...
在DataGrid内部定义分组样式DataGrid.GroupStyle
xaml代码:
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock
Padding="3"
Background="LightBlue"
FontWeight="Bold"
Text="{Binding Path=Name}" />
<TextBlock
Padding="3"
Background="LightBlue"
FontWeight="Bold"
Text="{Binding Path=ItemCount, StringFormat='{}共:{0}笔'}" />
<TextBlock
Padding="3"
Background="LightBlue"
FontWeight="Bold">
<TextBlock.Text>
<Binding
Converter="{StaticResource GroupSum}"
Path="Items"
StringFormat="{}共:{0}元" />
</TextBlock.Text>
</TextBlock>
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</DataGrid.GroupStyle>
重点是:把Items(即CollectionViewGroup.Items)传给转换类进⾏处理即可
<TextBlock.Text>
<Binding
Converter="{StaticResource GroupSum}"
Path="Items"
StringFormat="{}共:{0}元" />
</TextBlock.Text>
最后的效果图:
⾃⼰做项⽬遇到的⼩需求,⽹上没有到关于“DataGrid分组统计”⽐较合适的解决⽅案,这⾥提供⼀个思路,仅供参考,希望能帮助到有需求的⼩伙伴。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论