麻烦从DataTable格式化字符串

时间:2011-05-12 16:58:35

标签: c# winforms string datatable

我将一个数值保存到一个数据表单元格中(没有显式声明该单元格的数据类型),然后检索该数据并尝试将其格式化为字符串。问题是我尝试过的任何东西都不能正确格式化字符串。

  

50000 - > 50000

我试过了(其中r是循环中的行):

String.Format("{0:0,0}", r["columnName"])

r["columnName"].ToString("n0")

几个变种没有任何运气。大多数时候我只是得到没有逗号的数字。

4 个答案:

答案 0 :(得分:1)

的String.Format( “{0:0,0}”,int.Parse(R [ “COLUMNNAME”]的ToString()))

答案 1 :(得分:0)

为您尝试做的事情提供更多上下文可能会有所帮助,但这里有一个从DataTable中获取值然后根据需要对其进行格式化的示例。

DataTable dt = new DataTable();
dt.Columns.Add( "cellName", typeof( double ) );
dt.Rows.Add( 123.45 );
string val = ( (double)dt.Rows[0]["cellName"] ).ToString( "N" ); // val = "123.45"

我在调用ToString之前显式地将值转换为double。您也可以在该值上调用string.Format而不是ToString,它也可以正常工作。

编辑:如果您将值存储为字符串然后想要格式化,请使用:

string val = ( double.Parse( dt.Rows[0]["cellName"] ) ).ToString( "N" );

这确实假设该值是可解析的(即不为空)。

答案 2 :(得分:0)

可能不是最优雅的解决方案,但您可以从字符串的尾端(或从小数点)向后迭代,每三个字符添加一个逗号,直到用完为止。

答案 3 :(得分:0)

这些方法的问题在于,根据底层表的结构,该字段可能为null。如果你试图将作为对象(在DataTable中)保存的空值转换为字符串,整数,小数或者你有什么......你的应用程序会在100%的时间内爆炸。除非您的DataSet是强类型数据集,否则您始终希望执行此错误检查。事实上,编写一个小数据读取类来读取字符串,小数,日期时间,整数,等等......在与数据库有关的任何数据访问操作中都是必须的.​​...

所以这里有更多的错误验证方法,理想情况下应该包含在这里显示的辅助方法中:

public static string GetFormatedDecimalString(DataRow row, string columnName, string format)
{

    string ColumnNameStringValue = String.Empty;
    decimal ColumnNameValue = Decimal.Zero;

    if( row[columnName) == DBNull.Value )
    {
        ColumnNameValue = Decimal.Zero;
    }
    else
    {
        ColumnNameStringValue = row[columnName].ToString();

        if( ! Decimal.TryParse(ColumnNameStringValue, out ColumnNameValue )
        {
           ColumnNameValue = Decimal.Zero;
        }

        // if the if statement evaluated to false the ColumnNameValue will have the right
        // number you are looking for.
    }

    return ColumnNameValue.ToString(format);
}

传递“N”或“{0:0,0}”作为格式字符串将正常工作。