1. //思路:新建dataTable,定义需要的列, 先将数据源进行分组,第一重遍历获取所有组,第二重遍历获取某一个组的具体数据
    public void DataBind()
  2. {
  3. DateTime time;
  4. if (string.IsNullOrEmpty(txtDate.Value.Trim()) || !DateTime.TryParse(txtDate.Value.Trim() + "-01", out time))
  5. {
  6. //如果时间为空,则查询当月
  7. this.txtDate.Value = DateTime.Now.ToString("yyyy-MM");
  8. }
  9. //获取各部门对于各物流公司的费用统计
  10. DataTable AllData = CurrentBll.GetLogisticsCompanyExpensesDt(this.txtDate.Value.Trim());
  11.  
  12. var data = from item in AllData.AsEnumerable()
  13. group item by item["DeptCode"].DBValueToString();
  14. //各部门数据
  15. DataTable table = new DataTable();
  16. table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "DeptCode" });
  17. table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "shunfeng" });
  18. table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "zaiji" });
  19. table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "quanyi" });
  20. table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "cces" });
  21. table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "quanfeng" });
  22. table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "ems" });
  23. table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "shengtong" });
  24. table.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "sum" });
  25.  
  26. foreach (IGrouping<string, DataRow> group in data)
  27. {
  28. DataRow row = table.NewRow();
  29. row["DeptCode"] = group.Key;
  30. foreach (var temp in group)
  31. {
  32. string cost = temp["Cost"].DBValueToString();
  33. switch ( temp["DeliveryType"].DBValueToInt32() )
  34. {
  35. case CourierDeliveryType.SF: row["shunfeng"] = cost;
  36. break;
  37. case CourierDeliveryType.ZJS: row["zaiji"] = cost;
  38. break;
  39. case CourierDeliveryType.QY: row["quanyi"] = cost;
  40. break;
  41. case CourierDeliveryType.CCES: row["cces"] = cost;
  42. break;
  43. case CourierDeliveryType.QF: row["quanfeng"] = cost;
  44. break;
  45. case CourierDeliveryType.EMS: row["ems"] = cost;
  46. break;
  47. case CourierDeliveryType.ST: row["shengtong"] = cost;
  48. break;
  49. };
  50. }
  51. //统计该行的所有数据
  52. row["sum"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
  53. table.Rows.Add(row);
  54. }
  55.  
  56. //合计信息
  57. DataTable CountTable = table.Clone();
  58. var count = from item in AllData.AsEnumerable()
  59. group item by item["DeliveryType"].DBValueToInt32();
  60. DataRow countRow = CountTable.NewRow();
  61. //统计统计
  62. countRow["sum"] = count.Sum(p => p.Sum(l => l["Cost"].DBValueToDecimal())).ToString();
  63.  
  64. foreach (IGrouping<int, DataRow> group in count)
  65. {
  66. switch (group.Key.DBValueToInt32())
  67. {
  68. case CourierDeliveryType.SF: countRow["shunfeng"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
  69. break;
  70. case CourierDeliveryType.ZJS: countRow["zaiji"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
  71. break;
  72. case CourierDeliveryType.QY: countRow["quanyi"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
  73. break;
  74. case CourierDeliveryType.CCES: countRow["cces"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
  75. break;
  76. case CourierDeliveryType.QF: countRow["quanfeng"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
  77. break;
  78. case CourierDeliveryType.EMS: countRow["ems"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
  79. break;
  80. case CourierDeliveryType.ST: countRow["shengtong"] = group.Sum(p => p["Cost"].DBValueToDecimal()).ToString();
  81. break;
  82. };
  83. }
  84. CountTable.Rows.Add(countRow);
  85. this.rptLogisticsCompanyExpenses.DataSource = table;
  86. this.rptLogisticsCompanyExpenses.DataBind();
  87. this.rptSum.DataSource = CountTable;
  88. this.rptSum.DataBind();
  89. }

将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. ASP.NET-【Excel】-将Excel中的数据批量加载到SQLserver数据库

    用到了一个SqlBulkCopy的类 核心代码分析 代码我还没有测试过 string excelConnectionString = string.Format("Provider=Micr ...

  2. Windows XP PRO SP3 - Full ROP calc shellcode

    /*     Shellcode: Windows XP PRO SP3 - Full ROP calc shellcode     Author: b33f (http://www.fuzzysec ...

  3. POJ 1436 区间染色

    Horizontally Visible Segments Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4507   Ac ...

  4. centos下cmake安装

    步骤一.安装gcc等必备程序包(已安装则略过此步,用gcc -v检测) yum install -y gcc gcc-c++ make automake 步骤二.安装wget (已安装则略过此步) y ...

  5. addChildViewController

    http://www.cnblogs.com/zengyou/p/3386605.html //在parent view controller 中添加 child view controller Fi ...

  6. FCKEditor文件上传提示信息的汉化

    FCKEditor文件上传提示信息的汉化在FCKeditor中,虽然可以自动监测客户端语言,但是仍有小部分信息未能得到汉化.例如上传图片.Flash时,上传成功和上传失败的对话框提示信息均为英文,只要 ...

  7. 【干货来了】2014年K2房地产IT分享峰会

    2014年K2房地产IT分享峰会已圆满落幕,嘉宾们纷纷出招,分享干货,现场妙语连珠不断,高潮迭起. 主题:流程驱动的地产业务管控平台 嘉宾:王寿欣(卓越地产战略与运营管理部 副总经理) 卓越地产应用K ...

  8. web安全 -- 常见攻击方法及预防措施

    一.sql注入 sql注入,是指攻击者在猜测出服务器上要执行sql后:通过输入数据,拼接原来要执行的sql而形成新的sql:从而到达改变原来查询的意义的目的. -- 原来sql select xxx ...

  9. exit(0)与exit(1)、return区别

    exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在主函数中,则会退出函数并返回一值. 详细说: 1. return返回函数值,是关键字 ...

  10. JSON.parse()和eval()区别

    JSON.parse()只会将标准的Json字符串(key和value都由双引号引起来,最外面用单引号括住)转为JSON对象. eval()在转换字符串的时候是比较松的,即使不是标准的Json字符串也 ...