//思路:新建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的更多相关文章

  1. sql 把一列的数据按逗号分隔转换成多行

    ALTER proc [dbo].[ModifyWkCashAccountNo]asbeginset xact_abort onbegin transactiondeclare @errors int ...

  2. Web Api 将DataTable装换成Excel,并通过文件流将其下载

    不废话,直接上代码 前端代码 <input type="button" class="layui-btn" value="Test-GetFil ...

  3. datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)

    一.动态定义列头 在ajax中,用datatable再去重新配置列头,当然传回的数据中,要有对应放列头的键值对 我自定义了Mock数据,用于前端自己交互. 其中,rowdata用于存放传回的数据,co ...

  4. pandas数据处理基础——筛选指定行或者指定列的数据

    pandas主要的两个数据结构是:series(相当于一行或一列数据机构)和DataFrame(相当于多行多列的一个表格数据机构). 本文为了方便理解会与excel或者sql操作行或列来进行联想类比 ...

  5. miniui 给表格行添加监听事件的几种方法以及点击某列列名数据不能排序的问题

    最近在使用miniui框架做开发,在做表格行的点击监听事件中发现了几个属性,都可以起到监听效果但是执行的结果却大有不同.好了废话不多说,直接上代码. <div id="pageGrid ...

  6. pandas 筛选指定行或者列的数据

    pandas主要的两个数据结构是:series(相当于一行或一列数据结构和DataFrame(相当于多行多列的一个表格数据机构). 原文:https://www.cnblogs.com/gangand ...

  7. C# 关于操作datatable的列名和删除某一列的数据

    1.获取一个数据集表 DataTable dt = selectDEGS(type, words, KUser); 2.删除某一列 dt.Columns.Remove("TaskID&quo ...

  8. ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  9. View中选择的数据行中的部分数据传入到Controller中

    将View中选择的数据行中的部分数据传入到Controller中   ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NE ...

随机推荐

  1. netty4 连通步骤

    转载:http://xw-z1985.iteye.com/blog/1973205 服务端依次发生的步骤 建立服务端监听套接字ServerSocketChannel,以及对应的管道pipeline: ...

  2. LZMA demo挑选使用备忘

    一.源码下载:http://sourceforge.net/projects/sevenzip/ 二.各种EXE及其功能 代码里面有很多的dsw工程,功能不一,size不一,需要挑选合适的加入到自己的 ...

  3. 使用BTRACE定位系统中慢的问题

    在访问页面请求的时候,如果系统执行效率低,我们怎样才能定位到这些页面请求呢?   java 有一个十分有效的动态跟踪工具-btrace 网址:https://kenai.com/projects/bt ...

  4. 学习记录012-NFS

    1.Network file System 主要是通过网络让不同的主机进行通信,构建于ip协议之上的现代文件系统,用来存储共享视频,图片,文件等 2.并发大的时候会有点问题(维护不好会丢数据) 3.N ...

  5. intel vt-x处于禁用状态下如何处理

    1.首先看你的bios选项里面有没有该选项,如果没有就更新,更新之后还没有,则不支持 2.找到intel Virtualization Technology 将状态改为Enabled  同时找到int ...

  6. configure错误列表供参考

    另外附一些常见的configure错误列表供参考: configure: error: No curses/termcap library found网上有的说法是:--with-named-curs ...

  7. 重点关注之Filter的使用(性能计数和错误处理)

    Web API中的filter与MVC中的filter非常类似,最主要的不同是,MVC中的filter放在命名空间System.Web.Mvc下,而Web API中的filter则放在命名空间Syst ...

  8. java四大名著

    java编程思想effective Javajava核心技术java编程语言 外加:  深入理解java虚拟机 自己动手写java虚拟机 java并发编程的艺术 java常用算法手册 其他计算机需要看 ...

  9. MySQL为数据表的指定字段插入数据

    username not null 没有默认值/有默认值   insert不插入username字段 均不报错 2014年07月23日21:05    百科369 MySQL为数据表的指定字段插入数据 ...

  10. 完美实现自己的GetProcAddress函数(转载)

    我们知道kernel32.dll里有一个GetProcAddress函数,可以找到模块中的函数地址,函数原型是这样的: WINBASEAPI FARPROC WINAPI GetProcAddress ...