编辑:我尝试了StringFormat
,它工作正常,但是DataGrid
仅显示了我已包含在<DataGrid.Columns>
中的那些列,实际上仅显示了{{ 1}}和VALUE
的格式,其余列应保持不变。就是说现在我必须为每一列手动编写DATE
吗? (我有20多个专栏,这可能是乏味的工作!)
这里是C#的新手。我有一个DataGrid,它从DataTable获取它的值。我使用ExcelDataReader从Excel导入到DataSet,并最终将其转换为DataTable。
•如何将列DataGridTextColumn
的格式更改为系统的默认格式? (不同的系统中会有不同的日期格式)
•如何将列DATE
的格式更改为精确到小数点后两位?
在VB.NET中,这很简单:VALUE
我似乎无法在这里得到这份工作。请建议我将这些特定列更改为所提及格式的最佳方法。 (在不降低性能的情况下,看到一些涉及循环和转换器的帖子)
答案 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" />
当前的文化
CultureInfo.DefaultThreadCurrentCulture = newCulture;
CultureInfo.DefaultThreadCurrentUICulture = newCulture;
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture;
您可能还会发现this post有用
您还可以使用转换器进行更高级的修改。