本稿では、.NET Frameworkの標準コントロールであるListViewコントロール(System.Windows.Forms名前空間)を活用するために、ListViewコントロールにデータを追加する方法を紹介する。
本稿では、.NET Frameworkの標準コントロールであるListViewコントロール(System.Windows.Forms名前空間)を活用するために、ListViewコントロールにデータを追加する方法を紹介する。
ListViewコントロールはデータ項目をアイコン表示や詳細表示などにより一覧表示するためのもので、Windowsのエクスプローラでもおなじみのコントロールだ。その表示スタイルとしては、次のような4種類が用意されている。
これらの表示スタイルの詳細については、MSDN「View列挙体」を参照してほしい。
詳細表示では、1つのデータ項目につき複数の種類の情報を列ごとに表示できる。各列の値によりデータ項目の並べ替えも可能だ。
ここでは、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コントロールを初期化します。
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コントロールのプロパティ設定で、行選択モード(FullRowSelectプロパティ)、グリッド線表示(GridLinesプロパティ)、ソート機能(Sortingプロパティ)、詳細表示(Viewプロパティ)の設定を行っている。さらに続けて列(コラム)ヘッダの作成で、「名前」(列幅:100)、「種類」(列幅:60)、「データ」(列幅:150)という3つのColumnHeaderオブジェクトを作成して、それをAddRangeメソッドによりヘッダ項目として登録している。
ここではコードによりヘッダ項目の実装を行ったが、Visual Studio .NETのIDEの[プロパティ]ウィンドウにある「Columnsプロパティ」からは、GUIにより簡単に設定することもできる。
次に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コントロールのデータを更新します。
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
上記のコードにあるItemsプロパティのClearメソッドは、既存のデータ項目をすべて消去するためのものだ。
以上のサンプル・プログラムを実行したのが次の画面である。
ListViewコントロールの詳細表示はDataGridコントロールによるデータ一覧表示に似ているが、DataGridコントロールとは違って、コントロール内で直接、データの編集を行うことはできない。
カテゴリ:Windowsフォーム 処理対象:ListViewコントロール
使用ライブラリ:ColumnHeaderクラス(System.Windows.Forms名前空間)
使用ライブラリ:ListViewItemクラス(System.Windows.Forms名前空間)
Copyright© Digital Advantage Corp. All Rights Reserved.