SHOEISHA iD

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

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

UWPアプリ開発に必携のコンポーネントライブラリー「ComponentOne Studio」(AD)

なじみのないUWPアプリ開発にはコンポーネントを試してみよう

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

FlexGrid

 FlexGridは、データを表形式で表示/編集するためのコントロールです。WindowsフォームやWPFのFlexGridと同じ感覚で使えます。

 さっそくFlexGridのサンプルコードを試してみましょう。

サンプルコード

 ComponentOne Studio for UWPのベータ版をインストールしたときに、たくさんのサンプルコードが次のフォルダーに配置されています。

%userprofile%\Documents\ComponentOne Samples\UWP

 その下の「C1.UWP.FlexGrid\CS\FlexGridSamples」フォルダーにFlexGridのサンプルがあります。そのソリューションをVisual Studio 2015で開き、ビルドして実行してみましょう(次の画像)。

FlexGridのサンプルプログラム(デスクトップで実行)
FlexGridのサンプルプログラム(デスクトップで実行)
FlexGridのサンプルプログラム(Windows 10 Mobileエミュレーターで実行)
FlexGridのサンプルプログラム(Windows 10 Mobileエミュレーターで実行)

セルの結合

 標準のGridViewのようにバインドしたデータを表形式で表示できるだけでなく、FlexGridではセルを結合することも可能です(「Cell Merging」サンプル、次の画像)。

FlexGridではセルを結合して表示できます(画像はデスクトップですが、もちろんMobileも)
FlexGridではセルを結合して表示できます(画像はデスクトップですが、もちろんMobileも)

 セルの結合は、コードビハインドで次のように設定するだけです。

セルの結合を設定するコード例(上の画像とは異なります)
flexgrid1.AllowMerging = AllowMerging.Cells; //セルの結合を有効にする
flexgrid1.Columns["Country"].AllowMerging = true; //「Country」列で結合

 上のコードでは、「Country」列で同じ値が連続していると、それらのセルが結合されます。

グルーピング/ソート/フィルタリング

 バインドするデータをC1CollectionViewクラス(C1.Xaml名前空間)に変換すると、FlexGrid上でグルーピングなどが可能になります(「Sort, Filter, Group」サンプル、次の画像)。

FlexGridでは簡単にグルーピング/ソート/フィルタリングできます
FlexGridでは簡単にグルーピング/ソート/フィルタリングできます

 C1CollectionViewクラスは次のコードのように使います。

グルーピングを設定するコード例(上の画像とは異なります)
ObservableCollection list = ……; //バインドしたいデータを取得する
// C1CollectionViewオブジェクトを作り、グルーピングを設定する
_view = new C1.Xaml.C1CollectionView(list);
_view.GroupDescriptions.Add(new C1.Xaml.PropertyGroupDescription("Country"));
// 注:この「_view」はメンバー変数で、FlexGridにデータバインディングしている

カスタムセル

 CellFactoryクラス(C1.Xaml.FlexGrid名前空間)を継承するとカスタムセルを実装できます。例えば、整数のデータを「☆」の数で表示するといった、データテンプレートやバリューコンバーターでは難しい表現も簡単に出来ます(「Custom Cells」サンプル、次の画像)。

FlexGridでは簡単にカスタムセルを作成できます
FlexGridでは簡単にカスタムセルを作成できます

編集

 もちろんFlexGridでは、双方向バインディングしたデータの編集もサポートしています。編集可能なドロップダウンリストもあります(「Editing」サンプル、次の画像)。

FlexGridはデータの編集もサポートしています
FlexGridはデータの編集もサポートしています

 編集モードに入るにはセルをダブルクリックするか[F2]キー、あるいは、タッチ操作ならダブルタップします。すると、デスクトップではその場で編集、Mobileでは編集画面に切り替わるのでそこで編集します。なお、タッチ操作のときには、セル幅を変えるためのハンドルがヘッダー部に表示されます(次の画像)。

FlexGridはタッチ操作でもセル幅変更などの操作が可能です(赤丸内にセル幅を変更するためのハンドルが見えています)
FlexGridはタッチ操作でもセル幅変更などの操作が可能です(赤丸内にセル幅を変更するためのハンドルが見えています)

印刷

 FlexGridでは、表示しているグリッドの印刷も楽に実装できます(「Printing」サンプル、次の画像)。

FlexGridでは印刷も楽に実装できます
FlexGridでは印刷も楽に実装できます

 ただし、FlexGridのPrintメソッドは(おそらくWPF版などとの互換性のためでしょう)存在してはいますが、UWPでの印刷には利用できません。UWPでの印刷は、システムからのリクエストに答える形で1ページ分ずつ印刷するオブジェクトをアプリから返す、という仕組みになっています。FlexGridに用意されているGetPageImagesメソッドを使うと、ページごとに分割された印刷用のオブジェクトを取得できます。それをシステムに渡せばよいのです。

 なお、UWPで印刷するときは、上の画像のような印刷プレビューダイアログが必ず表示されます(Windows側で表示しています)。これはUWPの印刷の仕組み上、表示せずに印刷することはできませんのでご注意ください注2

注2 ローカルリソースへのアクセス制限

 UWPはセキュリティに配慮した設計になっていて、ローカルリソース(ファイル/プリンター/カメラなど)をアプリから利用するには原則としてエンドユーザーの承認が必要とされます。ファイルやプリンターなどの利用のたびにダイアログが表示されるもの、WebカメラやGPSなどの1回承認すればよいもの、そして、インターネット接続などのマニフェストに宣言する(その内容はWindowsストアに表示される)だけでよいものがあります。

ヘルプ

 以上、FlexGridの主な特徴を紹介してきました。もっと詳しく知りたい、あるいは、実際のコードの書き方が分からないといったときには、Webで公開されている次のドキュメントをご覧になってください。

次のページ
さまざまなコンポーネント(1)

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

  • このエントリーをはてなブックマークに追加
UWPアプリ開発に必携のコンポーネントライブラリー「ComponentOne Studio」連載記事一覧
この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

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

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング