C# wpf中DataGrid 支持汇总行
最近有一个需求,需要汇总金额,份额等字段。我们使用的是原生的WPF控件,自己开发了一套Template。而没有使用比较成熟的第三方控件。所以这个功能得自己开发。并且要做成控件层次的功能。
当然也可以这样做,在ItemSource数据中手动汇总一行并显示。但这样做是纯业务层次的东西。且每个不同的界面。要做不同的业务逻辑处理。太LOW。

思路: 我们先来看下WPF原生DataGrid的模板,发现里面其实是一个ItemsPresener来呈现所有的数据行。第一种想法是,那么我们是否可以在ItemPresenter下面再放一个ItemPresenter来显示为汇总行。理想很丰满。问题是,看不到ItemPresenter是如何来呈现 ItemSoruce里的数据的源代码。WPF似乎并没有对这些实现做开源,事实上,我们对ItemPresenter的工作原理一无所知,只知道为ListBox等包含
itemPresenter控件的列表类控件,指定items或者itemsource后,控件会为我们呈现数据。(有大神指导怎么看源码的么?)。
退而求其次,新的想法是。为什么不在ItemsPresener下方。再放一个DataGrid那?列完全和上方的一样,对需要汇总的列做数据汇总。
那么我们来改造这个模板,新的模板代码如下

然后我们为这个新的模板创建一个新的类 ,继承自DataGrid
public class DateGridTotal:DataGrid{}
在ApplyTemplate时间处理函数中,构造这个新增的TotalRow,注意这里的绑定,这是整个程序的原理

最后在 OnItemsSourceChanged()函数中,根据控件的Itemsource 数据,生成汇总行的数据,并绑定到汇总行DATAGRID的itemsource。

大概思路和实现就是这样啦。可以参考附件源码
https://files.cnblogs.com/files/CSSZBB/WpfApplication6.zip
C# wpf中DataGrid 支持汇总行的更多相关文章
- WPF中datagrid不显示滚动条问题
WPF中DataGrid是自带滚动条的,当内容显示不下时可以使用滚动条显示.但是,开发中遇到了DataGrid一直不显示滚动条.之前也曾遇到过同类问题,再次经过查找,发现是StackPanel的原因, ...
- WPF中DataGrid中的DataGridCheckBoxColumn用法(全选,全否,反选)
原文:WPF中DataGrid中的DataGridCheckBoxColumn用法(全选,全否,反选) 前台代码 <DataGrid.Columns> <DataGridCheckB ...
- Working Experience - WPF 中 DataGrid 控件的应用
问题: 添加控件后, 编辑单元格会出现异常 绑定 ItemsSource 属性后, 更新绑定对象的数据, UI 不刷新 如何显示控件中 ComboBox 类型 解决方法: 绑定 ItemsSource ...
- WPF中DataGrid垂直滚动条滚动后导致每行CheckBox选择错乱
问题: WPF的DataGrid中出现选取或者多选以及单选的时候,出现滚动条的时候,如果发生了滚动,默认情况下就会出现已经选择的CheckBox错乱.这样的原因何在? 解决方案: 经过查阅资料,了解到 ...
- WPF中DATAGRID自定义验证(包含BINDINGGROUP)
DataGrid在Wpf中的应用是十分广泛的,当你需要表中的信息稍详细的显示出来时,或者我们需要进行某些数据输入时,都有可能采用DataGrid.当然对信息的显示,我们不需要进行验证,但当我们将Dat ...
- WPF中DataGrid的ComboBox的简单绑定方式(绝对简单)
在写次文前先不得不说下网上的其他wpf的DataGrid绑定ComboBox的方式,看了之后真是让人欲仙欲死. 首先告诉你一大堆的模型,一大堆的控件模板,其实或许你紧紧只想知道怎么让combobox怎 ...
- wpf 中DataGrid 控件的样式设置及使用
本次要实现的效果为: 这个DataGrid需要绑定一个集合对象,所以要先定义一个Experience类,包含三个字段 /// <summary> /// 定义工作经历类 /// </ ...
- WPF中DataGrid自定义实现最后一行下面跟一个汇总行,类似MT4
1.先看MT4实现的效果:(图中红框部分),其实就是DataGrid在最后一行下面跟一个汇总的显示条 2.看我WPF实现的效果,汇总行中的数据可以绑定哦!效果图如下: 我扩展了一下DataGrid控件 ...
- WPF中DataGrid控件内Button的Command和CommandParameter的绑定
场景:视频上传功能,上传列表使用DataGrid控件,视频有不同的状态对应不同的操作,DataGrid中最后一列为操作列,里面是Button控件.希望点击Button后执行对应的操作,但是设置Butt ...
随机推荐
- python使用笔记15--操作Excel
python操作Excel需要引入第三方模块 执行以下命令: pip install xlwt pip install xlrd pip install xlutils 1.写Excel 1 impo ...
- 测试管理工具 - Tuleap部署和安装使用教程
安装 通过CentOS的安装,非常简单,命令直接为pip install tuleap 部署 登录管理员权限 登录名为中文名拼音,如wuweiping. 设置的默认密码为12345678,也可以进入配 ...
- es-head部署
#一.更新centos7的库sudo yum update -y二.安装一系列文件(已安装可以不安装)sudo rpm -ivh http://dl.fedoraproject.org/pub/epe ...
- python + csv 操作(读写)
import csv"""与excel文件不同,csv文件中:1.数据都没有数据类型,值都是'字符串'2.没有颜色和样式,不能指定单元格测的宽高,不能合并单元格3.没有对 ...
- 基于 apache-arrow 的 duckdb rust 客户端
背景 duckdb 是一个 C++ 编写的单机版嵌入式分析型数据库.它刚开源的时候是对标 SQLite 的列存数据库,并提供与 SQLite 一样的易用性,编译成一个头文件和一个 cpp 文件就可以在 ...
- 【强连通分量】Proving Equivalences
[题目链接]hdu-2767 [题目描述] Consider the following exercise, found in a generic linear algebra textbook. L ...
- jdk源码阅读-Object类
native 关键字 private static native void registerNatives(); static { registerNatives(); } public final ...
- [考试总结]noip模拟13
因为最近考试频繁,所以咕掉了好长时间... 淦,刚说完又来一场... 先咕了,等以后有时间再写.... 回来了... 首先看到这个题目们,感觉就不存好意... 然后开始开 \(T1\). 只能蒻蒻地按 ...
- 将py文件打包成exe文件
PyInstaller工具是跨平台的,它既可以在 Windows平台上使用,也可以在 Mac OS X 平台上运行.在不同的平台上使用 PyInstaller 工具的方法是一样的,它们支持的选项也是一 ...
- Python基础之用PyQt5创建menu
前一篇文章中,我们已经安装了PyQt5,并且已经测试过可用.那么接下来第一步开始学习如何创建菜单. 第一步:在想要运行py的地方右击External Tools-->designer,打开des ...