2

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ですが、徹底性/欲求不満から試してみようと思いました。

4

4 に答える 4

7

パーティーに遅れましたが、私はちょうど同じような問題を解決するために少し時間を費やしました。私が見つけた答えは、記入する前にリストをクリアするときは、

listviewGroupItems.Items.Clear();

いいえ

listviewGroupItems.Clear();

ListView.Clear()メソッドは、列を含むコントロールからすべてをクリアします

于 2014-08-08T13:10:01.133 に答える
2

今日も同じ問題がありました。私はlistView.Clear()user2867342が言及したようにコーディングしました。これをに変更する必要がありましlistView.Items.Clear()たが、列が表示されませんでした。列があり、クリックしてサイズを変更できましたが、完全に空白でした。

ListViewを詳細モードに設定しました。また、自分のプログレスバーの列をペイントしたかったので、OwnerDrawプロパティをtrueに設定しました。MSDNは、OwnerDrawプロパティ(強調鉱山)について次のように述べています。

ListViewコントロールは通常、オペレーティングシステムによって描画されます。ListViewアイテム、サブアイテム、および列ヘッダーの外観をカスタマイズするには、OwnerDrawプロパティをtrueに設定し、DrawItem、DrawSubItem、DrawColumnHeaderの1つ以上のイベントのハンドラーを提供します。これは、所有者の描画と呼ばれます。ViewプロパティがView.Detailsに設定されている場合、3つのイベントすべてが発生します。それ以外の場合は、DrawItemイベントのみが発生します。

DrawColumnHeaderイベントを実装する必要がありました。私の場合、defualtは正常に機能したため、このメソッドはDrawDefaultイベントパラメーターをtrueに設定します。このイベントハンドラーを実装した後、列ヘッダーは正しく表示されました。

...Windows.Forms designer code...
listView.DrawColumnHeader += new DrawListViewColumnHeaderEventHandler(this.listView_DrawColumnHeader);
...

private void listView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    e.DrawDefault = true;
}
于 2016-05-04T15:09:37.213 に答える
1

コードに列ヘッダーがありません。(修繕)

MSDNによると:

「ListViewコントロールに列ヘッダーが指定されておらず、ViewプロパティをView.Detailsに設定した場合、ListViewコントロールはアイテムを表示しません。ListViewコントロールに列ヘッダーが指定されていない場合、Viewプロパティを次のように設定します。 View.Tile、ListViewコントロールはサブアイテムを表示しません。」

確かに、おそらく私のSSに表示されるよりも多くの調整を行う必要がありますが、少なくとも、なぜ空白になるのかという質問に答えます。


ここに画像の説明を入力してください


編集(行を変更しましたが、コードに戻すことで成功した結果が歪むことはありませんでした):

lvi.Group = listViewGroupsItems.Groups[currentGroup];
listViewGroupsItems.Items.Add(lvi);
于 2012-07-11T19:49:38.413 に答える
1

私が見つけたもう1つのチェック事項: OwnerDrawはfalseである必要があります。

前のプロジェクトからコピーして貼り付け、OwnerDrawを使用したことを忘れました

于 2017-09-13T10:26:42.473 に答える