如何将文件夹保存在listview中的文件上方 [英] How do I keep folders above files in listview
问题描述
我有一个文件夹/文件ListView填充
1st [..](上一个文件夹,总是第一个)
2nd [目录1]
3 [目录2]
第4等...
5 [文件1]
6th [File 2]
7th etc ...
我想让文件夹始终保持在文件上方,即使你对列进行排序。一切正常,我打开组,但我想避免(或让它们看不见但我找不到任何解决方案)。应将文件夹与其他文件夹和文件进行排序。有没有办法在不使用替代ListView控件或分组的情况下执行此操作?
我尝试过:
I have a Folder/File ListView populated
1st [..] (Up one folder, always first)
2nd [Directory 1]
3rd [Directory 2]
4th etc...
5th [File 1]
6th [File 2]
7th etc...
I would like to keep the folders always above the files at all time even if you sort the columns. It all works fine is I turn on groups but I would like to avoid that(or make them invisible but I couldn't find any solution for that). The folders should be sorted compared to other folders and files to files. Is there a way to do this without using alternative ListView control or grouping?
What I have tried:
public class ListViewColumnSorter : IComparer
{
private int ColumnToSort;
private string ColumnNameToSort = "";
private SortOrder OrderOfSort;
private CaseInsensitiveComparer ObjectCompare;
public ListViewColumnSorter()
{
ColumnToSort = 0;
OrderOfSort = SortOrder.None;
ObjectCompare = new CaseInsensitiveComparer();
}
public int Compare(object x, object y)
{
int compareResult;
ListViewItem listviewX, listviewY;
listviewX = (ListViewItem)x;
listviewY = (ListViewItem)y;
string path = listviewX.Tag.ToString();
string path2 = listviewY.Tag.ToString();
switch (ColumnName)
{
case "Name":
compareResult = String.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
if (Order == SortOrder.Descending)
compareResult *= -1;
return compareResult;
case "Extension":
compareResult = String.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
if (Order == SortOrder.Descending)
// Invert the value returned by Compare.
compareResult *= -1;
return compareResult;
case "Size":
if (System.IO.File.Exists(path) & System.IO.File.Exists(path2))
{
FileInfo fi = new FileInfo(path);
FileInfo fi2 = new FileInfo(path2);
compareResult = ObjectCompare.Compare(fi.Length, fi2.Length);
}
else
{
compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
}
break;
case "Last accessed":
{
DateTime x1, y1;
if (!DateTime.TryParse(listviewX.SubItems[ColumnToSort].Text, out x1))
x1 = DateTime.MinValue;
if (!DateTime.TryParse(listviewY.SubItems[ColumnToSort].Text, out y1))
y1 = DateTime.MinValue;
compareResult = DateTime.Compare(x1, y1);
if (x1 != DateTime.MinValue && y1 != DateTime.MinValue)
goto done;
compareResult = String.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
done:
if (Order == SortOrder.Descending)
compareResult *= -1;
return compareResult;
}
default:
compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
break;
}
if (OrderOfSort == SortOrder.Ascending)
{
return compareResult;
}
else if (OrderOfSort == SortOrder.Descending)
{
return (-compareResult);
}
else
{
return 0;
}
}
public int SortColumn
{
set
{
ColumnToSort = value;
}
get
{
return ColumnToSort;
}
}
public string ColumnName
{
set
{
ColumnNameToSort = value;
}
get
{
return ColumnNameToSort;
}
}
public SortOrder Order
{
set
{
OrderOfSort = value;
}
get
{
return OrderOfSort;
}
}
}
推荐答案
添加一列只是为了排序;例如0文件夹; 1文件。
然后隐藏排序列;或者,如果显示有用,则使用序列号。
Add a column just for sorting; e.g. "0" folder; "1" file.
Then "Hide" the "sorting" column; or, use a "sequence number" if display is useful.
这篇关于如何将文件夹保存在listview中的文件上方的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!