【问题标题】:Sorting ListView by date of items按项目日期对 ListView 进行排序
【发布时间】:2012-03-10 01:31:49
【问题描述】:

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

【问题讨论】:

    标签: c# winforms listview sorting dictionary


    【解决方案1】:

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

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

    我也不确定如何将 ListViewItem 设置为唯一的键,但是您可以尝试转换字典键

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

    【讨论】:

      【解决方案2】:

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

      如果您需要特定的键顺序,请使用 SortedDictionary 类,并在必要时向其传递一个 IComparer 来定义排序顺序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        相关资源
        最近更新 更多