Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9749

WPFでDataGridにデータ(DataTable,DataView)を表示して絞り込み表示したり数値順ソートしたりその他色々

$
0
0

WPFでリスト的なデータを表示するときに DataGridを使うことがあると思いますが、その使い方について調べたことのメモです。

開発環境

  • Windows 10
  • Visual Studio 2019
  • Prism 7.2

DataGridにデータを表示する

データを ItemsSourceプロパティにバインドします。
データとして今回は DataTableを使います。そして後々フィルタリングをしたいので DataTableから DataViewをつくってバインドします。
列ヘッダの名前とかを指定したいので、AutoGenerateColumns=FalseにしてXAMLに列を定義します。

ExampleViewModel.cs
privateDataTable_data;publicDataViewData{get;privateset;}..._data=newDataTable();_data.Columns.Add("Name");_data.Columns.Add("Price");_data.Rows.Add("商品A",500);_data.Rows.Add("商品B",1200);_data.Rows.Add("商品C",800);_data.Rows.Add("商品D",2000);Data=newDataView(_data);
ExampleView.xaml
<DataGridItemsSource="{Binding Data}"AutoGenerateColumns="False"><DataGrid.Columns><DataGridTextColumnHeader="商品名"Binding="{Binding Name}"/><DataGridTextColumnHeader="金額"Binding="{Binding Price}"/></DataGrid.Columns></DataGrid>

絞り込み表示

DataView.RowFilterプロパティに条件式を設定します。

ExampleViewModel.cs
Data.RowFilter="Price > 1000";

列カラムクリック時のソートを数値順にしたい

列カラムをクリックしてソートしたとき、そのままでは辞書順のソートになってしまいます。数値でソートしたい場合は DataColumnCollection.Addに型を指定します。

ExampleViewModel.cs
_data.Columns.Add("Name");_data.Columns.Add("Price",typeof(int));

列カラムクリック時のソートを〇〇にしたい

列カラムをクリックしたときにどうソートするか自分でかくことができます。調べたんですけど結局使いませんでした(私のアプリの場合は上の数値順にする方法で十分だった)。ですがせっかくなのでメモ程度に書き残しておきます。

流れとしては

  • ビューでカラムクリック時に発生する Sorting イベントを補足し、ビューモデルにコマンドを送る
  • EventArgs にクリックされた列ヘッダの文字列が入っているので、それに一致する列でデータを並び替える (DataView.Sort)
  • DataTableを作り直す (DataView.ToTable)
  • ビューで、DataGridのソートしたカラムの SortDirectionを設定する(ソートマークを付ける)

という感じだと思います。

:link:参考

数値列で空白セルを表示したい

データに DBNullを入れます。

ExampleViewModel.cs
_data.Rows.Add("商品A",500);_data.Rows.Add("商品B",1200);_data.Rows.Add("商品C",DBNull.Value);_data.Rows.Add("商品D",2000);

なお BindingTargetNullValueプロパティを設定することで、DBNullなセルに任意の文字列を表示することもできます。

ExampleView.xaml
<DataGridTextColumnHeader="金額"Binding="{Binding Price, TargetNullValue='NULLだよ'}"/>

サンプルのソースコード

プロジェクト一式を GitHub に置いときます。


Viewing all articles
Browse latest Browse all 9749

Trending Articles