Wpf DataGrid(德语)日期排序

时间:2017-02-21 15:55:21

标签: c# wpf sorting date datagrid

我正在寻找一个(最好只有XAML)解决方案来自动排序WPF DataGrid的列,该列以dd.MM.yyyy格式显示日期值。 DataGrid ItemSourceDataTable,可从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进行排序。这被证明是一种更容易和快速的解决方案。

1 个答案:

答案 0 :(得分:3)

您可以绑定到DataView,而不是绑定到CollectionViewSourceDate默认情况下按<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}}