Listview项目(和子项目)

时间:2011-09-06 20:37:50

标签: c# winforms

希望你们在我发疯之前能再次帮助我。 我一直在寻找轻薄,在这里和谷歌。 通过MSDN来回,但无济于事......我只是不明白我做错了什么......

我有一个表单,我在其中添加了一个列表视图(当它被拖动到表单时没有对默认设置进行任何更改)。

经过一天的愚弄,我只想尝试一个简单的例子,因为我想做的事情都不会奏效。这个例子可以作为某种“如果这不起作用,那么是时候寻求帮助了!”......

这是一个例子;

ListViewItem item = new ListViewItem();
item.Text = "FirstItem";
item.SubItems.Add("A subitem");
item.SubItems.Add("A second subitem");
item.SubItems.Add("A third subitem");
listView1.Items.Add(item);

这个例子给我的一切,它是“FirstItem”,没有别的......

我想尝试的我自己的版本如下:

我有一个名为“members”的字典。它包含两个两个字符串,“name”为Key,“LastSeen”ad value。

我正在尝试以下方法:

if (GroupMembers.Count > 0)
{
    listView1.Items.Clear();
    key2name getname = new key2name();
    ListViewItem lvi = new ListViewItem("Name");
    ListViewItem lvi2 = new ListViewItem("Last seen");
    listView1.Columns.Add("Name", -2, HorizontalAlignment.Left);
    listView1.Columns.Add("LastSeen", -2, HorizontalAlignment.Left);
    foreach (KeyValuePair<string, string> member in GroupMembers)
    {
        lvi.SubItems.Add(member.Key);
        lvi2.SubItems.Add(member.Value);
    }
    listView1.Items.AddRange(new ListViewItem[] { lvi, lvi2 });
}

我想要实现的是,我的listview将显示两列,第一列名称带有“Name”,第二列带有“Last seen”。 在每个列下,我希望显示字典的内容。

在我彻底解决这个问题之前,有人可以帮我解释一下吗? 感谢...

虽然答案是正确的,但我仍然没有得到我想要的声音,而且我不确定该怎么做..

现在我看到了列, 但我明白了:

|  Name    | LastSeen   |
|Last seen | 2011-09-06 |
|Name      | Full Name  |

我想要的是:

|  Name    | LastSeen   |
|FullName  | 2011-09-06 |
|FullName  | 2011-09-06 |
|FullName  | 2011-09-06 |

字典包含3个KeyValuePairs

3 个答案:

答案 0 :(得分:1)

示例是正确的,您应该将listView置于详细信息模式并添加列。

你的代码错了你不应该创建两个列表项lvi和lv2,只需在foreach中创建1,它的文本是第一列的文本,为它添加子项并将项添加到listview里面的foreach。

只有在详细模式下设置ListView时才会看到列。

答案 1 :(得分:1)

确保您的ListView将其View属性设置为Details,以便显示列。

您可能还想在设计时设置一些listview的属性,包括列,除非它们是动态的。

    if (GroupMembers.Count > 0)
    {
        listView1.Items.Clear();
        key2name getname = new key2name();

        //If your going to do this here, you will want to clear your Columns
        //listView1.Columns.Clear();
        //However, I would suggest you put this elsewhere, or better yet set at design time.

        listView1.Columns.Add("Name", -2, HorizontalAlignment.Left);
        listView1.Columns.Add("LastSeen", -2, HorizontalAlignment.Left);


        foreach (KeyValuePair<string, string> member in GroupMembers)
        {
            //This creates a new 'row' in your listview, and populates the first column
            // with the Key
            ListViewItem lvi = new ListViewItem(member.Key);

            //This populates the second column with the value
            lvi.SubItems.Add(member.Value);


            listView1.Items.Add(lvi)
        }
    }

答案 2 :(得分:0)

如果您看到的只是大图标,则需要将ListView上的View property设置为详细信息。否则代码看起来或多或少是正确的。