C#datatable行转列

思路:

 //step1:取出不重复的分组列以及名称列

 //step2:构建新表    1.构建新表的列   2.根据上述分组来构建新表的行 顺便往新表中添加数据

最开始的表:

C#datatable行转列_第1张图片

转换后的目标表:



具体实现代码:


        /// 
        /// 行转列
        /// 
        /// 需要进行行转列的表
        /// 需要进行行转列的字段
        /// 名称列
        /// 数据列
        /// 
        private DataTable createTable(DataTable dataTable, string groupingColumn,string nameColumn,string dataColumn)
        {
            //取出不重复的需要转换的列的数据
            DataTable distinct_GroupingColumn=dataTable.DefaultView.ToTable(true,groupingColumn);
            //取出不重复的名称列
            DataTable dictinct_NameColumn = dataTable.DefaultView.ToTable(true,nameColumn);
            //构建新表
            DataTable table = new DataTable();
            #region 构建新表的列                        
            //将名称列添加进新表
            DataColumn newColumn = new DataColumn();
            newColumn.ColumnName = nameColumn;
            //添加列   所以要.Columns
            table.Columns.Add(newColumn);
            //添加需要转换的列            
            foreach (DataRow dr in distinct_GroupingColumn.Rows)
            {
                newColumn = new DataColumn();                
                newColumn.ColumnName = dr[groupingColumn].ToString();                
                table.Columns.Add(newColumn);               
            }
            #endregion
            #region 向新表中添加数据
            DataRow newRow;
            DataRow[] dnewRow;            
            foreach (DataRow item in dictinct_NameColumn.Rows)
            {
                //添加一个新行
                newRow = table.NewRow();                 
                //为此新行添加第一个行数据
                newRow[nameColumn] = item[nameColumn].ToString();                
                //为此新行添加列数据
                foreach (DataRow r in distinct_GroupingColumn.Rows)
                {
                    dnewRow = dataTable.Select(nameColumn + " ='" + item[nameColumn].ToString() + "' and " + groupingColumn + " ='" + r[groupingColumn].ToString()+"'");
                    if (dnewRow.Length != 0)
                    {
                        //将数据与新建表进行连合
                        newRow[r[groupingColumn].ToString()] = dnewRow[0][dataColumn];
                    }
                }
                table.Rows.Add(newRow);
            }
            #endregion

            return table;
        }
        

 
  

你可能感兴趣的:(C#)