如何将列名存储为数据表中的第一行
本文关键字:一行 数据表 存储 | 更新日期: 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);
但是这种自然的方法无法解决您的问题,因为您有一个必须转换为double
的DateTime
值。
第三种也是最简单的方法是使用 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);