gpt4 book ai didi

c# - Silverlight DataGrid 中列的不同默认排序顺序

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:56 24 4
gpt4 key购买 nike

在我的 Silverlight 应用程序中,我有一个显示项目列表的 DataGrid。它与自定义 ObservableCollection 数据绑定(bind),后者实现 ICollectionView 以提供 SortDescription

当用户点击标题时,数据将按此列升序排序。大多数用户希望“名称”列按字母顺序排序 (ASC),但对于“创建日期”列,首先显示最新条目 (DESC) 更有意义。

是否可以覆盖某些列的默认排序顺序?

最佳答案

这里有两个选项,我可以看到。您可以使用相关网格的自定义排序函数扩展 ObservableCollection。你可以看到如何做到这一点 here .

您的另一个选择涉及使用标题中的超链接按钮自定义网格。然后,您可以捕获点击并以任何您想要的方式对基础集合进行排序。

界面代码

<my:DataGrid.Columns>
<my:DataGridTextColumn DisplayMemberBinding="{Binding Name}">
<my:DataGridTextColumn.Header>
<HyperlinkButton Content="Name" Tag="Name"
Click="Sort_Click" TextDecorations="Underline"/>
</my:DataGridTextColumn.Header>
</my:DataGridTextColumn>
<my:DataGridTextColumn DisplayMemberBinding="{Binding CreationDate}">
<my:DataGridTextColumn.Header>
<HyperlinkButton Content="CreationDate" Tag="CreationDate"
Click="Sort_Click" TextDecorations="Underline"/>
</my:DataGridTextColumn.Header>
</my:DataGridTextColumn>
</my:DataGrid.Columns>

点击处理程序

private void Sort_Click(object sender, RoutedEventArgs e)
{
HyperlinkButton button = sender as HyperlinkButton;
// Which property are we sorting?
string sortProperty = button.Tag.ToString();
// sort direction (variable to keep track of which way were sorting last, add key checking an null checking)
bool sortAsc = !this.columnSortState[sortProperty];
IEnumerable<ITEMS> dataItems = dataGrid.ItemsSource as IEnumerable<ITEMS>;
switch (sortProperty)
{
case "Name":
dataItems = sortAsc
? dataItems.OrderBy(x => x.Name)
: dataItems.OrderByDescending(x => x.Name);
break;
case "CreationDate":
dataItems = sortAsc
? dataItems.OrderByDescending(x => x.CreationDate);
: dataItems.OrderBy(x => x.CreationDate)
break;
}

this.columnSortState[sortProperty] = isSortAsc;
}

为简洁起见,我已经删除了您应该在点击处理程序中执行的所有空检查和其他操作。

关于c# - Silverlight DataGrid 中列的不同默认排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28499935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com