【发布时间】:2017-07-11 08:30:42
【问题描述】:
我正在寻找一种(最好仅适用于 XAML)解决方案,通过以dd.MM.yyyy 格式显示日期值的列对 WPF DataGrid 进行自动排序。 DataGrids ItemSource 是一个 DataTable,它是从 XML 字符串中读取的。
我已经拥有的代码似乎不起作用,但是,如果我设置例如SortDirection="Ascending" 在显示整数的列上,它确实有效。我省略了与我的问题无关的所有代码。
希望你能帮助我,在此先感谢。
<DataGrid IsReadOnly="True"
ItemsSource="{Binding Path=MyDataTable}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Date, StringFormat='{}{0:dd.MM.yyyy}'}" SortDirection="Ascending"/>
</DataGrid.Columns>
</DataGrid>
编辑:
DataTable 由方法 DataTable.ReadFromXml() 从以下字符串反序列化:
<DataTable
xmlns=\"http://schemas.datacontract.org/2004/07/System.Data\">
<xs:schema id=\"NewDataSet\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns=\"\"
xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">
<xs:element name=\"NewDataSet\" msdata:IsDataSet=\"true\" msdata:MainDataTable=\"ResultTable\" msdata:UseCurrentLocale=\"true\">
<xs:complexType>
<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">
<xs:element name=\"ResultTable\">
<xs:complexType>
<xs:sequence>
<xs:element name=\"Date\" type=\"xs:dateTime\" minOccurs=\"0\"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram
xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\"
xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">
<DocumentElement
xmlns=\"\">
<ResultTable diffgr:id=\"ResultTable1\" msdata:rowOrder=\"0\">
<Date>2017-03-11T00:00:00+01:00</Date>
</ResultTable>
<ResultTable diffgr:id=\"ResultTable2\" msdata:rowOrder=\"0\">
<Date>2017-22-11T00:00:00+01:00</Date>
</ResultTable>
<ResultTable diffgr:id=\"ResultTable3\" msdata:rowOrder=\"0\">
<Date>2017-03-11T00:00:00+01:00</Date>
</ResultTable>
</DocumentElement>
</diffgr:diffgram>
</DataTable>
编辑#2:
我现在不是试图找到一个(显然相当困难的)Xaml-Only 解决方案,而是直接在 MySQL 中从我获取它的地方对 DataTable 进行排序。这被证明是一种更简单、更快速的解决方案。
【问题讨论】:
-
用户是否需要能够通过单击列来对列进行排序,或者您可以在后面的代码中进行排序吗?
-
经过更多研究,我认为这可能是因为绑定中的字符串格式导致它作为结果字符串排序。您可以尝试使用格式 yyyy-MM-dd 看看是否有效。
-
Date是日期时间还是字符串? IIRC,DateTime 列默认按底层 DateTime 排序,而不是按显示的数据排序。 -
@apc 感谢您的回答 :) 用户也应该能够进行排序,如果他单击标题,排序似乎也可以正常工作..
-
@Kilazur Date 是 DataTable 中的 DateTime
标签: c# wpf sorting date datagrid