Вопрос:
У меня есть считыватель данных для чтения данных из базы данных.
Я читаю TotalPrice из таблицы продаж.
Я хотел бы показать общую цену как 2 десятичных разряда.
В коде есть ссылка:
TotalPrice.Text = myReader[«TotalPrice»].ToString(«N2»);
Однако я обнаружил эту ошибку: никакой перегрузки для метода “ToString” не принимает 1 аргумент
Что не так с кодом?
Лучший ответ:
Предполагая, что TotalPrice является столбцом Decimal, а myReader – DataReader:
TotalPrice.Text = myReader.GetDecimal(myReader.GetOrdinal(«TotalPrice»)).ToString(«N2»);
Идея здесь в том, что myReader indexer (то, что вы используете, когда вы вызываете myReader[«TotalPrice»]) возвращает объект. Это необходимо, поскольку во время компиляции не известно, какой тип столбца. Используя .GetDecimal(), вы подтверждаете, что возвращаете значение Decimal или ошибку.
Перегрузка .ToString, которая принимает строку формата, объявляется в Decimal, а не в Object. Объект. ToString не принимает аргументов.
Внутренний вызов GetOrdinal возвращает индекс поля с именем name – если вы делаете это в цикле для нескольких строк данных, вы, вероятно, захотите кэшировать это в переменной.
Ответ №1
String.Format() выполнит трюк. F2 – обозначение с фиксированной точкой с 2 знаками после запятой.
TotalPrice.Text = string.Format(«{0:F2}», (double)myReader[«TotalPrice»]);