WPF 增加合计一栏
占坑中 先抛个参考链接
http://stackoverflow.com/questions/678690/how-can-i-create-a-group-footer-in-a-wpf-listview-gridview
以下例子是在listview后面增加合计一栏,但是又是已分组为基础的。下面我慢慢抛代码。也是自己在网上自己找的例子。下面是我具体实现的功能。如下:
前台页面定义CollectionViewSource,其中OrderNum是值以下分组合计是以订单号为分组条件。
<CollectionViewSource x:Key="orderViewSource"> <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription PropertyName="OrderNum" /> </CollectionViewSource.GroupDescriptions> </CollectionViewSource>
结果如下:
我是以订单号作为分组条件,单后得到订单号一样的单子的货品金额合计和订货数量合计。
<ListView.GroupStyle> <GroupStyle> <GroupStyle.ContainerStyle> <Style TargetType="{x:Type GroupItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type GroupItem}"> <DockPanel> <Grid DockPanel.Dock="Bottom"> <Grid.Resources> <local:TotalslSumConverter x:Key="sumslConverter" /> <local:TotaljeSumConverter x:Key="sumjeConverter" /> </Grid.Resources> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="3*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="货品金额总计: " HorizontalAlignment="Right" FontWeight="Bold"/> <TextBlock Grid.Row="2" Grid.Column="0" Text="订货数量总计: " HorizontalAlignment="Right" FontWeight="Bold"/> <TextBlock Grid.Row="0" Grid.Column="1" HorizontalAlignment="Right" Text="{Binding Path=Items, Converter={StaticResource sumjeConverter}}" Width="55" /> <TextBlock Grid.Row="2" Grid.Column="1" HorizontalAlignment="Right" Text="{Binding Path=Items, Converter={StaticResource sumslConverter}}" Width="55" /> </Grid> <ItemsPresenter /> </DockPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> </GroupStyle.ContainerStyle> </GroupStyle> </ListView.GroupStyle>
加入listview.groupstyle之后就是具体实现两个接口,sumjeConverter实现计算货品金额总和。sumslConverter实现计算订货数量总和。
public class TotaljeSumConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var users = value as IEnumerable<object>; if (users == null) return "0.00"; decimal sum = 0; foreach (var u in users) { sum = sum + ((OrderGoodsInfo)u).JE; } return sum.ToString("c"); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new System.NotImplementedException(); } }
。
好了,我们可以更改CollectionViewSource中分组条件,例如是以基本单位为分组条件。那么修改CollectionViewSource,如下:
<CollectionViewSource x:Key="orderViewSource"> <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription PropertyName="JBDW" /> </CollectionViewSource.GroupDescriptions> </CollectionViewSource>
结果如下: