我有一个DataTable
有几个DataRow
我想将其格式化为新的 DataTable
但当我尝试格式化某些行时发现了一个问题:
DataTable ret = functionThatGetsaDataTableUsingSQL(); //Original DataTable
DataTable dt = new DataTable(); //Final DataTable
foreach (DataRow dr in ret.Rows)
{
DataRow row = dt.Rows.Add();
for (int j = 0; j < dr.ItemArray.Length; j++)
{
if (j == 14) row[j] = dr.ItemArray[j].ToString("C2");
else row[j] = dr.ItemArray[j];
}
}
row[j] = dr.ItemArray[j].ToString("C2");
说 No overload for method 'ToString' takes 1 arguments
不起作用
我尝试尽可能地简化代码,以便只关注格式部分。
如何设置该值的格式?我知道我可以投 Convert.ToDecimal()
在使用 ToString("C2")
之前但这是唯一的方法吗?
最佳答案
ItemArray
是一个object[]
。 Object.ToString
没有参数。我想这实际上是一个货币值(value)。然后使用 DataRow.Field
扩展方法对其进行转换:
foreach (DataRow dr in ret.Rows)
{
DataRow row = dt.Rows.Add();
for (int j = 0; j < dr.ItemArray.Length; j++)
{
if (j == 14)
row[j] = dr.Field<decimal>(j).ToString("C2"); // use the correct type
else
row[j] = dr.ItemArray[j];
}
}
这是一个优化版本,ItemArray
-property由于 getter 总是创建一个新数组(如您所见 here ),因此有额外的开销:
foreach (DataRow dr in ret.Rows)
{
DataRow row = dt.Rows.Add();
foreach(DataColumn col in ret.Columns)
{
if (col.Ordinal == 14)
row.SetField(col.Ordinal, dr.Field<decimal>(col).ToString("C2")); // use the correct type
else
row.SetField(col.Ordinal, dr[col]);
}
}
关于c# - ItemArray 到字符串格式无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35648950/