zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    JavaScript 的历史
    阿里面试题:
    DBA_Oracle基本体系架构(概念)
    java内存管理机制
    HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash
    HashMap实现原理分析
    堆栈
    数据结构:HDU 2993 MAX Average Problem
    数学(欧拉函数):UVAOJ 11426 GCD
    搜索(DLX):HOJ 1017
  • 原文地址:https://www.cnblogs.com/CSSZBB/p/8919805.html
Copyright © 2011-2022 走看看