【发布时间】:2014-02-04 01:31:15
【问题描述】:
我有一个名为“mainListView”的 ListView (WinForms),其中显示了当前路径的文件和文件夹。根据每个文件的扩展名,我将它们放在不同的组中。当用户单击它们时,我还有对 mainListView 进行排序的列。
最近我添加了一个组,该组的行为可能与其他组有些不同,因此当用户单击某个列试图对列表中的项目进行排序时,新组就变成了灾难并且是无序的。该组中的某些元素在某些列中没有信息,因此如果您按此列排序,则会发生这种混乱,这是正常的,因此我只想排除该组进行排序。
我想知道是否有某种方法可以在单击列时排除该组以进行排序。或者,如果独立于单击哪一列,我可以为该组应用不同的排序标准。我一直在尝试很多事情并寻找答案,我认为这是不可能的,但我不会不问就放弃。
我目前的排序代码: 在 DisplayProperties 中,我存储了一些用户配置,以便在再次加载程序时记住。所以基本上:
DisplayProperties.mainListViewColumnSortAsc 包含排序顺序:升序或降序。 DisplayProperties.mainListViewColumnsSaved[] 包含一个字符串列表,其中包含 mainListView 中每一列的标识。
private void mainListView_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (DisplayProperties.mainListViewColumnsSaved[e.Column] == DisplayProperties.mainListViewColumnSort)
{
if (DisplayProperties.mainListViewColumnSortAsc == SortOrder.Ascending)
DisplayProperties.mainListViewColumnSortAsc = SortOrder.Descending;
if (DisplayProperties.mainListViewColumnSortAsc == SortOrder.Descending)
DisplayProperties.mainListViewColumnSortAsc = SortOrder.Ascending;
}
else DisplayProperties.mainListViewColumnSort = DisplayProperties.mainListViewColumnsSaved[e.Column];
mainListView.ListViewItemSorter = Sorter;
if (!(mainListView.ListViewItemSorter is ListViewSorter))
return;
Sorter = (ListViewSorter)mainListView.ListViewItemSorter;
if (Sorter.LastSort == e.Column)
{
if (mainListView.Sorting == SortOrder.Ascending)
mainListView.Sorting = SortOrder.Descending;
else
mainListView.Sorting = SortOrder.Ascending;
}
else
mainListView.Sorting = DisplayProperties.mainListViewColumnSortAsc;
Sorter.ByColumn = e.Column;
DisplayProperties.mainListViewColumnSortAsc = mainListView.Sorting;
DisplayProperties.mainListViewColumnSort = DisplayProperties.mainListViewColumnsSaved[e.Column];
mainListView.Sort();
}
【问题讨论】:
-
这是winforms / wpf / webforms吗?我们需要更多信息。
-
对不起。这是使用winforms ListView。解释起来很复杂,但基本上我正在寻找的是一种在不影响特定文件组的情况下进行排序的方法。
标签: c# winforms sorting listview