如何比较2个ListView控件中的项目并显示缺少的项目?

时间:2016-09-06 01:00:32

标签: c# winforms listview

我用c#编写程序。我有2个 marker1.ToolTipText = "ARDUINO 1"; marker2.ToolTipText = "ARDUINO 2"; 控件。 ListView从mysql数据库获取listview1TagNameTagID从外部设备获取listview2。我想比较2 TagName中的TagName字段,如果listviews缺少MessageBox中显示的项目,则会显示listview2个丢失的项目。我该怎么做呢?

到目前为止,我已经尝试过这个:

listview1

但这只是显示LstView.Sort(); ListViewDatabase.Sort(); if (ListViewDatabase.Items.Count > 0) { for (int i = 0; i < ListViewDatabase.Items.Count; i++) { string t = ListViewDatabase.Items[i].SubItems[1].Text; for (int j = 0; j < LstView.Items.Count; j++) { if (t != LstView.Items[j].SubItems[1].Text) { MessageBox.Show("Missing Tag" + LstView.Items[j].SubItems[1].Text); } } } } 中的所有标签,而不是缺少的标签。任何帮助都感激不尽。

2 个答案:

答案 0 :(得分:1)

您可以使用此类linq查询来获取listView1中存在但listView2中不存在的项目:

var diff = listView1.Items.Cast<ListViewItem>().Select(x => x.Text)
                    .Except(listView2.Items.Cast<ListViewItem>().Select(x => x.Text));
MessageBox.Show(string.Format("{0} Missing.", string.Join(",", diff)));

答案 1 :(得分:0)

您可以使用此功能,只需根据所需字段并根据控件名称进行修改。

List<string> list1 = listView1.Items.Cast<ListViewItem>()
                        .Select(item => item.Text)
                        .ToList();
List<string> list2 = listView2.Items.Cast<ListViewItem>()
                        .Select(item => item.Text)
                        .ToList();
var commonUsers = list1.Select(a => a.Text).Intersect(list2.Select(b => b.Text)); // or use .Except to get the opposite