将n行3列的数据dataTable装换成m行7列的dataTable
//思路:新建dataTable,定义需要的列, 先将数据源进行分组,第一重遍历获取所有组,第二重遍历获取某一个组的具体数据
public void DataBind()
{
DateTime time;
if (string.IsNullOrEmpty(txtDate.Value.Trim()) || !DateTime.TryParse(txtDate.Value.Trim() + "-01", out time))
{
//如果时间为空,则查询当月
this.txtDate.Value = DateTime.Now.ToString("yyyy-MM");
}
//获取各部门对于各物流公司的费用统计
DataTable AllData = CurrentBll.GetLogisticsCompanyExpensesDt(this.txtDate.Value.Trim()); var data = from item in AllData.AsEnumerable()
group item by item["DeptCode"].DBValueToString();
//各部门数据
DataTable table = new DataTable();
table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "DeptCode" });
table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "shunfeng" });
table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "zaiji" });
table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "quanyi" });
table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "cces" });
table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "quanfeng" });
table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "ems" });
table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "shengtong" });
table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "sum" }); foreach (IGrouping<string, DataRow> group in data)
{
DataRow row = table.NewRow();
row["DeptCode"] = group.Key;
foreach (var temp in group)
{
string cost = temp["Cost"].DBValueToString();
switch ( temp["DeliveryType"].DBValueToInt32() )
{
case CourierDeliveryType.SF: row["shunfeng"] = cost;
break;
case CourierDeliveryType.ZJS: row["zaiji"] = cost;
break;
case CourierDeliveryType.QY: row["quanyi"] = cost;
break;
case CourierDeliveryType.CCES: row["cces"] = cost;
break;
case CourierDeliveryType.QF: row["quanfeng"] = cost;
break;
case CourierDeliveryType.EMS: row["ems"] = cost;
break;
case CourierDeliveryType.ST: row["shengtong"] = cost;
break;
};
}
//统计该行的所有数据
row["sum"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
table.Rows.Add(row);
} //合计信息
DataTable CountTable = table.Clone();
var count = from item in AllData.AsEnumerable()
group item by item["DeliveryType"].DBValueToInt32();
DataRow countRow = CountTable.NewRow();
//统计统计
countRow["sum"] = count.Sum(p => p.Sum(l => l["Cost"].DBValueToDecimal())).ToString(); foreach (IGrouping<int, DataRow> group in count)
{
switch (group.Key.DBValueToInt32())
{
case CourierDeliveryType.SF: countRow["shunfeng"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
break;
case CourierDeliveryType.ZJS: countRow["zaiji"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
break;
case CourierDeliveryType.QY: countRow["quanyi"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
break;
case CourierDeliveryType.CCES: countRow["cces"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
break;
case CourierDeliveryType.QF: countRow["quanfeng"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
break;
case CourierDeliveryType.EMS: countRow["ems"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
break;
case CourierDeliveryType.ST: countRow["shengtong"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
break;
};
}
CountTable.Rows.Add(countRow);
this.rptLogisticsCompanyExpenses.DataSource = table;
this.rptLogisticsCompanyExpenses.DataBind();
this.rptSum.DataSource = CountTable;
this.rptSum.DataBind();
}
将n行3列的数据dataTable装换成m行7列的dataTable的更多相关文章
- sql 把一列的数据按逗号分隔转换成多行
ALTER proc [dbo].[ModifyWkCashAccountNo]asbeginset xact_abort onbegin transactiondeclare @errors int ...
- Web Api 将DataTable装换成Excel,并通过文件流将其下载
不废话,直接上代码 前端代码 <input type="button" class="layui-btn" value="Test-GetFil ...
- datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)
一.动态定义列头 在ajax中,用datatable再去重新配置列头,当然传回的数据中,要有对应放列头的键值对 我自定义了Mock数据,用于前端自己交互. 其中,rowdata用于存放传回的数据,co ...
- pandas数据处理基础——筛选指定行或者指定列的数据
pandas主要的两个数据结构是:series(相当于一行或一列数据机构)和DataFrame(相当于多行多列的一个表格数据机构). 本文为了方便理解会与excel或者sql操作行或列来进行联想类比 ...
- miniui 给表格行添加监听事件的几种方法以及点击某列列名数据不能排序的问题
最近在使用miniui框架做开发,在做表格行的点击监听事件中发现了几个属性,都可以起到监听效果但是执行的结果却大有不同.好了废话不多说,直接上代码. <div id="pageGrid ...
- pandas 筛选指定行或者列的数据
pandas主要的两个数据结构是:series(相当于一行或一列数据结构和DataFrame(相当于多行多列的一个表格数据机构). 原文:https://www.cnblogs.com/gangand ...
- C# 关于操作datatable的列名和删除某一列的数据
1.获取一个数据集表 DataTable dt = selectDEGS(type, words, KUser); 2.删除某一列 dt.Columns.Remove("TaskID&quo ...
- ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- View中选择的数据行中的部分数据传入到Controller中
将View中选择的数据行中的部分数据传入到Controller中 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NE ...
随机推荐
- 转载,javascript 设计模式
了解JavaScript设计模式我们需要知道的一些必要知识点:(内容相对基础,高手请跳过) 闭包:关于闭包这个月在园子里有几篇不错的分享了,在这我也从最实际的地方出发,说说我的理解. 1.闭包最常用的 ...
- XAML-1
1.XAML Extension Application Marked Language,是WPF技术中专门用来设计UI的语言.XAML是从XML派生出来的,是一种声明式语言,当你看到一个标签,就是声 ...
- 如何打开asp.net中的出错提示?在程序发布后
答案:修改其中的一个配置节点,<customErrors mode="On"/>
- uva 1210
#include<iostream> #include<cstring> using namespace std; + ; bool notprime[MAXN];//值为fa ...
- bzoj 1816: [Cqoi2010]扑克牌
#include<cstdio> #include<iostream> using namespace std; ],ans; bool pan(int x) { int a1 ...
- 常州培训 day5 解题报告
第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...
- model.addAttribute("student",student)——渲染
往前台视图传参数,(将在处理器传入的模型数据在视图jsp中展示出来,即为渲染) 按照spring一般的编码习惯,model 应该是contrller里面的Map结构吧.Map里面添加key=" ...
- phpstrom+xdebug+Xdebug helper 调试php
第一步,php.ini打开xdebug扩展 xdebug.remote_enable=on ; 此地址为IDE所在IP xdebug.remote_host=127.0.0.1 xdebug.remo ...
- exe转msi
1.起因 由于域推送只支持msi安装包,而很多常用的工具比如Adobe Flash Player.exe.SilverLight.exe都是exe格式的,于是引出要将exe转成silent msi的工 ...
- APP store 上架过程中碰到的那些坑&被拒的各种奇葩原因整理&审核指南中文版
苹果官方发布的十大常见被拒原因 1.崩溃次数和Bug数量.苹果要求开发者在将应用提交给App Store之前彻查自己的应用,以尽量避免Bug的存在. 2.链或错误的链接.应用中所有的链接必须是真实且有 ...