C1DataGrid的统计问题
需求:对C1DataGrid某列进行统计并显示在C1DataGrid最后一行尝试:参考样例GrandTotal,采用C1.WPF.DataGrid.Summaries中的DataGridAggregateSum方法等,实现了合计并显示的效果
问题:采用C1DataGrid 的 AutoGeneratingColumn事件,调用合计方法时,必须设置AutoGenerateColumns="True"。但是这样会使列表绑定的Model里面所有的属性全部显示到列表上了,请问如何避免呢?
控件:Studio for WPF
主要代码:
.xaml.文件部分
<c1:C1DataGrid Grid.Row="3" Name="OrderDataGrid" IsReadOnly="True"
ColumnHeaderHeight="35" CanUserAddRows="False" CanUserEditRows="False"
ItemsSource="{Binding OrderList}" AutoGenerateColumns="True"
FrozenBottomRowsCount="1" AutoGeneratingColumn="OrderDataGrid_AutoGeneratingColumn" >
<c1:C1DataGrid.Columns>
<c1:DataGridTextColumn Header="订单号" Binding="{Binding COSourceNo}" MinWidth="90"/>
<c1:DataGridTextColumn Header="订单类型" Binding="{Binding OrderTypeStr}"MinWidth="80"/>
<c1:DataGridTextColumn Header="产品规格" Binding="{Binding Piece}" MinWidth="120"/>
<c1:DataGridTextColumn Header="产品数量" Binding="{Binding ProductQuantity}" MinWidth="70"/>
<c1:DataGridTextColumn Header="总面积" Binding="{Binding ProductTotalArea}" MinWidth="80"/>
<c1:DataGridTextColumn Header="下单时间" Binding="{Binding CreatedOnStr}" MinWidth="100"/>
</c1:C1DataGrid.Columns>
<c1:C1DataGrid.BottomRows>
<c1:DataGridSummaryRow/>
</c1:C1DataGrid.BottomRows>
</c1:C1DataGrid>
.xaml.cs文件部分
private void OrderDataGrid_AutoGeneratingColumn(object sender, C1.WPF.DataGrid.DataGridAutoGeneratingColumnEventArgs e)
{
if (e.Property.Name == "ProductQuantity")
{
DataGridAggregate.SetAggregateFunctions(e.Column,
new DataGridAggregatesCollection
{
new DataGridAggregateSum { ResultFormat = "SUM = {0}" },
new DataGridAggregateAvg { ResultFormat = "AVG = {0}" },
});
}
} 回复 1楼CanYou8的帖子
谢谢您提供的代码。
我测试后给您反馈。 问下 我这个问题进展如何? 回复 3楼CanYou8的帖子
很抱歉回复晚了。
针对您的问题,有一个解决方案:给绑定的Model里的字段添加相应的属性。
比如,你不想让某列显示出来,就在相应的属性上加上displayattribute,把autogeneratefield设置为false。
举个例子,不想显示Model里的字段CretedOnStr,代码参考:
public DateTime CreatedOnStr 在Model里做标记是一种方案,但需逐一修改Model里面的每一个不想显示的属性。这样做感觉可维护性不好,改动挺多不易推广;而且显示的列将来会有变化,我们甚至在考虑动态配置列的显示与否。
这种需求,必须用后台事件方式来配合实现吗?能否不用C1DataGrid 的 AutoGeneratingColumn事件,用其他的事件呢? 回复 5楼CanYou8的帖子
是的,目前研发组给的建议是采用4楼标记的方式。
C1DataGrid触发的就是AutoGeneratingColumn事件。 这个问题的答复,不是很满意。给出的建议和方案,可行性很低:一来做起来繁琐,最主要的是很多Model是共用的,会绑定到一个以上的列表。C1.WPF.DataGrid.Summaries 所提供的功能基本没法用,我再想想办法吧 回复 7楼CanYou8的帖子
谢谢您的反馈。
您的意见我收到了,我会提交给产品组。
页:
[1]