Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转置数据表_C#_Datatable_Transpose - Fatal编程技术网

C# 转置数据表

C# 转置数据表,c#,datatable,transpose,C#,Datatable,Transpose,我有下面的数据表。我想更改数据表,将数据表转换为它旁边的数据表。我该怎么做 我之所以要这样做,是因为excel文件会像图中所示那样引入数据,然后我想在第1行对这些数据进行排序 当前表 || Col 1 || Col 2 || Col 3 ____________________________________ Row 1 || 10 || 20 || 30 Row 2 || 1 || 2 || 3 新数据表 || Row 1 ||

我有下面的数据表。我想更改数据表,将数据表转换为它旁边的数据表。我该怎么做

我之所以要这样做,是因为excel文件会像图中所示那样引入数据,然后我想在第1行对这些数据进行排序

当前表

      || Col 1 || Col 2 || Col 3
____________________________________    
Row 1 || 10    ||  20   || 30
Row 2 || 1     ||  2    || 3 
新数据表

      || Row 1 || Row 2 
Col 1 ||  10   ||   1
Col 2 ||  20   ||   2
Col 3 ||  30   ||   3

创建一个新表,使用与以前相反的维度,并将以前的列指定给新行,将旧行指定给新列

例如:

这个列表还在继续,假设你是从

col1 || col2 || col3 || col4
row1 ||[a][b]||[c][d]||[e][f]
row2 ||[g][h]||[i][j]||[k][l]


创建一个新表,使用与以前相反的维度,并将以前的列指定给新行,将旧行指定给新列

例如:

这个列表还在继续,假设你是从

col1 || col2 || col3 || col4
row1 ||[a][b]||[c][d]||[e][f]
row2 ||[g][h]||[i][j]||[k][l]

DataTable newDt=newdatatable();
//选择索引
var index=dt.Rows.Cast().Select(row=>dt.Rows.IndexOf(row));
//选择列
var newCols=索引。选择(i=>“行”+i);
//添加列
foreach(在newCols中的var newCol)
{
newDt.Add(newCol);
}
//选择行
var newRows=dt.Rows.Cast().Select(col=>
{
行=newDt.NewRow();
foreach(索引中的int i)
{
行[i]=dt.Rows[i][col.Name];
}
返回行;
});
//将行添加到新数据表
foreach(新行中的var行)
{
新增(行);
}
DataTable newDt=newdatatable();
//选择索引
var index=dt.Rows.Cast().Select(row=>dt.Rows.IndexOf(row));
//选择列
var newCols=索引。选择(i=>“行”+i);
//添加列
foreach(在newCols中的var newCol)
{
newDt.Add(newCol);
}
//选择行
var newRows=dt.Rows.Cast().Select(col=>
{
行=newDt.NewRow();
foreach(索引中的int i)
{
行[i]=dt.Rows[i][col.Name];
}
返回行;
});
//将行添加到新数据表
foreach(新行中的var行)
{
新增(行);
}

.NET不包括转置数据表的方法。你必须自己做。网站上有一个关于转置方法示例的教程。我将复制并粘贴下面的代码段:

private DataTable Transpose(DataTable dt)
{
    DataTable dtNew = new DataTable();

    //adding columns    
    for(int i=0; i<=dt.Rows.Count; i++)
    {
       dtNew.Columns.Add(i.ToString());
    }



    //Changing Column Captions: 
    dtNew.Columns[0].ColumnName = " ";

     for(int i=0; i<dt.Rows.Count; i++) 
     {
      //For dateTime columns use like below
       dtNew.Columns[i+1].ColumnName = Convert.ToDateTime(dt.Rows[i].ItemArray[0].ToString()).ToString("MM/dd/yyyy");
      //Else just assign the ItermArry[0] to the columnName prooperty
     }

    //Adding Row Data
    for(int k=1; k<dt.Columns.Count; k++)
    {
        DataRow r = dtNew.NewRow();
        r[0] = dt.Columns[k].ToString(); 
        for(int j=1; j<=dt.Rows.Count; j++)
        r[j] = dt.Rows[j-1][k];  
        dtNew.Rows.Add(r);
    }

 return dtNew;
}
专用数据表转置(数据表dt)
{
DataTable dtNew=新DataTable();
//添加列

for(int i=0;i.NET不包括转置数据表的方法。您必须自己制作。网站上有一个转置方法示例教程。我将复制并粘贴下面的代码片段:

private DataTable Transpose(DataTable dt)
{
    DataTable dtNew = new DataTable();

    //adding columns    
    for(int i=0; i<=dt.Rows.Count; i++)
    {
       dtNew.Columns.Add(i.ToString());
    }



    //Changing Column Captions: 
    dtNew.Columns[0].ColumnName = " ";

     for(int i=0; i<dt.Rows.Count; i++) 
     {
      //For dateTime columns use like below
       dtNew.Columns[i+1].ColumnName = Convert.ToDateTime(dt.Rows[i].ItemArray[0].ToString()).ToString("MM/dd/yyyy");
      //Else just assign the ItermArry[0] to the columnName prooperty
     }

    //Adding Row Data
    for(int k=1; k<dt.Columns.Count; k++)
    {
        DataRow r = dtNew.NewRow();
        r[0] = dt.Columns[k].ToString(); 
        for(int j=1; j<=dt.Rows.Count; j++)
        r[j] = dt.Rows[j-1][k];  
        dtNew.Rows.Add(r);
    }

 return dtNew;
}
专用数据表转置(数据表dt)
{
DataTable dtNew=新DataTable();
//添加列

对于(int i=0;我来看看堆栈溢出!请告诉我们您尝试了什么。我真的找不到任何允许我做的事情this@user2061088因为你不应该这样做,他们希望我按第1行从高到低对列进行排序,但找不到这样做的方法this@user2061088仅用于打印目的?欢迎使用Stack Overflow!Pl让我们看看你都做了些什么。我真的找不到什么能让我做的this@user2061088因为你不应该这样做,他们希望我按第1行从高到低对列进行排序,但找不到这样做的方法this@user2061088仅用于打印目的?如果您可以设置一个表,您可以分配enw和旧变量。只需在创建表时使用新位置中的旧变量。我不知道C#,但我在
BASIC
java
C
的修改版本中做过这件事。如果可以设置表,可以分配enw和旧变量。创建表时只需在新位置使用旧变量。我不知道C#,但我做过这件事在
BASIC
java
c
的修改版本中,没有日期-时间列所有都是字符串没有日期-时间列所有都是字符串您是否测试了上述代码?DataTable在基本对象上没有Add方法,就像在foreach循环中尝试的那样。您测试了上述代码吗?DataTable在基本对象上没有Add方法基本对象,如在foreach循环中尝试的。
private DataTable Transpose(DataTable dt)
{
    DataTable dtNew = new DataTable();

    //adding columns    
    for(int i=0; i<=dt.Rows.Count; i++)
    {
       dtNew.Columns.Add(i.ToString());
    }



    //Changing Column Captions: 
    dtNew.Columns[0].ColumnName = " ";

     for(int i=0; i<dt.Rows.Count; i++) 
     {
      //For dateTime columns use like below
       dtNew.Columns[i+1].ColumnName = Convert.ToDateTime(dt.Rows[i].ItemArray[0].ToString()).ToString("MM/dd/yyyy");
      //Else just assign the ItermArry[0] to the columnName prooperty
     }

    //Adding Row Data
    for(int k=1; k<dt.Columns.Count; k++)
    {
        DataRow r = dtNew.NewRow();
        r[0] = dt.Columns[k].ToString(); 
        for(int j=1; j<=dt.Rows.Count; j++)
        r[j] = dt.Rows[j-1][k];  
        dtNew.Rows.Add(r);
    }

 return dtNew;
}