将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 ...
随机推荐
- settimeout如何调用方法的时候,传递参数
常见写法: setTimeout("loaded()", 200); 延迟加载loaded方法 如果要给loaded方法传递参数 setTimeout(function () { ...
- JavaScript基础---作用域,匿名函数和闭包【转】
匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function box() { //函数名是 box return 'TT'; } //匿名函数 f ...
- 一步一步配置NLB
废话不说,配置NLB需要准备以下环境: 1. 至少两个服务器,我的是windows server 2008 R2; 我的两个服务器名分别为NLB3和NLB2,其中NLB3是主,为什么呢?后面会谈到,在 ...
- 解决Putty连接不上服务器的方法
1.vi /etc/ssh/sshd_config 将PermitRootLogin的注释取消,或者将no改为yes. 2.service sshd restart 3.setup命令进入将防火墙关闭 ...
- asp.net下ajax.ajaxMethod使用方法
使用AjaxMethod可以在客户端异步调用服务端方法,简单地说就是在JS里调用后台.cs文件里的方法,做一些JS无法做到的操作,如查询数据库. 使用AjaxMethod要满足一下几点: 1.如果 ...
- 搜索功能demo
代码如下: <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edg ...
- hdu 4631 Sad Love Story
http://acm.hdu.edu.cn/showproblem.php?pid=4631 没想到这道题需要用“平均时间复杂度” 计算 一直没有想到解法 因为不符考虑了最坏情况的理念 方法一: ...
- MSMQ消息队列
MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一 ...
- ROS创建工作空间(三)
查看正在使用的ROS工作空间,使用命令 echo $ROS_PACKAGE_PATH 我新建了两个
- MySql 性能优化杂记
前一段时间接触MySql 服务器,关于查询忧化方面整理,优化主要唯绕几个工具函数 : show profiling , explain , 索引 , limit 如果上司抱怨服务器查询太慢,这时候 ...