Проблема этих методов заключается в том, что в зависимости от структуры базовой таблицы это поле может быть нулевым. Если вы попытаетесь преобразовать нулевое значение, хранящееся в качестве объекта (в 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}" в качестве строки формата будет работать очень хорошо.