ListViewコントロールは外観(特に詳細表示は)がデータシートビューやリストボックスコントロールに似たところあるので、テーブルなどとの連結が簡単にできそうに感じますが、TreeViewコントロールと同様、データバウンドの機能はありません。やはりVBAを使って、テーブルなどからデータを読み込み、順次それをリストアイテムとして追加していく必要があります。
本項では、テーブルからデータを読み込んでListViewコントロールにセットする方法、セットしたデータの編集、そのデータをテーブルに保存する方法などのサンプルを掲載します。なお、ListViewコントロール上で直接編集できるのは画面上の1列目のデータのみです。SubItemsに当たるデータを画面上で編集することはできません。ただしVBAを使って書き換えることは可能ですので、その方法も紹介します。
ポイント
- StartLabelEditメソッド
- ListViewコントロールをフォームに挿入したデフォルトでは、アイテムの編集が可能となっています。「商品コード」欄にマウスをおいてちょっと待てば編集可能な状態となります。プログラムからその状態を作り出すには、ListViewコントロールにフォーカスを移動後、このメソッドを実行します。
- Removeメソッド
- ListItemsコレクションのRemoveメソッドを実行することで、指定されたListItemを削除することができます。画面上は1行がまとめて削除されます。コードとしては、引数として削除したいListItemオブジェクトのIndexプロパティを指定します。
なお、ListItemsコレクションのClearメソッドを使えば、すべてのListItemを一発でクリアすることができます。
- SelectedItem.SubItems(X)
- Xに任意の列番号<画面上の列順−1>を指定することによって、現在選択されている行のその列のオブジェクトを操作することができます。2列目以降の値をプログラムから変更する場合には、この式に値を代入します。
- Countプロパティ
- ListItemsコレクションのCountプロパティによって全リスト数を取得することができます。これを使ってループを構成することで、すべてのリストをトレースすることができます。
その際、"ListItems(iintLoop)"のようにListItemsコレクションに対してインデックスを指定することで、1つ1つのListItemsオブジェクトを扱うことができます。1列目の値を取得するには、そのTextプロパティ値を取得します。2列目以降については、SubItems(1)、SubItems(2)、・・・・・のようにプロパティを指定することでそれぞれの値を取得することができます。ListViewコントロールの値をテーブルに保存する場合には、この方法を使ってデータの取得を行ないます。
サンプルフォームの実行例
元となる「tbl商品マスタ」テーブルの内容
テーブルを読み込んでListViewに表示したところ(テーブルを編集した場合は[リストを再構成]ボタンでその内容を反映させることができます)
商品コードを編集中の状態
在庫をいくつかクリア(ゼロに更新)したところ
サンプルDBのダウンロード
comctl_08.lzh(comctl_08.mdb)
|