将仅选择的列更改为自定义格式,而其余所有列在WPF DataGrid中保持不变?

时间:2018-06-24 15:25:07

标签: c# wpf wpfdatagrid exceldatareader

编辑:我尝试了StringFormat,它工作正常,但是DataGrid仅显示了我已包含在<DataGrid.Columns>中的那些列,实际上仅显示了{{ 1}}和VALUE的格式,其余列应保持不变。就是说现在我必须为每一列手动编写DATE吗? (我有20多个专栏,这可能是乏味的工作!)

这里是C#的新手。我有一个DataGrid,它从DataTable获取它的值。我使用ExcelDataReader从Excel导入到DataSet,并最终将其转换为DataTable。

•如何将列DataGridTextColumn的格式更改为系统的默认格式? (不同的系统中会有不同的日期格式)
•如何将列DATE的格式更改为精确到小数点后两位?

在VB.NET中,这很简单:VALUE

我似乎无法在这里得到这份工作。请建议我将这些特定列更改为所提及格式的最佳方法。 (在不降低性能的情况下,看到一些涉及循环和转换器的帖子)

2 个答案:

答案 0 :(得分:2)

您可以处理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;
    }
}

答案 1 :(得分:1)

就像VB。您可以找到all numeric string formats here (MSDN)

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

可以设置as described here

当前的文化
CultureInfo.DefaultThreadCurrentCulture = newCulture;
CultureInfo.DefaultThreadCurrentUICulture = newCulture;
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture;

您可能还会发现this post有用

您还可以使用转换器进行更高级的修改。