SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

SQL Serverのデータをグリッドで表示するWPFアプリケーションの作成

ComponentOne Studio Enterprise 2011JのC1FlexGridコントロールを使ったWPFアプリケーションの作成

  • このエントリーをはてなブックマークに追加

データをセットする処理の作成

 データベースファイルを組み込んだら、続いてこのデータベースデータをC1FlexGridコントロールに連結するコードを作成していきます。

データの抽出とビューの作成

 データの抽出手順は、最初に必要なデータを抽出するクエリを実行します。そして、この結果セットをC1FlexGridコントロールの「ListCollectionView」オブジェクトにしてItemSourceプロパティに組み込めば、抽出したデータをコントロール上で表示できます。

 まず、ADOデータエンティティのインスタンスを作成します。次に、ObjectQueryオブジェクトを作成し、クエリのSQL文を作成します。

 そして、「ListCollectionView」オブジェクトのインスタンスを作成します。引数は、クエリの結果セットをIListオブジェクトにしたものです。このListCollectionViewオブジェクトをC1FlexGridコントロールのItemSourceプロパティにセットします。

Visual Basic
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
C#
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」プロパティを使用して、列ヘッダの背景色と文字色を変更しています。これらのプロパティはコレクションオブジェクトに属しているので、一括ですべての列ヘッダを操作できます。

列ヘッダの背景色と文字色を変更する
列ヘッダの背景色と文字色を変更する
Visual Basic
'列見出しの装飾
    C1FlexGrid1.ColumnHeaderBackground = New SolidColorBrush(Colors.Purple)
    C1FlexGrid1.ColumnHeaderForeground = New SolidColorBrush(Colors.White)
End Sub
C#
    C1FlexGrid1.ColumnHeaderBackground = new SolidColorBrush(Colors.Purple);
    C1FlexGrid1.ColumnHeaderForeground = new SolidColorBrush(Colors.White);
}

グループ化の処理

 前ページで解説したとおり、データのソートは列ヘッダに組み込まれている機能を自動的に使用できるようになるため、ここではデータのグループ化を行う処理を、チェックボックスのイベントハンドラに組み込みます。

 グループ化の実行は、「GroupDescriptions」コレクションオブジェクトへ、Addメソッドを使用してグループ化したいデータを「PropertyGroupDescription」オブジェクトにして設定します。また、グループ化を解除したい場合は、「GroupDescriptions」クラスのClearメソッドを実行するだけです。

Visual Basic
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
C#
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は、データベースのフロントエンドアプリケーション作成にはもってこいのコントロールだと思います。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6317 2011/12/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング