web-dev-qa-db-ja.com

C#:ListViewにサブアイテムを追加する方法

アイテム(キーの下)の作成は簡単ですが、サブアイテム(値)を追加する方法は?

listView1.Columns.Add("Key");
listView1.Columns.Add("Value");
listView1.Items.Add("sdasdasdasd");
//How to add "asdasdasd" under value?
25
Ivan Prodanov

このような:

ListViewItem lvi = new ListViewItem();
lvi.SubItems.Add("SubItem");
listView1.Items.Add(lvi);
24
Marcus L

サブアイテムを配列に強打し、配列をリストアイテムとして追加します。

配列に値を追加する順序によって、それらが表示される列が決まるため、サブアイテムの見出しを[0]、[1]、[2]などと考えてください。

コードサンプルを次に示します。

//In this example an array of three items is added to a three column listview
string[] saLvwItem = new string[3];

foreach (string wholeitem in listofitems)
{
     saLvwItem[0] = "Status Message";
     saLvwItem[1] = wholeitem;
     saLvwItem[2] = DateTime.Now.ToString("dddd dd/MM/yyyy - HH:mm:ss");

     ListViewItem lvi = new ListViewItem(saLvwItem);

     lvwMyListView.Items.Add(lvi);
}
28
One Monkey

ListViewに表示する多くのアイテムを含むList Collectionがあるとします。ListCollectionを反復処理する次の例を見てください。

foreach (Inspection inspection in anInspector.getInspections())
  {
    ListViewItem item = new ListViewItem();
    item.Text=anInspector.getInspectorName().ToString();
    item.SubItems.Add(inspection.getInspectionDate().ToShortDateString());
    item.SubItems.Add(inspection.getHouse().getAddress().ToString());
    item.SubItems.Add(inspection.getHouse().getValue().ToString("C"));
    listView1.Items.Add(item);
  }

このコードは、ListViewに次の出力を生成します(もちろん、List Collectionにあるアイテムの数に依存します)。

基本的に、最初の列は多くのサブアイテム(他の列)を含むリストビューアイテムです。奇妙に思えるかもしれませんが、リストビューは非常に柔軟で、Windowsのようなファイルエクスプローラーを作成することもできます!

15
jasonco

ListViewItemsCollectionの拡張メソッドを使用してこれを改良しました。私の意見では、呼び出しコードをより簡潔にし、より一般的な再利用も促進します。

internal static class ListViewItemCollectionExtender
{
    internal static void AddWithTextAndSubItems(
                                   this ListView.ListViewItemCollection col, 
                                   string text, params string[] subItems)
    {
        var item = new ListViewItem(text);
        foreach (var subItem in subItems)
        {
            item.SubItems.Add(subItem);
        }
        col.Add(item);
    }
}

AddWithTextAndSubItemsの呼び出しは次のようになります。

// can have many sub items as it's string array
myListViewControl.Items.AddWithTextAndSubItems("Text", "Sub Item 1", "Sub Item 2"); 

お役に立てれば!

3
BrianB

私はこれを行うための最も速い/最も近い方法だと思います:

クラスごとにstring[] obj.ToListViewItem()メソッドを用意して、これを行います:

foreach(var item in personList)
{
    listView1.Items.Add(new ListViewItem(item.ToListViewItem()));
}

以下に定義の例を示します

public class Person
{
    public string Name { get; set; }
    public string Address { get; set; }
    public DateTime DOB { get; set; }
    public uint ID { get; set; }

    public string[] ToListViewItem()
    {
        return new string[] {
            ID.ToString("000000"),
            Name,
            Address,
            DOB.ToShortDateString()
        };
    }
}

追加のボーナスとして、リストビューの列を設定するためのColumnHeader[]リストを返すstaticメソッドを使用できます。

listView1.Columns.AddRange(Person.ListViewHeaders());
3
ja72
ListViewItem item = new ListViewItem();
item.Text = "fdfdfd";
item.SubItems.Add ("melp");
listView.Items.Add(item);
2

リストビューアイテムを作成する

ListViewItem item1 = new ListViewItem("sdasdasdasd", 0)
item1.SubItems.Add("asdasdasd")
2
RvdK

一般的に:

ListViewItem item = new ListViewItem("Column1Text")
   { Tag = optionalRefToSourceObject };

item.SubItems.Add("Column2Text");
item.SubItems.Add("Column3Text");
myListView.Items.Add(item);
2
Dave Cousineau

追加:

.SubItems.Add("asdasdasd");

コードの最後の行に追加すると、最終的には次のようになります。

listView1.Items.Add("sdasdasdasd").SubItems.Add("asdasdasd");
2
alpharedx

すばらしいです !!とても助かりました。以前はVB6を使用して同じことをしていましたが、今では完全に異なっています。これを追加する必要があります

listView1.View = System.Windows.Forms.View.Details;
listView1.GridLines = true; 
listView1.FullRowSelect = true;
1
Patrick