我正在寻找一个(最好只有XAML)解决方案来自动排序WPF DataGrid
的列,该列以dd.MM.yyyy
格式显示日期值。 DataGrid
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进行排序。这被证明是一种更容易和快速的解决方案。
答案 0 :(得分:3)
您可以绑定到DataView
,而不是绑定到CollectionViewSource
,Date
默认情况下按<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="300">
<Window.Resources>
<CollectionViewSource x:Key="cvs" Source="{Binding MyDataTable}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Date" Direction="Ascending" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>
<Grid>
<DataGrid IsReadOnly="True"
ItemsSource="{Binding Source={StaticResource cvs}}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Date, StringFormat='{}{0:dd.MM.yyyy}'}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
属性对视图进行排序:
{{1}}