C# 转置数据表
我有下面的数据表。我想更改数据表,将数据表转换为它旁边的数据表。我该怎么做 我之所以要这样做,是因为excel文件会像图中所示那样引入数据,然后我想在第1行对这些数据进行排序 当前表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 ||
|| 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;
}