一个DataTable的行列转换代码

来源:互联网 发布:知乎专栏打不开 编辑:程序博客网 时间:2024/05/12 15:45

public static void Main()
        {
            DataTable dt
= new DataTable();
            dt.Columns.Add(
"name");
            dt.Columns.Add(
"type");
            dt.Columns.Add(
"relt");

           
for (int i = 0; i < 4; i++)
            {
                DataRow dr
= dt.NewRow();
                dr[
"name"] = "name" + i;
                dr[
"type"] = "type" + i;
                dr[
"relt"] = "relt" + i;

                dt.Rows.Add(dr);
            }

            DisplayTable(dt);

            Console.WriteLine(
"/r/n =====> 进行行列转换 /r/n");

            DisplayTable(ColumnToRow(dt,
0));

            Console.ReadLine();
        }

       
public static DataTable ColumnToRow(DataTable src_dt, int columnIndex) //columnIndex 用来当作新列名的列
        {
            DataTable dt
= new DataTable();
            dt.Columns.Add(src_dt.Columns[columnIndex].ColumnName);

           
foreach (DataRow dr in src_dt.Rows)
                dt.Columns.Add(dr[columnIndex].ToString());

           
int n = src_dt.Columns.Count;
           
for (int i = 0; i < n; i++)
            {
               
if (i == columnIndex) continue; //如果是被当作列名的列,则跳过

                DataRow new_dr
= dt.NewRow();
               
string columnName = src_dt.Columns[i].ColumnName;
                new_dr[
0] = columnName;

               
foreach (DataRow dr in src_dt.Rows)
                {
                   
string newColumnName = dr[columnIndex].ToString();
                    new_dr[newColumnName]
= dr[columnName];
                }

                dt.Rows.Add(new_dr);
            }

           
return dt;
        }

 

name    type    relt
name0  type0  relt0
name1  type1  relt1
name2  type2  relt2
name3  type3  relt3

=====> 进行行列转换

name    name0  name1  name2  name3
type    type0  type1  type2  type3
relt    relt0  relt1  relt2  relt3

原创粉丝点击