2014-01-09 157 views
0

试图设置Shortdate列表为Datagrid.ItemsSource长日期格式短日期在WPF

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

它显示在“3/25/2011 12:00:00 AM”格式的日期在DataGrid
我只需要日期,没有时间,所以我现在的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

你试过用google搜索例外吗?当你尝试从SQL调用一个不转换为SQL知道的方法的方法时,就会发生这种情况。 –

回答

0

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

然后在分配给网格之前处理结果。看看这个工程:

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

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

我猜你在你的网格中显示比这更多,但它是所有我可以从你已经包括了代码猜测。

+0

试过,我得到这个错误:不能分配方法组到隐式类型的局部变量 – user2785177

+0

确保你写了'ToList()' - 而不是'ToList'。 –

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属性。
  • 绑定上有一个名为StringFormat的属性,它将完成您想要的操作。它与您在ToString()调用中放置的任何格式相同。

请注意,我并没有真正得到一个机会,以堵塞上述XAML到项目,以验证它的工作原理,所以有可能是拼写错误。

+0

嗨,我试过这种方法,但我使用telerik datagrid,它显示的信息空白,所以整个Datagrid是“填充”,但空白条目。 http://stackoverflow.com/questions/21023836/telerik-radgridview-wont-display-dates – user2785177

+0

我从这个问题看到,你最终设法得到所有的东西。优秀。 –