BEBE2011 Ответов: 2

Отображение неправильного символа валюты в ячейке столбца


Привет ,
Попытка добавить символ доллара США $ в ячейку столбца, но она возвращает символ евро ?
ФОН:
Программа im building - это конвертер валют, в котором пользователь вводит сумму в numericUpdown и combobox со всеми мировыми валютами. Затем введенная сумма умножается на значение в ячейках столбца. Затем новое значение отображается в этих ячейках с правильным символом.

Примечание: я могу добавить $ делающий это;
node.Cells[2].Value = "$ " + numVal * usa;

Но я хотел бы использовать CultureInfo

Что я уже пробовал:

if (toolStripComboBox1.SelectedIndex >= 0)
{
   foreach (TreeGridNode node in myTGV.Rows)
    {
        
                       
        if (node.Cells[2].Value != null)
        {
            myTGV.Columns["Cost"].DefaultCellStyle.Format = String.Format("C", System.Globalization.CultureInfo.CreateSpecificCulture("en-US"));
            //string value = node.ToString();
            //node.Cells[2].InheritedStyle.Format = "#,###.##";

            int numVal = Convert.ToInt32(node.Cells[2].Value);

            float usa = (float)numCurrency.Value;
            //string value = numVal * usa;
            node.Cells[2].Value = numVal * usa;
        
        }



    }
                
}

Richard Deeming

Каково полное имя типа TreeGridNode класс?

Вы устанавливаете DefaultCellStyle.Format свойство литеральной строки "C". Этот String.Format вызов ничего не делает, так как у вас нет никаких заполнителей формата внутри строки.

Вам нужно найти способ указать узлу, элементу управления, форме или всему приложению использовать определенную культуру для форматирования значений.

BEBE2011

Решение 2 устранило эту ошибку.

2 Ответов

Рейтинг:
2

Sergey Alexandrovich Kryukov

В дополнение к использованию культуры непосредственно для форматирования, вы можете назначить культуру всему потоку. Пожалуйста, смотрите:
Нить.Свойство CurrentCulture (System.Нарезание резьбы),
Нить.Свойство Currentuiculture (Системы.Нарезание резьбы).

Вы не объяснили проблему с вашим образцом кода, но я вижу одну несколько несвязанную проблему: вы создаете экземпляр System.Globalization.CultureInfo снова и снова, в вашей петле. Почему? Вы должны создать этот объект один раз и повторно использовать его.

—СА


Richard Deeming

Хуже того-сотворенное CultureInfo даже не требуется, как первый аргумент, чтобы String.Format не содержит никаких заполнителей для форматирования.

Вся линия может быть заменена на:
myTGV.Columns["Cost"].DefaultCellStyle.Format = "C";

Sergey Alexandrovich Kryukov

Соглашаться. Спасибо.
—СА

Рейтинг:
15

Maciej Los

Чтобы иметь возможность правильно установить DataGridViewCell формат, вы должны установить 2 свойства:
1) DataGridViewCellStyle.Format = "C";
2) DataGridViewCellStyle.FormatProvider = IFormatProvider; //default is CurrentUICulture

Для получения более подробной информации, пожалуйста, смотрите:
Как отформатировать данные в элементе управления Windows Forms DataGridView[^]
DataGridViewCellStyle.Свойство FormatProvider (System.Окна.Формы)[^]


BEBE2011

Привет, спасибо за ответ, можете ли вы дать мне пример того, как использовать его с помощью моего кода?

Maciej Los

Я уже это сделал ;)