C#如何对列表并更新到列表视图,列表视图仅显示部分

本文关键字:列表 视图 更新 显示部 排序 | 更新日期: 2023-09-27 17:56:25

public class ListKeywords
{
    public int ID { set; get; }
    public string Keyword { set; get; }
    public string Language { set; get; }
    public int WordCount { set; get; }
} 
List<ListKeywords> keywordsList = new List<ListKeywords>();
// 
listview1.Add(new ListKeywords() { ID = keywordsList.Count+1, Keyword = line.Trim(), WordCount = countWords(line) });

我想将 10000 个列表关键字项添加到列表关键字,但我只想在 listview1 控件中显示前 1000 项。

现在,如果对列表视图 1 进行排序

,我想对所有项目进行排序(列表关键字),而不仅仅是对列表视图 1 中的前 1000 个项目进行排序。

怎么办?

对不起,我的英语不是很好

C#如何对列表<T进行排序>并更新到列表视图,列表视图仅显示部分

List<ListKeywords> SortedList = SortedList.OrderBy(o=>o.ID).Take(1000).ToList();

您可以将列表视图绑定到为您完成工作的属性。像这样:

public List<ListKeywords> Top1000Sorted 
{
    get
    {
        return keywordsList.OrderBy(x => x.ID).Take(1000).ToList();
    }
}

并使用以下方法绑定列表视图:

listview1.ItemsSource = Top1000Sorted;

如果你想按键杆排序,那么使用这个:

var top1000Items = keywordsList.OrderByDescending(x=>x.Keyword).Take(1000);

如果你想通过 ID 进行排序,请使用这个:

var top1000Items = keywordsList.OrderByDescending(x=>x.ID).Take(1000);

因此,如果您有 10.000 个项目,并且层 ID 从 1 开始到 10000,那么如果按 ID 排序,则top1000Items的 ID 范围为 9001 到 10000。

在选择前 1000 个对象之前,只需使用列表的 OrderBy 方法即可。 然后Take前 1000 个条目。

所以,像这样的方法:

public List<ListKeywords> SortByIdAndSelectRange(List<ListKeywords> list, int range)
{
    return list.OrderBy(x => x.ID).Take(range).ToList();
}

用:

myList = SortAndSelectRange(myList, 1000);

您可以进一步修改该方法以决定要作为排序依据的内容。

这是一个非常粗略的示例,显示了上述方法的用法:

class ListKeywords
{
    public int ID { set; get; }
}
class Program
{
    static void Main(string[] args)
    {
        var myList = new List<ListKeywords>();
        Random rnd = new Random();
        for (int i = 0; i < 3000; i++)
        {
            var entry = new ListKeywords() { ID = rnd.Next(3000, 9999) };
            myList.Add(entry);
        }
        myList = SortByIdAndReturnRange(myList, 1000);
        foreach (var entry in myList)
        {
            Console.WriteLine(entry.ID);
        }
    }

    static List<ListKeywords> SortByIdAndReturnRange(List<ListKeywords> list, int range)
    {
        return list.OrderBy(x => x.ID).Take(range).ToList();
    }
}

最后,您可以进行堆栈排序:

myList.OrderBy(x => x.Param1).ThenBy(x => x.Param2).ThenBy(x => x.Param3) ... and so on.

当我想按日期对列表进行排序,然后每天按时间排序时,我会使用它。