Ошибка форматирования строки из DataTable - PullRequest
0 голосов
/ 12 мая 2011

Я сохраняю числовое значение в ячейке с данными (тип данных для ячейки не был явно объявлен), затем получаю эти данные и пытаюсь отформатировать их в строку. Проблема в том, что ничего из того, что я пробовал, не будет правильно форматировать строку.

50000 -> 50000

Я пробовал (где r - строка в цикле):

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

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

И несколько вариантов без удачи. Большую часть времени я просто получаю номер без запятой.

Ответы [ 4 ]

1 голос
/ 12 мая 2011

String.Format ( "{0: 0,0}", int.Parse (г [ "ColumnName"] ToString ()).) * * 1 001

0 голосов
/ 12 мая 2011

Возможно, это не самое элегантное решение, но вы могли бы просто выполнить итерацию в обратном направлении от конца строки (или от десятичной точки), добавляя запятую каждые три символа, пока не закончится.

0 голосов
/ 12 мая 2011

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

0 голосов
/ 12 мая 2011

Может быть полезно иметь больше контекста для того, что вы пытаетесь сделать, но вот пример получения значения из 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"

IЯ явно приведу значение обратно к двойному перед вызовом ToString.Вы также можете вызвать string.Format для этого значения вместо ToString, и оно должно работать точно так же.

РЕДАКТИРОВАТЬ: Если вы сохраняете значение в виде строки, а затем хотите отформатировать его, используйте это:

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

Это предполагает, что значение может быть разобрано (то есть не равно нулю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...