进入DataGrid
,我有2列:
public string DayName {get; set;}
public DateTime DateTimeColumn {get; set;}
我要显示以下数据:
DayName | DateTimeColumn
Monday | 2018-09-03
Tuesday | 2018-09-04
Wednesday | 2019-09-05
....
为此,我有方法:
public static ObservableCollection<MyDataConcept> BuildDataConceptList(int year, int month)
{
ObservableCollection<MyDataConcept> resultList =
new ObservableCollection<MyDataConcept>();
foreach (var data in GetDates(year, month))
{
if (data.DayOfWeek.ToString() != "Saturday" && data.DayOfWeek.ToString() != "Sunday")
{
MyDataConcept kdc = new MyDataConcept(data.DayOfWeek.ToString(), data.Date);
resultList.Add(kdc);
}
}
}
我没有显示DayName = data.DayOfWeek.ToString()
的问题,只需显示正确的DateTimeColumn = data.Date ,因为它现在显示为:09/03/2018 12:00:00 AM
。
我试图进行如下转换:
DateTime time = DateTime.Parse(data.ToShortDateString());
或
var date = System.DateTime.ParseExact(data.ToShortDateString(), "yyyy-MM-dd",
CultureInfo.InvariantCulture,DateTimeStyles.None);
但是它不起作用。
更新: 这是我的XAML:
<DataGrid ItemsSource="{Binding Path=MyConceptItems}"
IsSynchronizedWithCurrentItem="True" />
答案 0 :(得分:1)
问题是您将DateTime转换为DateTime。然后,格式化消失了。尝试使用字符串:
var date = data.ToShortDateString();
如果您真的想在DataGrid中使用DateTime,则只需对列进行XAML定义:
<DataGridTextColumn Binding="{Binding DateTimeColumn, StringFormat=\{0:yyyy-MM-dd\}}" />
如果列是自动生成的,即XAML中没有列定义,则可以处理数据网格的事件AutoGeneratingColumn:
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyType == typeof(DateTime))
{
e.Column = new DataGridTextColumn()
{
Binding = new Binding(e.PropertyName) { StringFormat = "yyyy-MM-dd" }
};
}
}
在XAML中:
<DataGrid ItemsSource="{Binding Path=MyConceptItems}" AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" IsSynchronizedWithCurrentItem="True" />