C# ListViewにDatatableをセットする

保守しているシステムにデータグリッドビューではなくリストビューが使われていることがあります。
ただ、SQLで取得したDatatableをセットする方法がデータグリッドビューとは全く異なります

Datatableをデータグリッドビューにセットする方法は意外と簡単ですが、

それに慣れていると少し面食らってしまうので、

データグリッドビューと比較しつつ備忘録として残しておこうと思います。

 

※因みにDatatableをデータグリッドビューにセットする方法これだけです。

dataGridView.DataSource = Datatable;

 

 


ListViewにDatatableをセットするソース
C#のサンプルです。
public void setListViewItems(ListView targetLstv, DataSet dsDataSource)
{
    //データのソースとなるDataSet
    DataRow drDataSource = new DataTable().NewRow();
    drDataSource = dsDataSource.Tables[0].NewRow();

    //ListViewItemをインスタンス化
    ListViewItem lstvwItems = new ListViewItem();

    //テーブルにデータがある場合、リストビューにデータをセット
    if (dsDataSource.Tables[0].Rows.Count > 0)
    {
        //データテーブルのレコード分ループ
        for (int i = 0; i; dsDataSource.Tables[0].Rows.Count - 1; i++)
        {
            //データソースの一行を格納
            drDataSource = dsDataSource.Tables[0].Rows[i];

            //データテーブルの列数分ループ(列ごとに縦にデータをセットする)
            for (int j = 0; j; dsDataSource.Tables[0].Columns.Count; j++)
            {
                //メインアイテムを設定(リストビュー上の1レコード目)
                if (j == 0)
                {
                    lstvwItems = targetLstv.Items.Add(drDataSource[j].ToString());
                }
                //サブアイテム設定(リストビュー上の2レコード目)
                else
                {
                    lstvwItems.SubItems.Add(drDataSource[j].ToString());
                }
            }
        }
    }
}

VBは以下のようにセットできます。

If dsResult.Tables(0).Rows.Count > 0 Then
    For i As Integer = 0 To dsResult.Tables(0).Rows.Count - 1
        For j As Integer = 0 To Me.Columns.Count - 1
            If j = 0 Then
                'アイテムを追加
                Me.Items.Add(dsResult.Tables(0).Rows(i).Item(0).ToString, i)
            Else
                'サブアイテムを追加
                Me.Items(i).SubItems.Add(dsResult.Tables(0).Rows(i).Item(j).ToString)
            End If
        Next
    Next
End If

 


補足説明

リストビューとデータグリッドビューとの違いは、ItemsSubItemsがあるところですね。
1レコード目はItemsに対して値をセットし、
2レコード名以降はSubItemsに値をセットしていく処理になります。

データグリッドビューのようにDataSourceをセットして終わりではありません。

 


データグリッドビュー(DatagridView)とリストビュー(ListView)の違いは?

そもそもの話なのですが、

「データグリッドビューとリストビューを使い分ける必要があるの?」

と思われる方も多いと多いかと思います。

機能的な違いは、処理の軽さにあります。

一般的にはDataGridよりもListViewの方が軽量

とされていて、メモリの消費量がListViewの方が軽いようです。

確かに私の保守していたアプリケーションでも表示するレコード数が

業務によっては数千件になることがあり得るのでリストビューが使われていることにも納得です。

 

<参考URL>

・ListView (GridView) とDataGridの違いについて
https://social.msdn.microsoft.com/Forums/ja-JP/e6d9bdc0-c8d9-4210-82c3-c678dfcbc4ce/listview-gridview-12392datagrid12398369491235612395123881235612390?forum=wpfja

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です