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

C#删除ListView元素后将Items转换为List<Show>的实现方法

C# WinForms 删除ListView项并转换为List解决方案

先确认Show类示例(匹配你的业务属性调整)

public class Show
{
    public int SerialNumber { get; set; } // 对应ListView的序号列
    public string Title { get; set; }
    public string Genre { get; set; }
    // 其他自定义业务属性
}

按钮点击事件完整实现代码

private void btnDeleteSelected_Click(object sender, EventArgs e)
{
    // 1. 安全删除选中项(反向遍历避免索引错乱)
    for (int i = listView1.SelectedItems.Count - 1; i >= 0; i--)
    {
        ListViewItem selectedItem = listView1.SelectedItems[i];
        listView1.Items.Remove(selectedItem);
    }

    // 2. 更新序号列(假设序号是ListView的第0列)
    for (int i = 0; i < listView1.Items.Count; i++)
    {
        listView1.Items[i].SubItems[0].Text = (i + 1).ToString();
    }

    // 3. 将剩余项转换为List<Show>集合
    List<Show> myShows = new List<Show>();
    foreach (ListViewItem item in listView1.Items)
    {
        Show show = new Show
        {
            SerialNumber = int.Parse(item.SubItems[0].Text),
            Title = item.SubItems[1].Text,
            Genre = item.SubItems[2].Text
            // 按你的ListView列顺序,对应赋值Show类的其他属性
        };
        myShows.Add(show);
    }

    // 后续可使用myShows做业务处理(如保存、校验等)
}

关键注意事项

  • 删除项的正确姿势:必须反向遍历SelectedItems,正向删除会导致索引偏移,出现漏删或索引越界问题。
  • 序号列更新:遍历所有剩余项,将第0列文本设置为i+1(索引从0开始,序号从1计数)。
  • 集合转换:确保ListView的SubItems索引与Show类的属性一一对应,注意类型转换(如字符串转int),如果列顺序调整,同步修改索引值。
  • 提前确认ListView的View属性设置为Details,且已添加对应列(包括序号列)。

内容的提问来源于stack exchange,提问作者Francisco J A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:20:58