連載
» 2005年02月04日 05時00分 公開

.NET TIPS:ListViewコントロールへ項目を追加するには?

本稿では、.NET Frameworkの標準コントロールであるListViewコントロール(System.Windows.Forms名前空間)を活用するために、ListViewコントロールにデータを追加する方法を紹介する。

[一色政彦,デジタルアドバンテージ]
「.NET TIPS」のインデックス

連載目次

 本稿では、.NET Frameworkの標準コントロールであるListViewコントロール(System.Windows.Forms名前空間)を活用するために、ListViewコントロールにデータを追加する方法を紹介する。

 ListViewコントロールはデータ項目をアイコン表示や詳細表示などにより一覧表示するためのもので、Windowsのエクスプローラでもおなじみのコントロールだ。その表示スタイルとしては、次のような4種類が用意されている。

ListViewコントロールの表示スタイル「大きなアイコン」(LargeIcon) ListViewコントロールの表示スタイル「大きなアイコン」(LargeIcon)

ListViewコントロールの表示スタイル「小さなアイコン」(SmallIcon) ListViewコントロールの表示スタイル「小さなアイコン」(SmallIcon)

ListViewコントロールの表示スタイル「一覧」(List) ListViewコントロールの表示スタイル「一覧」(List)

ListViewコントロールの表示スタイル「詳細」(Details) ListViewコントロールの表示スタイル「詳細」(Details)

 これらの表示スタイルの詳細については、MSDN「View列挙体」を参照してほしい。

 詳細表示では、1つのデータ項目につき複数の種類の情報を列ごとに表示できる。各列の値によりデータ項目の並べ替えも可能だ。

ListViewコントロールのヘッダ項目の作成

 ここでは、ListViewコントロールへ実際のデータを追加する前に、まずListViewコントロールのヘッダ項目を作成しておこう。

 なお、上記4種類の表示スタイルのうちヘッダ項目が表示されるのは、ListViewコントロールのViewプロパティが「View列挙体(System.Windows.Forms名前空間)のDetails(=詳細表示)」に設定されているときのみである。

 ヘッダ項目を作成するには、ListViewコントロールのColumnsプロパティのAddメソッドもしくはAddRangeメソッドを使えばよい。複数のヘッダ項目を作成したい場合には、複数をまとめて追加できるAddRangeメソッドが便利だ。よって本稿のサンプル・プログラムは、このAddRangeメソッドを利用する。

 AddRangeメソッドのパラメータには、ColumnHeaderオブジェクト(System.Windows.Forms名前空間)の配列を指定する。1つのColumnHeaderオブジェクトが、1つのヘッダ項目に対応する。

 具体的なサンプル・コードは、以下のとおりだ。ここではヘッダ項目として3つの列を設定している。

// ListViewコントロールを初期化します。
private void InitializeListView()
{
  // ListViewコントロールのプロパティを設定
  listView1.FullRowSelect = true;
  listView1.GridLines = true;
  listView1.Sorting = SortOrder.Ascending;
  listView1.View = View.Details;

  // 列(コラム)ヘッダの作成
  columnName = new ColumnHeader();
  columnType = new ColumnHeader();
  columnData = new ColumnHeader();
  columnName.Text = "名前";
  columnName.Width = 100;
  columnType.Text = "種類";
  columnType.Width = 60;
  columnData.Text = "データ";
  columnData.Width = 150;
  ColumnHeader[] colHeaderRegValue =
    { this.columnName, this.columnType, this.columnData };
  listView1.Columns.AddRange(colHeaderRegValue);
}

ListViewコントロールにヘッダ項目を追加するサンプル・コード(C#)

' ListViewコントロールを初期化します。
Private Sub InitializeListView()

  ' ListViewコントロールのプロパティを設定
  listView1.FullRowSelect = True
  listView1.GridLines = True
  listView1.Sorting = SortOrder.Ascending
  listView1.View = View.Details

  ' 列(コラム)ヘッダの作成
  columnName = New ColumnHeader
  columnType = New ColumnHeader
  columnData = New ColumnHeader
  columnName.Text = "名前"
  columnName.Width = 100
  columnType.Text = "種類"
  columnType.Width = 60
  columnData.Text = "データ"
  columnData.Width = 150
  Dim colHeaderRegValue() As ColumnHeader = _
    {Me.columnName, Me.columnType, Me.columnData}
  listView1.Columns.AddRange(colHeaderRegValue)

End Sub

ListViewコントロールにヘッダ項目を追加するサンプル・コード(VB.NET)

 上記コードの詳細は割愛するが、最初にListViewコントロールのプロパティ設定で、行選択モード(FullRowSelectプロパティ)、グリッド線表示(GridLinesプロパティ)、ソート機能(Sortingプロパティ)、詳細表示(Viewプロパティ)の設定を行っている。さらに続けて列(コラム)ヘッダの作成で、「名前」(列幅:100)、「種類」(列幅:60)、「データ」(列幅:150)という3つのColumnHeaderオブジェクトを作成して、それをAddRangeメソッドによりヘッダ項目として登録している。

 ここではコードによりヘッダ項目の実装を行ったが、Visual Studio .NETのIDEの[プロパティ]ウィンドウにある「Columnsプロパティ」からは、GUIにより簡単に設定することもできる。

ListViewコントロールへのデータの追加

 次にListViewコントロールへ実際のデータを追加する。

 これにはListViewコントロールのItemsプロパティのAddメソッドもしくはAddRangeメソッドを使えばよい。これに関しても複数をまとめて追加するにはAddRangeメソッドを使う。本稿のサンプル・コードではデータを1つずつ登録するので、Addメソッドを使用する。

 Addメソッドのパラメータには、ListViewItemオブジェクト(System.Windows.Forms名前空間)を指定する。1つのListViewItemオブジェクトが、1つのデータに対応する。

 先ほどのサンプル・コードでは3つの列項目を作ったが、この場合には1つのデータには3つの文字列項目が存在することになる。よって、ListViewItemオブジェクトには3つの文字列データを含める必要がある。これを実現するには、ListViewItemクラスのコンストラクタのパラメータで、それらを配列として指定すればよい。

 具体的には、以下のようなサンプル・コードになる。

// ListViewコントロールのデータを更新します。
private void RefreshListView()
{
  // ListViewコントロールのデータをすべて消去します。
  listView1.Items.Clear();

  // ListViewコントロールにデータを追加します。
  string[] item1 = { "リンゴ", "果物", "赤"};
  listView1.Items.Add(new ListViewItem(item1));
  string[] item2 = { "メロン", "果物", "緑"};
  listView1.Items.Add(new ListViewItem(item2));
  string[] item3 = { "ピーマン", "野菜", "緑"};
  listView1.Items.Add(new ListViewItem(item3));
}

ListViewコントロールのデータを追加するサンプル・コード(C#)

' ListViewコントロールのデータを更新します。
Private Sub RefreshListView()

  ' ListViewコントロールのデータをすべて消去します。
  ListView1.Items.Clear()

  ' ListViewコントロールにデータを追加します。
  Dim item1() As String = {"リンゴ", "果物", "赤"}
  listView1.Items.Add(New ListViewItem(item1))
  Dim item2() As String = {"メロン", "果物", "緑"}
  listView1.Items.Add(New ListViewItem(item2))
  Dim item3() As String = {"ピーマン", "野菜", "緑"}
  listView1.Items.Add(New ListViewItem(item3))

End Sub

ListViewコントロールのデータを追加するサンプル・コード(VB.NET)

 上記のコードにあるItemsプロパティのClearメソッドは、既存のデータ項目をすべて消去するためのものだ。

 以上のサンプル・プログラムを実行したのが次の画面である。

ListViewコントロールのサンプル・プログラムの実行結果 ListViewコントロールのサンプル・プログラムの実行結果

  ListViewコントロールの詳細表示はDataGridコントロールによるデータ一覧表示に似ているが、DataGridコントロールとは違って、コントロール内で直接、データの編集を行うことはできない。

カテゴリ:Windowsフォーム 処理対象:ListViewコントロール
使用ライブラリ:ColumnHeaderクラス(System.Windows.Forms名前空間)
使用ライブラリ:ListViewItemクラス(System.Windows.Forms名前空間)


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。