使用C#在WPF中对DataGrid列标题进行排序

时间:2009-08-18 21:09:40

标签: wpf datagrid header jquery-ui-sortable

我在Visual Studio 2008中使用C#,我已经安装了WPF Toolkit。我在testtest.xaml中创建了一个DataGrid。 ID和Parts $列可以通过单击其相应的列标题对DataGrid进行排序。但是,列标题完成日期没有该功能。我使用标记“DataGridTemplateColumn”来格式化此列的日期。如何编写列标题完成日期,以便您可以单击“完成日期”列标题并对该列进行排序。如果单击该列,则不仅不会显示箭头,而且列标题不是“可单击的”。 谢谢

    

    <Label Height="22" HorizontalAlignment="Left" Margin="10,45,0,0" Name="label1" VerticalAlignment="Top" Width="41">Task</Label>
    <my:DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="140,83,67,28" Name="dataGrid1" GridLinesVisibility="Vertical" IsReadOnly="True">
        <my:DataGrid.Columns>
            <my:DataGridTextColumn    Binding="{Binding Path=[ID]}" Header="ID" />
            <my:DataGridTextColumn Binding="{Binding Path=p}" Header="Parts $" />
            <my:DataGridTemplateColumn  SortMemberPath="" Header="Complete Date">
                <my:DataGridTemplateColumn.CellTemplate >
                    <DataTemplate>
                        <TextBlock>
                            <TextBlock.Text>
                                <Binding Path="CompleteDate" ConverterCulture="en-GB" StringFormat="{}{0:MM/dd/yyyy}"/>
                            </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
            </my:DataGridTemplateColumn>
        </my:DataGrid.Columns>
    </my:DataGrid>
</Grid>

1 个答案:

答案 0 :(得分:57)

DataGridTemplateColumn中,您将SortMemberPath设置为“”。如果将其设置为项目上的实际属性(例如,CompleteDate),则应该能够进行排序。您还可以在所选列上设置CanUserSort="true"CanUserSort="false"

SortMemberPath使属性可以在用户尝试排序时进行排序。如果没有设置,那么网格不知道如何对该列进行排序(它使用列中的文本)

            <my:DataGridTemplateColumn  SortMemberPath="CompleteDate" Header="Complete Date" CanUserSort="true">
            <my:DataGridTemplateColumn.CellTemplate >
                    <DataTemplate>
                        <TextBlock>
                            <TextBlock.Text>
                                <Binding Path="CompleteDate" ConverterCulture="en-GB" StringFormat="{}{0:MM/dd/yyyy}"/>
                            </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
            </my:DataGridTemplateColumn>