C#递归累计到父行
搞了半天 写了一个算法,希望能帮到需要的朋友
效果如下

水电费用是由 就是部门水费和电费累加的,而部门水费由科室水费累加起来的
表结构
DataTable dt = new DataTable();
dt.Columns.Add("pid");
dt.Columns.Add("fatherid");
dt.Columns.Add("Categories");
dt.Columns.Add("Month");
思路:
用递归算法:累计下级数量,递归累计到上级
public DataTable SumNumber(DataTable dt, string fatherid)
{
//月累计
double m_count = ; //查询是否有下级
DataRow[] rows = dt.Select("fatherid='" + fatherid + "'"); //上级变量,下级汇总数量到上级
DataRow fatherow = null;
if (dt.Select("pid='" + fatherid + "'").Length > )
{
fatherow = dt.Select("pid='" + fatherid + "'")[];
} //循环子行
foreach (DataRow row in rows)
{
m_count = Convert.ToDouble(row["Month"]);
//判断是否还有下下级
DataRow[] childrows = dt.Select("fatherid='" + row["pid"] + "'");
foreach (DataRow item in childrows)
{
SumNumber(dt, item["pid"].ToString());
m_count += Convert.ToDouble(item["Month"]);
}
//累计下下级到本级
row["Month"] = m_count;
//累计本级到上级
if (fatherow != null)
{
fatherow["Month"] = Convert.ToDouble(fatherow["Month"]) + m_count;
}
} return dt;
}
调用
dt = SumNumber(dt, "0");
C#递归累计到父行的更多相关文章
- 根据科目计算父科目ID,并递归累计求父科目的金额
通常情况下,我们会从外部系统或者其他数据源得到以下树形结构的数据,并需要对其进行处理 其中,需要做的处理包括 1.计算每个科目的父科目ID,即PARENT_ID; 2.计算每个科目的ITEM_LEVE ...
- JavaScript之递归查找所有父节点
......data: () => ({ // 数据 dt: [{ id: '1', children: [ { id: '1-1', children: [ { id: '1-1-1', ch ...
- SQL 递归树 子父节点相互查询
if object_id('[tb]') is not null drop table [tb] go create table [tb]([modeid] int,modename varchar( ...
- 转载:SQL 递归树 子父节点相互查询
if object_id('[tb]') is not null drop table [tb] go create table [tb]([modeid] int,modename varchar( ...
- sql 递归显示所有父节点
1.我先建两个表 一个表示项目及级别 另一个表示项目最后一级中包含内容.两个表的数据如图 CREATE TABLE [dbo].[yq_Project]( ,) primary key, ) NOT ...
- linux下查看目录下某种文件类型累计的代码行数
find 路径 -name '*.py' | xargs wc -l
- Java根据子节点递归父节点
先上数据库结构图和树形图: 项目中的一个需求是获取一个商品所属的二级分类名称. 思路分析,首先,我们是可以拿到当前商品所属的子分类的,比如说我买的是一个iPhone SE,对应的分类名称是 iPhon ...
- blob及行外数据
本文中我们假设innodb_page_size为16k,记录格式为compact. 1 大字段 大字段的类型可以参看这里, Data Type Storage Required TINYBLOB, T ...
- Java 对象的串行化(Serialization)
1.什么是串行化 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象的这种能记录自己的状态以便将来再生的能力.叫作对象的持续性(pe ...
随机推荐
- JAvaScript:JS数组元素去重的方法
在做javascript开发的时候,经常会遇到数组元素重复的问题,而javascript Array又没有直接提供方法解决此问题,还需要自己去实现. 方案一: 思路: 1.构建一个新的数组存放结果: ...
- Block编程注意的问题
一,前言 block 是在 iOS 4 中引入的新特性,它和 C++ 11 中的 lamba 表达式概念相似,有时候也被称为闭包.经过一段时间的使用,我发现要用对用好 block 还是有不少需要注 ...
- eclipse背景颜色调整参考(绿色养眼哟),其他工具也可以设置
http://hi.baidu.com/630270730/blog/item/d64f64dcc05376385982ddf6.html 提示键配置.提示快捷键.提示背景色.关键字颜色.代码显示.编 ...
- Eclipse 选中变量高亮显示设置
- 安卓开发应该知道的Drawable、Bitmap、Canvas和Paint的关系
首先让我们理解下Android平台中的显示类是View,但是还提供了底层图形类android.graphics,今天所说的这些均为graphics底层图形接口. Bitmap - 称作位图,一般位图的 ...
- Android Fragment之间传递List数据
要说的是在两个Fragment之间传递List数据,比如有个List<User>,以及传递字符串数据,比如testId,该如何从FragmentA传递到FragmentB呢? 下面这个例子 ...
- DBA_实践指南系列9_Oracle Erp R12应用补丁AutoPatch/AutoControl/AutoConfig(案例)
2013-12-09 Created By BaoXinjian
- News summary on C# and .NET
(keep updating...) Roslyn http://blogs.msdn.com/b/ericlippert/archive/2012/06/05/announcing-microsof ...
- JBoss DataGrid的集群部署与訪问
集群部署 JDG的缓存模式包含本地(Local)模式和集群(Clustered)模式.本项目採用多节点的Clustered模式部署.数据在多个节点的子集间进行复制.而不是同步拷贝到全部的节点. 使用子 ...
- BestCoder Round #4 Miaomiao's Geometry (暴力)
Problem Description There are N point on X-axis . Miaomiao would like to cover them ALL by using seg ...