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
相关产品推荐
相关产品推荐

