2012-02-19 56 views
0

我有一个ListView显示一些图像(使用ImageList)。到目前为止一切正常。我可以很容易地通过属性Text属性来分类。但我希望能够通过创建日期(ASC或DESC)对它们进行排序。排序ListView项目的日期

项目创建这样的:

Item.Text = file name 
item.Tag = file path 

我想排序日期这样的,但在排序的字典没有成功,而且我不知道怎么投该字典项背到列表视图:

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

回答

0

由于阿夫纳说,字典是不是默认排序,但是你可以使用一些LINQ做返回一个IEnumerable的:

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

我也不清楚,你如何让一个ListViewItem的唯一作为关键然而,你可以尝试并铸造你的字典键

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

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

如果您需要具有特定的密钥顺序,请使用SortedDictionary类,并在必要时向其传递IComparer以定义排序顺序。