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
答案 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);
总是有效。