• C#行转列


            /// <summary>
            /// 行转列
            /// </summary>
            /// <param name="_outDataSource">数据源</param>
            /// <param name="categoryname">列名:行业</param>
            /// <param name="date">列名:日期(该列为:行转列)</param>
            /// <param name="zongshu">列名:条数</param>
            /// <returns></returns>
            private DataTable RCC(DataTable _outDataSource, string categoryname, string date, string zongshu)
            {
                //从DataTable中读取不重复的日期行,用来构造新DataTable的列
                DataTable distinct_date = _outDataSource.DefaultView.ToTable(true, date);
    
                DataTable new_DataTable = new DataTable();
    
                //将行业列添加到新表中
                DataColumn new_d_col = new DataColumn();
                new_d_col.ColumnName = categoryname;
                new_d_col.Caption = "";
                new_DataTable.Columns.Add(new_d_col);
    
                StringBuilder str_sum = new StringBuilder();
    
                //开始在新表中构造日期列
                foreach (DataRow dr in distinct_date.Rows)
                {
                    new_d_col = new DataColumn();
                    new_d_col.DataType = typeof(decimal);
                    new_d_col.ColumnName = dr[date].ToString();
                    new_d_col.Caption = dr[date].ToString();
                    new_d_col.DefaultValue = 0;
                    new_DataTable.Columns.Add(new_d_col);
    
                    //这个的目的是为合计列构造expression   注释 为 可算合计
                    // str_sum.Append("+[").Append(dr[date].ToString()).Append("]");
    
                }
    
                ////将合计列添加到新表中   注释 为 可算合计
                //new_d_col = new DataColumn();
                //new_d_col.DataType = typeof(decimal);
                //new_d_col.ColumnName = "Sum";
                //new_d_col.Caption = "合计";
                //new_d_col.DefaultValue = 0;
                //new_d_col.Expression = str_sum.ToString().Substring(1);
                //new_DataTable.Columns.Add(new_d_col);
    
                /*到此新表已经构建完毕,下面开始为新表添加数据*/
    
                //从原DataTable中读出不重复的行业,以行业为关键字来构造新表的行
                DataTable distinct_object = _outDataSource.DefaultView.ToTable(true, categoryname);
                DataRow[] drs;
                DataRow new_dr;
                foreach (DataRow dr in distinct_object.Rows)
                {
                    new_dr = new_DataTable.NewRow();
                    new_dr[categoryname] = dr[categoryname].ToString();
    
                    foreach (DataRow _dr in distinct_date.Rows)
                    {
                        drs = _outDataSource.Select(categoryname + "='" + dr[categoryname].ToString() + "' and " + date + "='" + _dr[date].ToString() + "'");
                        if (drs.Length != 0)
                        {
                            new_dr[_dr[date].ToString()] = Math.Round(Convert.ToDecimal(drs[0][zongshu]), 2);
                        }
                    }
                    new_DataTable.Rows.Add(new_dr);
                }
    
                return new_DataTable;
            }
    

    调用方法:

      DataTable newTable = new DataTable();
                newTable.Columns.Add("行业", typeof(string));     //行业名称
                newTable.Columns.Add("年份", typeof(string));             //年份
                newTable.Columns.Add("条数", typeof(string));    //条数
    
    
                int years = Convert.ToInt32(DateTime.Now.ToString("yyyy"));
    
                if (!string.IsNullOrEmpty(currentyear))
                {
                    years = Convert.ToInt32(currentyear);
                }
                for (var i = years; i >= years - 9; i--)
                {
                    DataTable dt = GetGroupIndustryByYear(i.ToString());
    
                    if (dt != null && dt.Rows.Count > 0)
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            DataRow n_dr = newTable.NewRow();
                            n_dr["行业"] = Convert.ToString(dr["INDUSTRYCATEGORYNAME"]);
                            n_dr["年份"] = Convert.ToString(i);
                            n_dr["条数"] = Convert.ToString(dr["count"]);
    
                            newTable.Rows.Add(n_dr);
                        }
                    }
    
                }
    
    
                DataTable newDT = RCC(newTable);
    
  • 相关阅读:
    我们总在避免认知失调(转)
    我们搞开发的为什么会感觉到累(转)
    循环-11. 水仙花数(20)
    谷歌技术&quot;三宝&quot;之MapReduce
    oracle存储过程实例
    网络编程学习小结
    关于window.history.back()后退问题
    区间Dp 暴力枚举+动态规划 Hdu1081
    MongoDB入门简单介绍
    Windows8和MacOS10.9双系统安装及Mac经常使用软件安装--联想E49A
  • 原文地址:https://www.cnblogs.com/zhongsq/p/4952147.html
Copyright © 2020-2023  润新知