长日期格式到WPF中的短日期

时间:2014-01-09 03:48:20

标签: c# wpf linq

尝试将Shortdate列表设置为Datagrid.ItemsSource

var query = from loan in Loans  
            select new {Date = loan.StatusCommittedDate}  
DataGrid.ItemsSource = query.ToList();

它在DataGrid中的“3/25/2011 12:00:00 AM”格式中显示日期 我只需要日期,而不是时间,所以我的当前Linq

var query = from loan in Loans  
            select new {Date = loan.StatusCommittedDate.ToString()}  
DataGrid.ItemsSource = query.ToList()

以“2011-03-25”格式显示,这就是我想要的。因此Linq查询有效,但将其输入数据网格是错误的,如果我能得到一些指导请。当我尝试通过WPF中的Datagrid显示信息时,我收到此错误

LINQ to Entities无法识别方法System.String ToString()方法,并且此方法无法转换为商店表达式。

2 个答案:

答案 0 :(得分:0)

尝试执行不带ToString()的LINQ语句,将结果保存到中间变量。

然后在分配到网格之前操纵结果。看看是否有效:

var dates = (from loan in Loans
             select loan.StatusCommittedDate).ToList();

DataGrid.ItemsSource = query.Select(d => d.ToString()).ToList();

我猜你在你的网格中显示的不仅仅是这个,但我可以从你所包含的代码中猜出这一切。

答案 1 :(得分:0)

我建议您不要将完美的DateTime转换为字符串,只是为了格式化它。

相反,通过适当配置DataGrid,利用在WPF内最新可能时刻进行格式化的能力。

<DataGrid AutoGenerateColumns="False" >
    <DataGrid.Columns>
        <DataGridTextColumn 
            Header="Status Committed Date"  
            Binding="{Binding Date, StringFormat=yyyy-mm-dd}"/>
    </DataGrid.Columns>
</DataGrid>

需要注意的重要事项:

  • 指定列上的绑定具有您提供的任何对象列表的单个实例的上下文。因此,在这种情况下,我们绑定到您的Date属性。
  • Binding上有一个名为StringFormat的属性,可以完全按照您的意愿执行。它与您在ToString()调用中放置的任何格式相同。

请注意,我实际上没有机会将上述XAML插入到项目中以验证它是否有效,因此可能存在拼写错误。