Изменить только выбранные столбцы на пользовательский формат, оставив все столбцы без изменений в WPF DataGrid? - PullRequest
0 голосов
/ 24 июня 2018

Редактировать: Я попробовал StringFormat, он работает нормально, но DataGrid показывает только те столбцы, которые я включил в <DataGrid.Columns> На самом деле только VALUE и DATE должны быть оставшиеся столбцы должны оставаться неизменными . Значит, теперь я должен вручную написать DataGridTextColumn для каждого столбца? (У меня есть более 20 столбцов, что может быть утомительной работой!)

Новичок в C # здесь. У меня есть DataGrid, который получает значения из DataTable. Я использую ExcelDataReader для импорта из Excel в DataSet и в конечном итоге преобразовываю его в DataTable.

• Как изменить формат столбца DATE на системный формат по умолчанию? (В разных системах будет разный формат даты)
• Как я могу изменить формат столбца VALUE точно на 2 десятичных знака?

В VB.NET все было просто: DataGridView1.Columns(6).DefaultCellStyle.Format = "N2"

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

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы можете обработать событие AutoGeneratingColumn:

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    switch (e.PropertyName)
    {
        case "VALUE":
            e.Column = new DataGridTextColumn
            {
                Header = e.PropertyName,
                Binding = new Binding(e.PropertyName)
                {
                    StringFormat = "N2"
                }
            };
            break;
        case "DATE":
            e.Column = new DataGridTextColumn
            {
                Header = e.PropertyName,
                Binding = new Binding(e.PropertyName)
                {
                    StringFormat = Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern
                }
            };
            break;
    }
}
0 голосов
/ 24 июня 2018

Так же, как VB. Вы можете найти все форматы числовых строк здесь (MSDN)

<DataGridTextColumn Binding="{Binding Path=VALUE, StringFormat=N2}" Header="Value" />

Текущая культура может быть установлена ​​, как описано здесь

CultureInfo.DefaultThreadCurrentCulture = newCulture;
CultureInfo.DefaultThreadCurrentUICulture = newCulture;
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture;

Вы также можете найти этот пост полезным

Вы также можете использовать конвертеры для более сложных модификаций.

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