【问题标题】:Listview items (and subitems)Listview 项目(和子项目)
【发布时间】:2011-09-06 20:37:50
【问题描述】:

希望你们能在我发疯之前再次帮助我。 我一直在这里和谷歌上搜索高低。 来回翻阅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”作为广告值。

我正在尝试以下方法:

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 });
}

我想要完成的是,我的列表视图将显示两列,第一列名称带有文本“名称”,第二列名称为“最后一次看到”。 在这些列中的每一列下,我希望显示我的字典的内容。

在我完全发疯之前,有人可以帮我解释一下吗? 谢谢...

虽然答案是正确的,但我仍然没有得到我想要的输出,我不知道该怎么做..

现在我确实看到了这些列, 但我明白了:

|  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

【问题讨论】:

  • 您正在添加子项。您应该改为添加 ListViewItems。

标签: c# winforms


【解决方案1】:

例子是对的,你应该把listView设置为details mode并添加列。

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

只有将 ListView 设置为详细信息模式后,您才能看到列。

【讨论】:

  • 谢谢 Davide.. 我错过了你的答案... 显然,这是正确的代码: [code]listView1.Items.Clear(); key2name getname = new key2name(); listView1.Columns.Add("名称", -2, Horizo​​ntalAlignment.Left); listView1.Columns.Add("LastSeen", -2, Horizo​​ntalAlignment.Left); foreach (KeyValuePair 成员在 GroupMembers) { ListViewItem lvi = new ListViewItem(getname.Execute(member.Key)); lvi.SubItems.Add(member.Value); listView1.Items.Add(lvi); }[/code]
【解决方案2】:

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

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

    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)
        }
    }

【讨论】:

  • 啊……就这么简单……谢谢:)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多