将 DataTable 的第一行作为列名

9
我正在尝试将DataTable的第一行设置为列名。我正在使用Code Project的GenericParsing库。问题在于解析器为列设置了默认名称。
谢谢。

你能提供一下解析库的链接吗? - Jason Down
为什么你想将第一行设置为列名?在那个库的类中肯定有一些属性可以让你指定自己的列名并覆盖默认的列名。 - Azhar Khorasany
@Jason Down:我在这里找到了http://www.codeproject.com/KB/database/GenericParser.aspx,实际上是一个不错的项目 :) - cyberbrain
3个回答

18
我认为你需要以下内容:
foreach (DataColumn column in table.Columns)
{
    string cName = table.Rows[0][column.ColumnName].ToString();
    if (!table.Columns.Contains(cName) && cName != "")
    {
         column.ColumnName = cName;
    }

}

table.Rows[0].Delete(); //If you don't need that row any more

当然,如果你不再需要该行数据,可以添加data.Rows[0].Delete()。 :) - Alex Dn
你已经检查了 cName != "" 一次,第二次是多余的,你可以安全地将其改为 column.ColumnName = cName; - Shadow The Spring Wizard
除非你想在迭代行时出现错误,否则应该在 table.Rows[0].Delete(); 后跟上 table.Rows.RemoveAt(0); 以从集合中删除已删除的行。 - pointerless

9
这应该可以满足你的需求:
DataRow firstRow = table.NewRow();
List<string> names = new List<string>();
foreach (DataColumn column in table.Columns)
{
    names.Add(column.ColumnName);
}
firstRow.ItemArray = names.ToArray();
table.Rows.InsertAt(firstRow, 0);

如果第一行已经存在并且想要“覆盖”它,请将第一行改为:
DataRow firstRow = table.Rows[0];

并删除最后一行。


1
这些代码创建了一个新的行,并填充了列名...但是我想要的实际上是相反的...通过导入第一行的值来更改实际列的名称...我可以使用一个虚拟循环,但我希望您能为我提供更优雅的解决方案:)...谢谢。 - cyberbrain

0

嗨,希望这可以帮到你,这将使所有行作为列标题。

foreach (DataRow inRow in inputTable.Rows)
     {
         string newColName = inRow[0].ToString();
         outputTable.Columns.Add(newColName);
     }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接