c# DataTable行转列

/// <summary>
        /// datatable行转列
        /// </summary>
        /// <param name="dtSrc">来源datatable</param>
        /// <returns>行转列结束的datatable</returns>
        private System.Data.DataTable ConvertDataTable(System.Data.DataTable dt)
        {
            var date = this.dtpStartDay.Text + "到" + this.dtpEndDay.Text;
            var list = from c in dt.AsEnumerable()
                       select new {
                           日期 = c.Field<string>("日期"),
                           财务编号 = c.Field<string>("财务编号"),
                           财务名称 = c.Field<string>("财务名称"),
                           平台名称 = c.Field<string>("平台名称"),
                           面值 = Convert.ToDecimal(c.Field<string>("面值"))
                       };          

            var tmplist = (from item in list
                           group item by item.财务编号 into g
                           select new
                           {
                               code = g.Key,
                               vallist = from val in g
                                         group val by val.平台名称 into gs
                                         select new
                                         {
                                             pltname = gs.Key,
                                             pltvalue = gs.Sum(t => t.面值)
                                         }
                           }).ToList();

            dt = new System.Data.DataTable();
            dt.Columns.Add("日期");
            dt.Columns.Add("财务编号");
            dt.Columns.Add("财务名称");
            var colNames = list.Select(t => t.平台名称).Distinct();
            foreach (var col in colNames)
            {
                dt.Columns.Add(col);
            }
            dt.Columns.Add("平台合计");

            foreach (var item in tmplist)
            {
                var dr = dt.NewRow();

                dr.BeginEdit();
                dr["日期"] = date;
                dr["财务编号"] = item.code;
                dr["财务名称"] = list.FirstOrDefault(t => t.财务编号 == item.code).财务名称;
                dr["平台合计"] = item.vallist.Sum(t => t.pltvalue);

                foreach (var col in colNames)
                {
                    if (item.vallist.Any(t => t.pltname == col))
                    {
                        dr[col] = item.vallist.Single(t => t.pltname == col).pltvalue;
                    }
                    else
                    {
                        dr[col] = 0;
                    }
                }

                dr.EndEdit();
                dt.Rows.Add(dr);
            }
            return dt;
        }

  

时间: 2024-10-10 11:16:16

c# DataTable行转列的相关文章

C#中DataTable行转列示例

将下面表(1)格式的数据转换为表(2)格式的数据.很明显,这是一个行转列的要求,本想在数据库中行转列,因为在数据库中行转列是比较简单的,方法可以参考本站SQLServer中(行列转换)行转列及列转行且加平均值及汇总值,但因其它需求,最终需将该转化搬到C#中进行了. (表1) 表(2) 不多说了,下面开始在DataTable行转列示例: //DataTable行转列 private DataTable RCC(DataTable _outDataSource) { //从DataTable中读取不

C# DataTable 行转列

1 #region 根据datatable获得列名 2 /// <summary> 3 /// 根据datatable获得列名 4 /// </summary> 5 /// <param name="dt">表对象</param> 6 /// <returns>返回结果的数据列数组</returns> 7 public static string[] GetColumnsByDataTable(DataTable

C#动态操作DataTable(新增行、列、查询行、列等)

方法一:动态创建一个DataTable ,并为其添加数据 public void CreateTable()        {            //创建表            DataTable dt = new DataTable();                        //1.添加列            dt.Columns.Add("Name", typeof(string)); //数据类型为 文本 //2.通过列架构添加列            Data

DataTable得到某行某列的值

DataTable dt=this.GetRepeatTableData("repeating1"); int count=dt.Rows.Count;for(int x=0;x<count;x++){string Personnes=dt.Rows[x][0].ToString();//第一行第一列 string Passport_No=dt.Rows[x][1].ToString();//第一行第二列 if (Personnes != "") { if (

C#行转列

/// <summary> /// 年份 行转列 /// </summary> /// <param name="_outDataSource"></param> /// <returns></returns> private DataTable RCC(DataTable _outDataSource) { //从DataTable中读取不重复的日期行,用来构造新DataTable的列 DataTable dis

[WinForm] DataGridView绑定DataTable,ComboBox列绑定Dictionary

一  需求介绍 一般像枚举类型的数据,我们在数据库里存储着诸如(1.2.3.4-)或者("001"."002"."003"-)此类,但是界面上我们想要显示的是具体的文本内容,以便用户理解使用.所以在从数据库中加载出来的数据DataTable绑定到DataGridView上时,就需要其中一些枚举列采用下拉框,并绑定对应的枚举数据源. 二  具体实现 首先,如果 DataGridView 的 AutoGenerateColumns 为 true 时,

C#行转列&amp;绑定DGV

c#行转列 今天工作中,恰好写到此处,想起之前第一次行转列的时候,卡壳了好久,今天正好碰上,故而花费几分钟,整理成案例,分享到博客上. 这是个很简单的功能,第一次可以使用案例,后面最好能达到信手拈来的地步. 开发要素第一步: 各种控件的命名要改:这个跟技术能力无关,工作再赶再忙,这个也必须要改,因为改这个会为后面开发省去很多时间.不要觉得改这个是在浪费时间,开发的人员都懂,就不多说了. demo功能简单介绍:>初始化加载的时候,加载DGVtable,  如何点击行转列按钮,将DGVtable里面

DataTable添加行和列

DataTable dt = dal.GetDtatableadd(name, note); //// //添加新行////// DataRow drr = dt.NewRow();//新增一行 // 添加数据: //dr["ADD"] = "122313";//第一种直接将名称全部写出来添加 //第二种加结果和列名取出来添加 object[] objs = { "1", "测试", "测试公司", &qu

linq行转列

using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Text; namespace ConvertToTable{ class Program { static void Main(string[] args) { #region 添加一个表 DataTable _dt = new DataTable(); _dt.Columns.Add(new DataCo