0

编辑:我试过了StringFormat,它工作正常,但DataGrid只显示那些我已经包含在<DataGrid.Columns>实际中的列VALUE并且DATE应该被格式化,其余的列应该保持不变。意味着现在我必须DataGridTextColumn为每一列手动编写?(我有 20 多个专栏,这可能是乏味的工作!)

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

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

在 VB.NET 中,这很简单:DataGridView1.Columns(6).DefaultCellStyle.Format = "N2"

我似乎无法在这里完成这项工作。请建议我将这些特定列更改为上述格式的最佳方法。(没有性能下降,看到一些涉及循环和转换器的帖子)

4

2 回答 2

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;
    }
}
于 2018-06-25T09:05:42.183 回答
1

就像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;

您可能还会发现这篇文章很有用

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

于 2018-06-24T20:37:13.397 回答