C#Listview复制组名

时间:2016-02-19 10:19:59

标签: c# listview grouping

if (comboBox1.Text == "1")
            {       
                int group1 = 0;

                group1 = listView1.Groups.Add(new ListViewGroup("Group 1"));

                listView1.ShowGroups = true;
                listView1.View = View.Details;


                string[] row = { textBox1.Text, textBox2.Text, textBox3.Text };

                ListViewItem lvi1 = new ListViewItem(row);


                lvi1.Group = listView1.Groups[group1];

                listView1.Items.Add(lvi1);

            }

如果选择了组1并且已经创建了组1,它应该将数据添加到组中,而不是创建副本。

3 个答案:

答案 0 :(得分:0)

两种方法:

  1. 检查是否已有第一组。

  2. 删除旧的第一组并每次重新创建。

  3. 我绝对是方法1的粉丝,因为它只需要一个简单的检查。方法2需要做更多的工作,如果你想使用ListView中的项目,你很快就会生气,因为它们可能不再存在(一旦它们被删除并重新创建)。

    不确定我的问题是否正确顺便说一下,对你的问题进行详细阐述可能会有所帮助。

答案 1 :(得分:0)

if (comboBox1.Text == "1")
{       
    var groupLabel = "Group 1";
    var group = listView1.Groups[groupLabel];

    if (group == null)
    {   // group did not exist - let's create it and add it to the view
        group = new ListViewGroup(groupLabel);
        listView1.Groups.Add(group);
    }

    listView1.ShowGroups = true;
    listView1.View = View.Details;

    string[] row = { textBox1.Text, textBox2.Text, textBox3.Text };

    ListViewItem lvi1 = new ListViewItem(row) {Group = group};
    listView1.Items.Add(lvi1);
}

如果在GroupCollection上使用字符串索引器,并且不存在具有该字符串(即名称)的组,则会得到null。这是创建它并将其插入集合的线索。

您总是可以将所有这些封装在扩展类

public static class ListViewExt
{
  public ListViewGroup GetGroup(this ListView view, string groupLabel)
  {
    var group = view.Groups[groupLabel];

    if (group == null)
    {   // group did not exist - let's create it and add it to the view
        group = new ListViewGroup(groupLabel);
        view.Groups.Add(group);
    }   
    return group; 
  }
}

然后在你的代码中调用它:

if (comboBox1.Text == "1")
{       
    listView1.ShowGroups = true;
    listView1.View = View.Details;

    string[] row = { textBox1.Text, textBox2.Text, textBox3.Text };

    ListViewItem lvi1 = new ListViewItem(row) {Group = listView1.GetGroup("Group 1")};
    listView1.Items.Add(lvi1);
}

答案 2 :(得分:0)

对我来说,访问listview.group[name]的解决方案始终返回null。

所以,我使用了一些linq来实现同样的目的:

ListViewGroup lvg = this.listView_History.Groups.Cast<ListViewGroup>()
    .Where(x => x.Header == "MyString").FirstOrDefault();

if (lvg == null)
{
    lvg = new ListViewGroup("MyString");
    listView_History.Groups.Add(lvg)
}

ListViewItem LVI = new ListViewItem();
LVI.Group = lvg;