ListViewは、ケナガイタチのように意地悪で、[PC警察によって排除された]のように気まぐれなようです。
-や他の人たちの助けを借りて、ListViewを思い通りに動作させることができました(http://stackoverflow.com/questions/11423537/how-to-add-subitems-to-a-listview)。
今、私は実際のアプリで使用するためにその単純なデモを変換しています。
フォームのLoadイベントに列を作成します。
listViewGroupsItems.Columns.Add(colHeadName);
listViewGroupsItems.Columns.Add(colHeadRate);
...しかし、それらは表示されません。ただし、最初のアイテムの上に空白行があります。では、なぜテキスト値が表示されないのですか。それらは「そこに」あるが見えないのでしょうか?なぜ彼らは一掃されるのでしょうか?
とにかく、私が見たいのは:
column1Title column2Title
Group1Name
Item subitem
Item subitem
Group2Name
Item subitem
Group1Name
Item subitem
Item subitem
Item subitem
Item subitem
...しかし、私が実際に目にするのは、次のとおりです。
[blank line]
Group1Name
...それでおしまい!
ListViewのViewプロパティはDetailsに設定されています。それ以外の場合は、すべてのプロパティがデフォルト値です。
私のリストビューコードは次のとおりです。
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++;
}
}
アップデート
フォームの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);
...に:
ColumnHeader colheadName = new ColumnHeader();
ColumnHeader colheadRate = new ColumnHeader();
listViewCustomerBillAccountsClients.Columns.Add(colheadName);
listViewCustomerBillAccountsClients.Columns.Add(colheadRate);
...そしてそれはまったく違いがありませんでした。
ColumnHeaderコンストラクターは、表示する文字列を取得できるはずですが、それを実行した場合でも、次のようになります。
ColumnHeader colheadName = new ColumnHeader("This");
ColumnHeader colheadRate = new ColumnHeader("That");
...まだ変更はありません(Intellisenseまたはそれが呼ばれるものによれば、文字列argはImageKeyですが、徹底性/欲求不満から試してみようと思いました。