使用 C# 在 WPF 中使 DataGrid 列标题可排序

Posted

技术标签:

【中文标题】使用 C# 在 WPF 中使 DataGrid 列标题可排序【英文标题】:Making a DataGrid Column Header sortable in WPF using C# 【发布时间】:2010-11-20 18:12:01 【问题描述】:

我在 Visual Studio 2008 中使用 C#,并且我已经安装了 WPF 工具包。我在 testtest.xaml 中创建了一个 DataGrid。 ID 和 Parts $ 列能够通过单击各自的列标题对 DataGrid 进行排序。但是,列标题 Complete Date 没有该功能。我使用标签“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】:

在您的 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>

【讨论】:

列绑定属性是否也可以?怎么办?

以上是关于使用 C# 在 WPF 中使 DataGrid 列标题可排序的主要内容,如果未能解决你的问题,请参考以下文章

c# wpf的datagrid列标题间的分割线,我加background后变成一大块黑色的,怎么变成间隔的一块一块的,如图

C# WPF datagrid checkboxcolumn 使用问题

删除 WPF DataGrid 中的空白列

c# wpf datagrid中选择所有复选框的代码

C#,WPF怎么把txt里的内容导到DataGrid里

用字典 <String,MyClass> 在 C# 中填充 WPF DataGrid