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 ...
随机推荐
- C语言 c++区别
C语言是C89标准,C++是C++99标准的.C89就是在1989年制定的标准,如今最新的是C11和C++11标准.根据不同的标准,它们的功能也会有所不同,但是越新的版本支持的编译器越少
- Apache HBase 1.7.1 发布,分布式数据库
Apache HBase 是一个开源的.分布式的.版本化的.非关系的数据库.Apache HBase 提供对数十亿个数据的低延迟随机访问在非专用硬件上有数百万列的行. 关于 HBase更多内容,请参阅 ...
- 6 Java基础整理 第六-八章
1.封装 封装的目的是简化编程和增强安全性. 简化编程是指,封装可以让使用者不必了解具体类的内部实现细节,而只是要通过提供给外部访问的方法来访问类中的属性和方法 增强安全性是指,封装可以使某个属性只能 ...
- IBM java开发面试题
1.commite在什么场合使用 svn 提交项目 数据库自动提交 Oracle手动,mysql自动 2.void(0)怎么使用 html界面 <a href="javaScript ...
- Vue全局引入JS的方法
两种情况: 1. js为ES5的写法时,如下(自定义的my.js): function fun(){ console.log('hello'); } Vue中的全局引入方式为,在index.html中 ...
- Spring-初见
目录 组成 Spring Boot与Spring Cloud IOC DI 1.常量注入 2.Bean注入 3.Properties注入 p命名和c命名注入 Bean Singleton Protot ...
- markdown文档编写基础
Markdown快速入门教程 ###########来源:https://zhuanlan.zhihu.com/p/84918488 ###########来源:https://github.com/ ...
- js hook
//cookie hook (function () { 'use strict'; var cookie_cache = document.cookie; Object.defineProperty ...
- 通过比较rgb破解滑动验证码
目标url:信用中国(广东中山)行政处罚 /** * base64转BufferedImage * * @param base64 * @return */ public static Buffere ...
- [Ynoi2011]初始化 题解
第一道Ynoi,纪念一下. 众所周知,Ynoi会进行惨无人道的卡常操作,所以我们可以使用暴力去做Ynoi. 于是乎,我们考虑分块+暴力. 对于操作2,不难发现是道裸的分块,可以抄P3372的代码. 对 ...