如何将列名存储为数据表中的第一行

本文关键字:一行 数据表 存储 | 更新日期: 2023-09-27 18:26:27

Title| 11/09/2015 | 23/01/2015
----  -------------  ----------------
 A        1             12  
 B        1             13

我想将列名存储为 DataTable 中的Datarow

试:

DataRow firstRow = table.NewRow();
for (var i = 0; i < table.Columns.Count; i++)
{        
     firstRow[i] = header.Rows[0][i].ToString();
}
table.Rows.InsertAt(firstRow, 0);

错误:

不正确的字符串 11/09/2015 需要双倍。

预期输出:

 Title| 11/09/2015 | 23/01/2015
----  -------------  ----------------
Title   11/09/2015   23/01/2015
 A        1             12  
 B        1             13

如何将列名存储为数据表中的第一行

现在我明白了这个问题。第二列和第三列是double列。当然,您可以添加像 11/09/2015 这样的值。您想如何将其转换为双倍?您要么必须告诉我们您要如何转换它,要么将String用作DataColumn类型。

一种选择是使用 ole 自动化日期DateTime.ToOADate()

DataRow firstRow = table.NewRow();
for (var i = 0; i < table.Columns.Count; i++)
{
    string colName = table.Columns[i].ColumnName;
    DateTime dt;
    double d;
    if(DateTime.TryParse(colName, out dt))
        firstRow.SetField(i, dt.ToOADate());
    else if(double.TryParse(colName, out d))
        firstRow.SetField(i, d);
}
table.Rows.InsertAt(firstRow, 0);

另一种方法是检查列类型:

DataRow firstRow = table.NewRow();
for (var i = 0; i < table.Columns.Count; i++)
{
    DataColumn col = table.Columns[i];
    if (col.DataType == typeof(string))
    {
        firstRow.SetField(i, col.ColumnName);
    }
    else if (col.DataType == typeof(DateTime))
    {
        DateTime dt;
        if (DateTime.TryParse(col.ColumnName, out dt))
            firstRow.SetField(i, dt);
    }
    else if (col.DataType == typeof(double))
    {
        double d;
        if (double.TryParse(col.ColumnName, out d))
            firstRow.SetField(i, d);
    }
}
table.Rows.InsertAt(firstRow, 0);

但是这种自然的方法无法解决您的问题,因为您有一个必须转换为doubleDateTime值。


第三种也是最简单的方法是使用 String 作为列类型。

DataTable table = new DataTable();
table.Columns.Add("Title");
table.Columns.Add("11/09/2015"); // string is default
table.Columns.Add("23/01/2015");
DataRow firstRow = table.NewRow();
for (var i = 0; i < table.Columns.Count; i++)
{
    string colName = table.Columns[i].ColumnName;
    firstRow.SetField(i, colName);
}
table.Rows.InsertAt(firstRow, 0);

这始终有效。

试试这个

DataRow dr = table.NewRow();
foreach (DataColumn dc in table.Columns)
 {
  dr[dc] = dc.ColumnName;
 }
table.Rows.InsertAt(dr, 0);