【问题标题】:Display formatted DateTime inside ObservableCollection在 ObservableCollection 中显示格式化的 DateTime
【发布时间】:2019-02-11 09:04:36
【问题描述】:

进入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" />

【问题讨论】:

    标签: c# date datetime parsing time


    【解决方案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" />
    

    【讨论】:

    • 但我需要传递“日期时间”,而不是字符串
    • @4est 更新了您希望将 DateTime 保留为类型的情况的答案。
    • 当我在 .... 之间添加它时出现错误....“在使用 ItemsSource 之前,Items 集合必须为空。”
    • 我必须使用 然后你的输入....但随后创建了“新列” - 显示正常,但我不想再添加一列
    • @4est 您应该能够更改现有列的定义。如果您显示您的 XAML,可能会更清楚。
    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 2011-03-28
    • 2015-10-28
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多