none
ListView (GridView) とDataGridの違いについて RRS feed

  • 質問

  • 現在、下記要件に対応するためにListView (GridView) とDataGridどちらを使うか迷っています。
    何かアドバイスをいただけないでしょうか。よろしくお願いします。

    要件
    ・データベースから特定の条件でデータを取得
    ・一定間隔でデータを再取得して描画
    ・表示する項目はユーザーが任意に設定可能(画面上でも可能)
    ・取得した値によって、行や列の色を変更
    ・表示する値は読み取り専用で、表で編集することはない
    ・画面上でソートができること
    2017年11月17日 4:24

回答

  • 違いはあると思います。当たり前ですが、どこまでチューンするかによって差に影響を与えると思います。
    ほぼデフォルトの状態でデータを表示した時のパフォーマンスの差は取りやすいですが、実際に使う場合にパフォーマンスを改善する必要があった場合、仮想化や気を付ける点などが存在しますから、実用上でパフォーマンスが良いのはどちらかとなると、実際に完成に近い形で比較してみるしかないのではないかと思います。
    ほぼデフォルトの状態で比較しても、机上の空論と大差ないからです。

    かなり大きなデータを表示されるのでしょうか? MVVMで構築されていて、1行に1つのインスタンスが割り当てられる場合など、メモリの使用量にも注意されると良いと思います。
    一般的にはDataGridよりもListViewの方が軽量ですから、ListViewで表示に特化してできるだけシンプルにメモリを使わないように作成する方向だと思います。少なくともDataGridはListViewにはない編集の機能を持っており、これは今回の案件では必要ない機能です。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク れいじ 2017年11月17日 6:24
    2017年11月17日 6:02
    モデレータ

すべての返信

  • どちらでも実現できます。表形式で良いのであれば、DataGridで作る方が工数も少なくて簡単だと思います。
    そうではなく、1行の中にTextBlockなど複数のコントロールを自由に配置して表示したいのであれば、ListViewを使うことになるでしょう。
    ソートに関しては、ヘッダをクリックしてソートできる機能をListViewは持っておらず、DataGridは持っています。

    なるだけ工数をかけずに作るならDataGrid、少し凝ったり、将来、拡張の幅をより大きく持たせるのであれば、ListViewという感じでしょうか。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2017年11月17日 4:53
    モデレータ
  • >trapemiyaさん

    回答ありがとうございます。
    なるほど。拡張性の違いですか。
    仕様をしっかりと決めないとだめですね。

    もう一点質問よろしいでしょうか?
    コーディングによって違いはあると思いますが、描画のパフォーマンスなどに違いはありますでしょうか。
    2017年11月17日 5:16
  • 違いはあると思います。当たり前ですが、どこまでチューンするかによって差に影響を与えると思います。
    ほぼデフォルトの状態でデータを表示した時のパフォーマンスの差は取りやすいですが、実際に使う場合にパフォーマンスを改善する必要があった場合、仮想化や気を付ける点などが存在しますから、実用上でパフォーマンスが良いのはどちらかとなると、実際に完成に近い形で比較してみるしかないのではないかと思います。
    ほぼデフォルトの状態で比較しても、机上の空論と大差ないからです。

    かなり大きなデータを表示されるのでしょうか? MVVMで構築されていて、1行に1つのインスタンスが割り当てられる場合など、メモリの使用量にも注意されると良いと思います。
    一般的にはDataGridよりもListViewの方が軽量ですから、ListViewで表示に特化してできるだけシンプルにメモリを使わないように作成する方向だと思います。少なくともDataGridはListViewにはない編集の機能を持っており、これは今回の案件では必要ない機能です。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク れいじ 2017年11月17日 6:24
    2017年11月17日 6:02
    モデレータ
  • >trapemiyaさん

    回答ありがとうございます。

    表示するデータの平均ですが、
    列数が10~30で行数が100~300くらいになるかと思います。
    一部をアイコンで表示する可能性もあります。

    MVVMで構築する予定なので、trapemiyaさんが仰るように
    インスタンスのメモリにも注意したいと思います。

    非機能要件として早いデータの表示がありますので、
    今回はListViewを使用したいと思います。

    trapemiyaさん丁寧な回答ありがとうございました。
    2017年11月17日 6:24