You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何创建存储类实例的List并实现WinForm列表视图排序

解决Windows Form中List<自定义类>报错及ListView绑定排序问题

1. 先正确定义自定义类

你遇到的「类型或命名空间未找到」错误,核心是method不是一个已定义的有效自定义类(且类名用method容易和方法概念混淆)。先创建符合需求的类,包含string和int类型的属性:

// 可放在Form类外部,或同一个命名空间下
public class TaskItem
{
    // 存储表单输入的文本内容
    public string Content { get; set; }
    // 存储优先级的整数值
    public int Priority { get; set; }
}

2. 正确初始化List

在你的Form类中声明并初始化List实例,确保整个Form范围内可访问:

// 作为Form的类成员变量
private List<TaskItem> taskList = new List<TaskItem>();

你之前的代码new List<method>;有两处错误:一是缺少实例化的括号(正确写法为new List<类名>()),二是未定义有效的自定义类类型。

3. 表单提交时的完整逻辑

替换你原来直接添加ListView的代码,改为先将数据存入List,排序后再刷新ListView:

private void btnSubmit_Click(object sender, EventArgs e)
{
    // 1. 验证输入有效性
    string inputContent = txtBox.Text.Trim();
    if (string.IsNullOrEmpty(inputContent))
    {
        MessageBox.Show("请输入内容");
        return;
    }

    // 将下拉框选中的优先级转为int(假设下拉选项为数字文本,如"1""2")
    if (!int.TryParse(comboPrio.SelectedItem?.ToString(), out int priority))
    {
        MessageBox.Show("请选择有效的优先级");
        return;
    }

    // 2. 将数据添加到List
    taskList.Add(new TaskItem
    {
        Content = inputContent,
        Priority = priority
    });

    // 3. 按Priority升序排序(需要降序则改用OrderByDescending)
    var sortedTasks = taskList.OrderBy(t => t.Priority).ToList();

    // 4. 刷新ListView
    lvList.Items.Clear();
    foreach (var task in sortedTasks)
    {
        ListViewItem item = new ListViewItem(task.Content);
        item.SubItems.Add(task.Priority.ToString());
        lvList.Items.Add(item);
    }

    // 重置输入控件
    txtBox.Clear();
    comboPrio.SelectedIndex = -1;
}

4. 关键配置注意

  • 确保你的ListView控件在设计器中设置View属性为Details,并添加对应列(如第一列「内容」、第二列「优先级」),否则子项无法显示。
  • 始终通过List作为数据源管理数据,而非直接操作ListView项,这样排序、增删数据会更灵活可控。

内容的提问来源于stack exchange,提问作者Joshua Wilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:13:22