c# - ItemArray 到字符串格式无效

标签 c# asp.net string-formatting datarow

我有一个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/

相关文章:

c# - 处理可能没有任何订阅者的事件

C# Entity Framework 内存使用率高,内存泄漏?

Linux 中的 ASP.NET!

asp.net - Repeater 中的项目在回发(回调)期间丢失

Python:将文本格式化为特定列

regex - 用粗体 'xxx' 替换 [b]xxx[/b]

java - 如何将 Map 转换为 String?

c# - 从多个列表或数组中搜索/过滤(可能数十亿)项目组合的最佳方式

c# - 使用值更新特定的 sql 记录

asp.net - 如何找出哪个页面是默认页面?