按项目日期排序ListView

时间:2012-02-19 11:30:28

标签: c# winforms listview sorting dictionary

我有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();
} 

2 个答案:

答案 0 :(得分:1)

字典经过优化,可快速检索,但这意味着内部订单未定义,并由内部实现指定。

如果您需要具有密钥的特定订单,请使用SortedDictionary类,如有必要,将其传递给IComparer,以定义排序顺序。

答案 1 :(得分:0)

正如Avner所说,默认情况下不会对字典进行排序,但您可以使用一些LINQ通过执行以下操作来返回IEnumerable:

var results = files.OrderBy(x=>x.Value);

我也不确定如何将ListViewItem作为您的密钥唯一,但是您可以尝试投射字典密钥

var lvItems = files.Keys.Cast<ListViewItem>();