C# 如何将列名存储为datatable中的第一行?
我想在C# 如何将列名存储为datatable中的第一行?,c#,C#,我想在DataTable中将列名存储为Datarow 尝试: Title| 11/09/2015 | 23/01/2015 ---- ------------- ---------------- A 1 12 B 1 13 试试这个 Title| 11/09/2015 | 23/01/2015 ---- ------------- ---------------- Title 11/09/2015
DataTable
中将列名存储为Datarow
尝试:
Title| 11/09/2015 | 23/01/2015
---- ------------- ----------------
A 1 12
B 1 13
试试这个
Title| 11/09/2015 | 23/01/2015
---- ------------- ----------------
Title 11/09/2015 23/01/2015
A 1 12
B 1 13
现在我明白了问题所在。第二列和第三列是双列。当然,您可以添加像
11/09/2015
这样的值。您想如何将其转换为双精度?您必须告诉我们如何转换它,或者使用String
作为DataColumn
-类型
一个选项是使用DateTime.ToOADate()
这是ole自动化日期:
DataRow dr = table.NewRow();
foreach (DataColumn dc in table.Columns)
{
dr[dc] = dc.ColumnName;
}
table.Rows.InsertAt(dr, 0);
这总是有效的。尝试(var i=0;i
11/09/2015
这样的值。您想如何将其转换为双精度?你必须告诉我们你想如何转换它或使用字符串作为数据列类型我也这么认为,但看看他的预期输出。我试过了,我想这会产生预期输出。谢谢你的回答。通常情况下,它应该可以工作,但在某些方面,我们在列数据类型中遇到了问题+1为正确答案。。。但是@tim用一种很好的未来主义的方式解释了这一点,这就是为什么他接受了他的答案。是的,他是一个天才,他的asnwer比我的要清楚得多。我希望它会起作用,我想念setField的属性…:)我会check@vinodh:SetField
只是另一种赋值方法。您还可以使用firstRow[i]=新值。不同之处在于SetField
还支持可为空的类型。感谢您的详细回答。。我现在可以调试了。。。最后一个问题输入字符串的格式不正确。无法存储在2015年1月2日列中。预期类型为双精度。它给出了这个错误,我可以调试。。。但是你可以很容易地找到我在这里发布的错误。@vinodh:用什么方法?因为预期类型是double,所以我认为您没有使用第三个。如何创建表和列?第二种和第三种方法
DataRow dr = table.NewRow();
foreach (DataColumn dc in table.Columns)
{
dr[dc] = dc.ColumnName;
}
table.Rows.InsertAt(dr, 0);
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);
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);