按项目日期对ListView排序
本文关键字:ListView 排序 日期 项目 | 更新日期: 2023-09-27 18:25:01
我有一个ListView
来显示一些图像(使用ImageList
)。到目前为止一切都很好。我可以很容易地按Text
属性对项目进行排序。但我希望能够按照它们的创建日期对它们进行排序(ASC或DESC)。
项目是这样创建的:
Item.Text = file name
item.Tag = file path
我正试图像这样对日期进行排序,但在对字典进行排序时没有成功,而且我也不知道如何将字典项重新投射到listview中:
private void menuViewSortDate_Click(object sender, EventArgs e)
{
var files = new Dictionary<ListViewItem, DateTime>();
foreach(ListViewItem item in listViewLoadedImages.Items)
{
files.Add(item, File.GetCreationTime(item.Tag.ToString()));
}
listViewLoadedImages.BeginUpdate();
listViewLoadedImages.Items.Clear();
// how to sort dictionary by DateTime ??
// like files.Sort(bydate);
//How can refer to key values (listviewitems) in dictionary
listViewLoadedImages.Items.AddRange((ListViewItem)files.Keys);
listViewLoadedImages.EndUpdate();
}
字典经过优化,可以快速检索,但这意味着内部顺序是未定义的,由内部实现指定。
如果需要为键指定特定的顺序,请使用SortedDictionary
类,并在必要时向其传递一个IComparer来定义排序顺序。
正如Avner所说,字典默认情况下不会排序,但您可以使用一些LINQ通过以下操作返回IEnumerable:
var results = files.OrderBy(x=>x.Value);
我也不确定如何使ListViewItem作为您的密钥是唯一的,但是您可以尝试将字典密钥转换为
var lvItems = files.Keys.Cast<ListViewItem>();