WPF如何修改现有DataGridColumn的日期显示格式
最优实现方案(XAML绑定层面修改,无需改动数据源逻辑)
这是侵入性最低、维护成本最小的方案,直接在DataGrid日期列的绑定规则上指定格式即可,完全不影响后台DataTable的数据和数据库查询逻辑:
- 如果是自动生成列的场景,需要处理
AutoGeneratingColumn事件,给日期类型的列设置绑定格式:
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { if (e.PropertyType == typeof(DateTime)) { var dataGridBoundColumn = e.Column as DataGridBoundColumn; if (dataGridBoundColumn != null) { var binding = dataGridBoundColumn.Binding as Binding; if (binding != null) { binding.StringFormat = "dd/MM/yyyy"; // 可选:如果要规避系统文化影响,可额外指定ConverterCulture binding.ConverterCulture = new System.Globalization.CultureInfo("en-GB"); } } } }
对应的XAML中给DataGrid添加事件关联:<DataGrid x:Name="yourDataGrid" AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" />
- 如果是手动定义列的场景,直接在绑定属性上加
StringFormat参数即可:
<DataGrid.Columns> <DataGridTextColumn Header="日期" Binding="{Binding 你的日期字段名, StringFormat=dd/MM/yyyy, ConverterCulture=en-GB}" /> </DataGrid.Columns>
备选方案(后台DataTable层面修改)
如果不想碰XAML逻辑,也可以在拿到Access查询结果的DataTable之后,修改日期列的格式:
// 假设dt是你从Access查询得到的DataTable对象 foreach (DataRow row in dt.Rows) { if (row["你的日期字段名"] != DBNull.Value) { row["你的日期字段名"] = Convert.ToDateTime(row["你的日期字段名"]).ToString("dd/MM/yyyy"); } }
注意这个方案会把日期字段转为字符串类型,如果后续需要对该列做排序、日期计算等操作会受影响,优先级低于XAML方案。
注意事项
- 格式字符串中月份要使用大写
M,小写m对应的是分钟,会出现格式错误 - 指定
ConverterCulture=en-GB是为了避免部分系统区域设置中把/识别为当前文化的日期分隔符,强制用斜杠展示
内容的提问来源于stack exchange,提问作者Tanish Ranjan
相关产品推荐
相关产品推荐

