为什么ListView拒绝显示其列,项和子项(仅显示组)?

B. *_*non 1 .net c# listview listviewitem winforms

列表视图似乎像臭鼬一样脾气暴躁,并且像PC警察一样被扼杀

在其他人的帮助下,我能够按照我的意愿获得ListView(http://stackoverflow.com/questions/11423537/how-to-add-subitems-to-a-listview).

现在我正在转换这个简单的演示版,以便在真实应用中使用.

我在表单的Load事件中创建列:

listViewGroupsItems.Columns.Add(colHeadName);
listViewGroupsItems.Columns.Add(colHeadRate);
Run Code Online (Sandbox Code Playgroud)

......但他们没有显示.但是,我的第一个项目上方有一个空白行.那么为什么没有显示文本值呢?它们"在那里"但是看不见吗?他们为什么会被淘汰?

无论如何,我想看到的是:

column1Title    column2Title
Group1Name
Item        subitem
Item        subitem
Group2Name
Item        subitem
Group1Name
Item        subitem
Item        subitem
Item        subitem
Item        subitem
Run Code Online (Sandbox Code Playgroud)

......但我实际看到的只是:

[blank line]
Group1Name
Run Code Online (Sandbox Code Playgroud)

...而已!

ListView的View属性设置为Details; 否则,所有属性都是默认值.

我的listview代码是:

private void AddGroupsAndItems() {
    Dictionary<string, string> GroupsDict = PlatypusData.GetGroupsForTopLevel(Convert.ToInt32(labelTopLevel.Tag));
    int currentGroup = 0;
    foreach (KeyValuePair<string, string> entry in GroupsDict) {
        string GroupNumber = entry.Key;
        string GroupName = entry.Value;
        listViewGroupsItems.Groups.Add(new ListViewGroup(GroupName, HorizontalAlignment.Left));

        Dictionary<string, string> ItemsDict = PlatypusData.GetItemsForGroup(GroupNumber);
        foreach (KeyValuePair<string, string> itemEntry in ItemsDict) {
            string itemID = itemEntry.Key;
            string itemName = itemEntry.Value;
            ListViewItem lvi = new ListViewItem(string.Format("{0} ({1})", itemName, itemID));
            lvi.SubItems.Add(PlatypusData.GetDuckbillNameForItemId(itemID));
            listViewGroupsItems.Items.Add(lvi);
            listViewGroupsItems.Groups[currentGroup].Items.Add(lvi);
        }
        currentGroup++;
    }
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我在表单的Load事件中更改了我的代码:

var colHeadName = new ColumnHeader { Text = Resources.RateRequestForm_RateRequestForm_Load_Billing_Account_Client, Width = 160 };
var colHeadRate = new ColumnHeader { Text = Resources.RateRequestForm_RateRequestForm_Load_RatePlan_ID, Width = 120 };
listViewCustomerBillAccountsClients.Columns.Add(colheadName); //colHeadName);
listViewCustomerBillAccountsClients.Columns.Add(colheadRate); //colHeadRate);
Run Code Online (Sandbox Code Playgroud)

...至:

ColumnHeader colheadName = new ColumnHeader();
ColumnHeader colheadRate = new ColumnHeader();
listViewCustomerBillAccountsClients.Columns.Add(colheadName); 
listViewCustomerBillAccountsClients.Columns.Add(colheadRate);
Run Code Online (Sandbox Code Playgroud)

......它根本没有任何区别.

似乎ColumnHeader构造函数应该能够获取它应该显示的字符串,但即使我这样做:

ColumnHeader colheadName = new ColumnHeader("This");
ColumnHeader colheadRate = new ColumnHeader("That");
Run Code Online (Sandbox Code Playgroud)

...仍然没有变化(根据Intellisense或其他任何名称,字符串arg是一个ImageKey,但我认为我只是出于彻底/挫折而尝试.

小智 6

晚了,但我刚刚花了一些时间试图解决类似的问题.我找到的答案是,在填写之前清除列表时,必须使用

listviewGroupItems.Items.Clear();
Run Code Online (Sandbox Code Playgroud)

listviewGroupItems.Clear();
Run Code Online (Sandbox Code Playgroud)

ListView.Clear()方法清除控件中的所有内容 - 包括列