使用 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后变成一大块黑色的,怎么变成间隔的一块一块的,如图