C#如果项目存在但子项目不同,如何将项目添加到列表视图?

时间:2014-02-26 00:49:25

标签: c# listview duplicates subitem

我有一个包含2列的列表视图,我在用户输入的表单上有一个按钮,ip:port然后在单击按钮时将项目添加到列表视图中,非常基本。

我想要做的是:
当用户点击按钮时,我想检查列表视图中是否存在ip,如果确实如此,我想检查端口是否存在与该ip相关联的子项存在于子项中。如果它不是我想要添加项目,那么我会有两个具有相同IP但具有不同端口的项目。

任何帮助将不胜感激,提前谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个:

void Main()
{
    Form form = new Form();

    ListView lv = new ListView();
    lv.View = View.Details;
    lv.Columns.Add(new ColumnHeader() { Name = "ip", Text = "IP Address" });
    lv.Columns.Add(new ColumnHeader() { Name = "port", Text = "Port" });
    lv.Dock = DockStyle.Fill;

    // Tests.
    AddItem(lv, "10.0.0.1", String.Empty);
    AddItem(lv, "10.0.0.2", String.Empty);
    AddItem(lv, "10.0.0.1", "8080");
    AddItem(lv, "10.0.0.1", String.Empty);
    AddItem(lv, "10.0.0.1", "8080");

    form.Controls.Add(lv);
    form.ShowDialog();
}

private void AddItem(ListView listView, string ip, string port)
{
    var items = listView.Items.Cast<ListViewItem>();
    // First subitem starts at index 1.
    bool exists = items.Where(item =>
        (item.Text == ip && item.SubItems[1].Text == port)).Any();
    if (!exists)
    {
        var item = new ListViewItem(ip);
        item.SubItems.Add(new ListViewItem.ListViewSubItem(item, port));
        listView.Items.Add(item);
    }
    else
    {
        Console.WriteLine("Duplicate: {0}:{1}", ip, port);
    }
}

检查采用AddItem()方法。根据您的要求进行修改。

答案 1 :(得分:0)

我会使用Dictionary<string, List<string>>模型来分隔控件和数据,以填充列表视图。更容易验证和修改。