データをセットする処理の作成
データベースファイルを組み込んだら、続いてこのデータベースデータをC1FlexGridコントロールに連結するコードを作成していきます。
データの抽出とビューの作成
データの抽出手順は、最初に必要なデータを抽出するクエリを実行します。そして、この結果セットをC1FlexGridコントロールの「ListCollectionView」オブジェクトにしてItemSourceプロパティに組み込めば、抽出したデータをコントロール上で表示できます。
まず、ADOデータエンティティのインスタンスを作成します。次に、ObjectQueryオブジェクトを作成し、クエリのSQL文を作成します。
そして、「ListCollectionView」オブジェクトのインスタンスを作成します。引数は、クエリの結果セットをIListオブジェクトにしたものです。このListCollectionViewオブジェクトをC1FlexGridコントロールのItemSourceプロパティにセットします。
Imports System.Data.Objects Imports C1.WPF.FlexGrid Class MainWindow Dim dataEntities As sql_db1 = New sql_db1 Private view As ListCollectionView Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded Dim products As ObjectQuery(Of Product) = dataEntities.Product Dim query = _ From product In products _ Where product.Color = "Black" _ Order By product.ListPrice _ Select product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice 'Viewの作成 view = New ListCollectionView(query.ToList) C1FlexGrid1.ItemsSource = view
using System.Data.Objects; using C1.WPF.FlexGrid; namespace WPF_FG_Data_cs { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { sql_db1 dataEntities = new sql_db1(); ListCollectionView view; private void Window_Loaded(object sender, RoutedEventArgs e) { ObjectQuery<Product> products = dataEntities.Product; var query = from product in products where product.Color == "Black" orderby product.ListPrice select new { product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice }; view = new ListCollectionView(query.ToList()); C1FlexGrid1.ItemsSource = view;
列ヘッダの装飾
データがC1FlexGridコントロールに連結されると、自動的に列見出しとデータ数に見合う行列数のセルが作成されます。列見出しは、デザイン時は列見出しなどは決まっていないため、デザインするのであればビューを設定し終わってからになります。
ここでは、「ColumnHeaderBackground」「ColumnHeaderForeground」プロパティを使用して、列ヘッダの背景色と文字色を変更しています。これらのプロパティはコレクションオブジェクトに属しているので、一括ですべての列ヘッダを操作できます。
'列見出しの装飾 C1FlexGrid1.ColumnHeaderBackground = New SolidColorBrush(Colors.Purple) C1FlexGrid1.ColumnHeaderForeground = New SolidColorBrush(Colors.White) End Sub
C1FlexGrid1.ColumnHeaderBackground = new SolidColorBrush(Colors.Purple); C1FlexGrid1.ColumnHeaderForeground = new SolidColorBrush(Colors.White); }
グループ化の処理
前ページで解説したとおり、データのソートは列ヘッダに組み込まれている機能を自動的に使用できるようになるため、ここではデータのグループ化を行う処理を、チェックボックスのイベントハンドラに組み込みます。
グループ化の実行は、「GroupDescriptions」コレクションオブジェクトへ、Addメソッドを使用してグループ化したいデータを「PropertyGroupDescription」オブジェクトにして設定します。また、グループ化を解除したい場合は、「GroupDescriptions」クラスのClearメソッドを実行するだけです。
Private Sub CheckBox1_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) view.GroupDescriptions.Add(New PropertyGroupDescription("CategoryName")) End Sub Private Sub CheckBox1_Unchecked(sender As System.Object, e As System.Windows.RoutedEventArgs) view.GroupDescriptions.Clear() End Sub
private void CheckBox1_Checked(object sender, RoutedEventArgs e) { view.GroupDescriptions.Add(new PropertyGroupDescription("CategoryName")); } private void CheckBox1_Unchecked(object sender, RoutedEventArgs e) { view.GroupDescriptions.Clear(); }
まとめ
今回は、SQL Serverのデータから必要なデータを抽出して、C1FlexGridコントロールに連結モードで接続して表示しました。データベースの設定は、WPF標準のDataGridコントロールと同じ方法が使用でき、データベースをプロジェクトに組み込むだけで簡単にデータを表形式で表示できます。
連結モードでは、データのソート、グループ化、集計などが簡単に行えるため、C1FlexGridは、データベースのフロントエンドアプリケーション作成にはもってこいのコントロールだと思います。