如何基于原ListView两列条件向其他ListView添加数据且避免重复
问题修复方案
重复原因
你的代码每次点击新增按钮时,都会全量遍历tasksList中所有历史条目,再统一插入到4个目标ListView中,之前已经插入过的旧条目会被反复添加,因此会出现重复条目。
修复方案1:全量刷新(改动最小)
适合任务总数量不大的场景,每次分配条目前先清空4个目标ListView的已有内容,再重新插入所有符合条件的条目:
private void button1_Click(object sender, EventArgs e) { string[] row = { taskTextbox.Text, importantComboBox.Text, urgentComboBox.Text, descriptionremarksTextBox.Text }; var listItem = new ListViewItem(row); tasksList.Items.Add(listItem); txtClear(); // 新增:先清空4个目标ListView的旧内容 listView1.Items.Clear(); listView2.Items.Clear(); listView3.Items.Clear(); listView4.Items.Clear(); foreach (ListViewItem item in tasksList.Items) { if (item.SubItems[1].Text == "Yes" && item.SubItems[2].Text == "Yes") listView1.Items.Add(new ListViewItem(item.SubItems[0].Text)); else if (item.SubItems[1].Text == "Yes" && item.SubItems[2].Text == "No") listView2.Items.Add(new ListViewItem(item.SubItems[0].Text)); else if (item.SubItems[1].Text == "No" && item.SubItems[2].Text == "Yes") listView3.Items.Add(new ListViewItem(item.SubItems[0].Text)); else if (item.SubItems[1].Text == "No" && item.SubItems[2].Text == "No") listView4.Items.Add(new ListViewItem(item.SubItems[0].Text)); } }
修复方案2:增量添加(性能更优)
不需要遍历整个任务列表,只需要把刚新增的单条条目按条件分配到对应目标ListView即可,避免重复处理旧数据:
private void button1_Click(object sender, EventArgs e) { string[] row = { taskTextbox.Text, importantComboBox.Text, urgentComboBox.Text, descriptionremarksTextBox.Text }; var listItem = new ListViewItem(row); tasksList.Items.Add(listItem); txtClear(); // 仅处理当前新增的条目,不需要遍历全量历史 if (listItem.SubItems[1].Text == "Yes" && listItem.SubItems[2].Text == "Yes") listView1.Items.Add(new ListViewItem(listItem.SubItems[0].Text)); else if (listItem.SubItems[1].Text == "Yes" && listItem.SubItems[2].Text == "No") listView2.Items.Add(new ListViewItem(listItem.SubItems[0].Text)); else if (listItem.SubItems[1].Text == "No" && listItem.SubItems[2].Text == "Yes") listView3.Items.Add(new ListViewItem(listItem.SubItems[0].Text)); else if (listItem.SubItems[1].Text == "No" && listItem.SubItems[2].Text == "No") listView4.Items.Add(new ListViewItem(listItem.SubItems[0].Text)); }
内容的提问来源于stack exchange,提问作者Datetimewizard
相关产品推荐
相关产品推荐

