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

时间:2015-12-11 08:55:05

标签: c#

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

我想将列名称Datarow存储在DataTable中。

试过:

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

2 个答案:

答案 0 :(得分:1)

试试这个

DataRow dr = table.NewRow();
foreach (DataColumn dc in table.Columns)
 {

  dr[dc] = dc.ColumnName;

 }
table.Rows.InsertAt(dr, 0);

答案 1 :(得分:1)

现在我明白了这个问题。第二列和第三列是double - 列。当然,您可以添加11/09/2015之类的值。你想怎么把它转换成双倍?您要么告诉我们您希望如何转换它,要么使用String作为DataColumn - 类型。

一种选择是使用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);

但是这种自然的方法无法解决您的问题,因为您的DateTime值必须转换为double

第三种也是最简单的方法是使用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);

总是有效。