SHOEISHA iD

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

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

ComponentZine(ComponentOne)

グリッドコントロールを使いデータベースを操作する.NETアプリケーションを作る

「PowerTools ComponentOne Studio 2012J」のC1TrueDBGridコントロールを使った.NETアプリケーションの作成

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

 「PowerTools ComponentOne Studio 2012J」のC1TrueDBGridコントロールを使って、SQL Serverのデータベースに対して簡単にクエリを実行できるフロントエンドアプリケーションを作成してみます。

  • このエントリーをはてなブックマークに追加
全レコードデータを見ながらクエリの条件を設定できる
全レコードデータを見ながらクエリの条件を設定できる
クエリ結果はもう1つのC1TrueDBGridコントロールで表示する
クエリ結果はもう1つのC1TrueDBGridコントロールで表示する
フォーム形式の表示もできる
フォーム形式の表示もできる

はじめに

 データベースのフロントエンドアプリケーションを作成する方法はいくつもありますが、何よりも少ない工数で簡単に開発できる方法が一番です。

 「PowerTools ComponentOne Studio 2012J」のC1TrueDBGridコントロールは、堅牢性が高く使いやすい.NETのグリッドコントロールセットで、複雑な連結や非連結のグリッドアプリケーションをすばやく作成できます。

 ADO.NETマネージドデータベースインターフェースを使用して、Excelのような分割ビューや組み込みの階層連結、エンドユーザーの生産性を向上するグループ化などの機能を使うことができます。

 そこで、今回はこのC1TrueDBGridコントロールを使い、SQL Serverのデータベースから簡単にクエリを実行できるフロントエンドアプリケーションを作成してみました。

対象読者

 Visual Basic 2005/2008/2010、またはVisual C# 2005/2008/2010を使ってプログラムを作ったことがある人。

必要な環境

 Visual Basic 2005/2008/2010、Visual C# 2005/2008/2010、Visual Studio 2005/2008/2010のいずれかでプログラムが作れる環境。

 なお、本プログラムはWindows 7上で動作するVisual Studio 2010を使用して作成し、動作確認を行っています。

プログラム実行時の注意事項

 本プログラムは、「PowerTools ComponentOne Studio 2012J」のC1TrueDBGridコントロールを使用して作成しています。そのため、アプリケーションを配布する場合は、「PowerTools ComponentOne Studio 2012J」のアセンブリファイルを添付する必要があります。これは、Common Language Runtime のDLLをアプリケーションと一緒に配布するのと同じです。

 本記事のサンプルアプリケーションを正常に動作させるためには、次のファイルをインストールする必要があります。

サンプルファイルの実行に必要なファイル
(※は.NET Framework 4でのみ利用可)
ファイル名 説明
C1.Win.C1TrueDBGrid.2.dll 本体アセンブリ
C1.Win.C1TrueDBGrid.4.dll 本体アセンブリ(※)

 このファイルを、プログラムを実行するフォルダに格納します。

 .NET Framework 2.0から追加されたクラスやメンバを使用しているので、.NET Framework 2.0以上のバージョンの.NET Frameworkがインストールされていることが必須条件です。

コントロールのインストール

 「PowerTools ComponentOne Studio 2012J」を使用する方は、Visual Studio、Visual Basic、Visual C#の開発環境に、「PowerTools ComponentOne Studio 2012J」をインストールする必要があります。

 インストーラは、グレープシティのWebページからダウンロードできます。

 ダウンロードしたい製品にチェックを付け[申込フォーム]ボタンを押すと、「トライアル版申込フォーム」ページに移動しますので、「個人情報の収集および使用に同意する」にチェックを入れ「同意する」ボタンをクリックします。

 トライアル申込フォームが表示されますので、必要情報を登録すると添付トライアルライセンスキーファイルとダウンロードサイトを記載したE-Mailが送られてきますので、ここからダウンロードします。ダウンロードファイルは圧縮ファイルになっていますので、解凍してインストーラを起動します。

 制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。

コントロールの追加

 「PowerTools ComponentOne Studio 2012J」をインストールしたら、プロジェクトにコントロールを追加します。

 ツールボックスに専用のタブを作成し、使用するコンポーネントを追加します。追加するコンポーネントはアセンブリ名が「C1.Win.C1TrueDBGrid.4」の「C1TrueDBGrid」コントロールです。

コントロール アセンブリ
C1TrueDBGrid C1.Win.C1TrueDBGrid.4
アセンブリ名が「C1.Win.C1TrueDBGrid.4」の「C1TrueDBGrid」コントロール
アセンブリ名が「C1.Win.C1TrueDBGrid」の「C1TrueDBGrid」コントロール

C1TrueDBGridコントロールの機能について

 C1TrueDBGridコントロールは、多彩で豊富な機能を持ったデータグリッドコントロールです。

 高度なデータアクセス、データ表示、およびユーザーインターフェースに関するさまざまな機能を備え、これらの機能を使用して直感的で視覚効果の高いアプリケーションを構築できます。

 基本は、データベースデータと連結して使用しますが、非連結でも使用でき、また連結グリッド内に非連結の行列を組み込むこともできます。

 以下に、C1TrueDBGridコントロールの機能を紹介します。C1TrueDBGridコントロールはデータグリッドコントロールの基本機能に加え、大変多くの機能を有していますが、すべての機能を紹介していると一冊の本になってしまいますので、簡単に概要だけ紹介します。

データ表示機能の強化

 C1TrueDBGridコントロールは目的に応じた表示形式を選択できます。Formビューでは、必要に応じて変更できる標準の「フォーム」にデータが表示されます。Invertedビューでは、行と列が転置され、便利な「読み下げ」形式でデータが表示されます。また、MultipleLinesビューでは、表示可能なグリッド内に、すべての列が複数ラインで表示されます。

データを「フォーム」形式で表示(ヘルプより抜粋)
データを「フォーム」形式で表示(ヘルプより抜粋)

Excelライクなスプリット

 Microsoft Excelのように、グリッドを水平と垂直の両方向に分割できます。縦横どちらかの方向に分割できるほか、マトリックス状にも分割できます。さらに、このグリッドマトリックスを簡単な表記で逆参照できるため、グリッドを縦横それぞれ複数のスプリットに分割しても、それらのスプリットに簡単にアクセスできます。

スプリットの例(ヘルプより抜粋)
スプリットの例(ヘルプより抜粋)

列の固定(スクロールしない列)

 水平スプリットを使用することで、グリッド内の任意の位置(左端、右端、中央)に、スクロールしない列を作成できます。

非連結列

 グリッドで、データコントロールに連結された列と連結されていない列を同時に使用できます。

行の色を互い違いにする

 偶数行と奇数行の背景色を個別に設定でき、グリッドをたいへん読みやすく表示できます。

行の色を互い違いにする(ヘルプより抜粋)
行の色を互い違いにする(ヘルプより抜粋)

洗練されたスタイルオブジェクト

 階層化されたスタイルオブジェクトにフォント、色、画像、および書式設定情報がカプセル化されており、設計時と実行時にグリッドのコンポーネントを簡単にカスタマイズできます。また、セルの境界線の外見、サイズ、色、およびタイプをカスタマイズするためのプロパティも含まれています。

新しい列オブジェクト

 オブジェクトモデルを簡略化するため、True DBGridには、2つの新しい列オブジェクトが導入されました。C1DataColumnオブジェクトには、データおよびデータの処理に関するプロパティがすべて格納されています。一方、C1DisplayColumnオブジェクトには、列の表示に関するプロパティがすべて格納されています。

セル内のオブジェクト

 ビットマップ、コマンドボタン、チェックボックス、ラジオボタンなどのさまざまなセル内オブジェクトがサポートされています。これらのオブジェクトを使用して、データを表示したり、編集することができます。また、セルをボタン化して使うこともできます。

セルをボタン化して使う(ヘルプより抜粋)
セルをボタン化して使う(ヘルプより抜粋)

ドロップダウンオブジェクト

 複数列コントロール(C1TrueDBDropDown)、コンボボックス、複数行テキストエディタなど、データ入力用のさまざまなドロップダウンオブジェクトがサポートされています。サードパーティのドロップダウンコントロールもサポートされています。

セルでドロップダウンコントロールを使用する(ヘルプより抜粋)
セルでドロップダウンコントロールを使用する(ヘルプより抜粋)

フィルタバー

 列のヘッダの下に表示される特殊なデータ入力行です。フィルタバーを使用して、インクリメンタルサーチやレコードセットのフィルタなど、エンドユーザーによる独自の操作を実装できます。

入力マスク

 列に入力テンプレートを割り当てることによって、エンドユーザーによるデータ入力エラーを減らすことができます。

自動データ変換

 コードを記述しなくても、データベースにある値を自動的にテキストまたはグラフィックに変換できます。例えば、数字コードを文字やビットマップとしてレンダリングできます。

データ依存型の表示

 正規表現を使用し、セルのコンテンツに基づいてセルごとに表示スタイルを変更できます。例えば、負の数を赤色で表示したり、特定の部分文字列を含むフィールドを太字で表示することができます。

実行時のセルチップ

 セルの内容に応じた参考情報をエンドユーザーに提供できます。

スクロールトラッキングとScrollTips

 垂直スクロールバーのスクロールボックスを移動して、レコードをスクロールできるようになりました。ScrollTips機能を使用して、スクロール中にポップアップウィンドウに情報を表示することもできます。

スクロールトラッキングとScrollTips(ヘルプより抜粋)
スクロールトラッキングとScrollTips(ヘルプより抜粋)

優れたヘルプ

 True DBGridには、詳細なヘルプと、豊富なチュートリアルやサンプルを含むオンラインヘルプが用意されています。

専用デザイナ

 C1TrueDBGridコントロールは、設計時のデザインをサポートする専用のデザイナをいくつも装備しています。

 グリッド画面を分割できるSplitオブジェクト用デザイナ、表示、色、フォントなどに関する列プロパティのコレクションを操作するC1DisplayColumnCollectionエディタ、列内のデータ変換に使用するValueItemsエディタ、グリッドのスタイルを編集するGridStyleCollectionエディタ、そしてC1TrueDBGridコントロールそのものを編集するC1TrueDBGridデザイナです。

 これらのデザイナを使用し、各オブジェクトのデザインを簡単に行うことができます。

専用デザイナでかんたん編集(ヘルプより抜粋)
専用デザイナでかんたん編集(ヘルプより抜粋)

その他

 データのグループ化、集計計算、グラデーションによる塗りつぶし、ドロップダウンの自動入力補完、セル範囲選択、[Enter]キーの動作のカスタマイズ、階層化されたドロップダウングリッド、列オブジェクトのTagプロパティ、さまざまな印刷機能の強化などがあります。

 今回は、数あるC1TrueDBGridコントロールの機能の中から、行の色を互い違いに表示する機能、列の背景色をグラデーションで塗りつぶす機能、列幅の自動調節、実行時にクエリを実行する機能、グリッドのフォーム表示機能、などを使用しSQL Serverのデータを表示するアプリケーションを作成します。

GUIのデザイン

 では、さっそくプログラムを作成しましょう。

 作成するプログラムは、C1TrueDBGridコントロールを2つ使用し、1つ目のC1TrueDBGridコントロールではSQL Server2008で作成したサンプルデータベース「平成23年度秋冬野菜収穫量.mdb」から、テーブル「収穫量一覧」にあるデータをすべて取出します。このC1TrueDBGridコントロールは、行の色を互い違いになるように設定します。

 そして、クエリの条件を設定してクエリを実行し、結果セットをもう一つのC1TrueDBGridコントロールで表示します。このC1TrueDBGridコントロールは、スタイルを「Office2007Blue」に設定し、列「収穫量(t)」をグラデーションで塗りつぶします。

サンプルデータベース「平成23年度秋冬野菜収穫量.mdb」のデータ
サンプルデータベース「平成23年度秋冬野菜収穫量.mdb」のデータ

 クエリ条件の設定には2つの方法を使用します。1つはSQLステートメントを直接テキストボックスに入力して行う方法で、もう一つはTextBoxコントロールとドロップダウンリストを使って抽出条件を設定する方法です。

フォームのデザイン

 フォームには、C1TrueDBGridコントロールを2つと、Button、GroupBox、ComboBox、Label、TextBox、CheckBoxの各コントロールを配置します。

 C1TrueDBGridコントロールのデータベース連結は設計時に行います。

 使用するイベントハンドラは、フォームのLoad、ButtonコントロールのClick、CheckBoxコントロールのCheckedChangedです。

フォームのレイアウト
フォームのレイアウト

フォームの作成

 順番にフォームにコントロールを配置していきます。

最初のC1TrueDBGridコントロールのデザイン

 最初に、LabelとC1TrueDBGridコントロールをフォームに配置します。

 (1)C1TrueDBGridコントロールを配置したら、スマートタグから[データソースの選択]-[プロジェクトデータソースの追加]を選びます。

スマートタグから「データソースの選択-プロジェクトデータソースの追加」を選ぶ
スマートタグから「データソースの選択-プロジェクトデータソースの追加」を選ぶ

 (2)データベース構成ウィザードが起動しますので、「データベース」を選び「次へ」ボタンをクリックします。

 (3)使用するデータベースモデルの選択に移りますので、「データセット」を選び「次へ」ボタンをクリックします。

 (4)「新しい接続」ボタンをクリックします。「データソース」は「Microsoft SQL Serverデータベースファイル(SqlClient)」を選び、「データベースファイル名」は「平成23年度秋冬野菜収穫量_Data.mdf」を選びます。

 サーバのログオンはそのままWindows認証にして、「テスト接続」ボタンをクリックします。テスト接続に成功したら「OK」ボタンをクリックし、もう一度「OK」ボタンをクリックします。

 ウィザードに戻りますので、「次へ」ボタンをクリックします。

「データソース」は「Microsoft SQL Serverデータベースファイル(SqlClient」)を選び、
「データベースファイル名」は「平成23年度秋冬野菜収穫量_Data.mdf」を選ぶ
「データソース」は「Microsoft SQL Serverデータベースファイル(SqlClient」)を選び、「データベースファイル名」は「平成23年度秋冬野菜収穫量_Data.mdf」を選ぶ

 (5)プロジェクトにデータベースのコピーを置くかどうかを聞いてきますので、そのままOKボタンをクリックし、「次へ」ボタンをクリックします。

 (6)テーブル「収穫量一覧」をクリックし、「完了」ボタンをクリックします。

 フォームのC1TrueDBGridコントロールにデータベースファイルと同じ列名が表示されれば、連結完了です。

C1TrueDBGridコントロールにデータベースファイルと同じ列名が表示されれば連結完了
C1TrueDBGridコントロールにデータベースファイルと同じ列名が表示されれば連結完了

 (7)プロパティウィンドウの「AlternatingRows」プロパティをクリックし、「True」に変更します。

 グリッドが水色と白色で塗りつぶされます。

「AlternatingRows」プロパティをTrueにする
「AlternatingRows」プロパティをTrueにする

 (8)プロパティウィンドウの「EvenRowStyle」をクリックし、値欄の「...」ボタンをクリックします。スタイルエディタが起動しますので、「塗りつぶし」タブをクリックし、「背景色」に「GreenYellow」を選び、アルファチャンネルを「126」に設定します。

 そして、OKボタンを押して設定を反映させます。

スタイルエディタで「背景色」に「GreenYellow」を選び、アルファチャンネルを「126」に設定する
スタイルエディタで「背景色」に「GreenYellow」を選び、アルファチャンネルを「126」に設定する

 (9)プロパティウィンドウの「OddRowStyle」をクリックし、値欄の「...」ボタンをクリックします。スタイルエディタが起動しますので、「塗りつぶし」タブをクリックし、「背景色」に「DodgerBlue」を選び、アルファチャンネルを「126」に設定します。

 そして、OKボタンを押して設定を反映させます。

「背景色」に「DodgerBlue」を選び、アルファチャンネルを「126」に設定
「背景色」に「DodgerBlue」を選び、アルファチャンネルを「126」に設定

 以上で最初のC1TrueDBGridコントロールのデザインが出来上がりです。

 ここでプロジェクトを実行すると、データベースのデータが全件表示され、グリッドの行の色が互い違いに塗りつぶされます。

実行画面
実行画面

クエリ用入力コントロールの作成

 続いて、クエリ入力用コントロールを配置します。

 GroupBoxコントロールを2つ配置し、その中にTextBox、Button、Label、ComboBoxコントロールを配置します。

 2つのComboBoxコントロールは、DropDownStyleプロパティを「DropDownList」に設定し、Itemsプロパティを次のように設定します。

ComboBox1 ComboBox2
以上 全て
以下 秋冬だいこん
等しい 冬にんじん
未満 秋冬はくさい
より大きい 冬キャベツ
  秋冬ねぎ

 TextBoxコントロールTextBox1は、MultiLineプロパティをTrueにし、あらかじめ次のSQL文を入れておきます。

SELECT 収穫量一覧.ID, 収穫量一覧.地方名, 収穫量一覧.都道府県, 収穫量一覧.野菜名, 収穫量一覧.[収穫量(t)]
  FROM 収穫量一覧
 WHERE (((収穫量一覧.[収穫量(t)])>=50000));

 2つのButtonコントロールは、Clickイベントハンドラを作成しておきます。

作成したクエリ入力用コントロール
作成したクエリ入力用コントロール

クエリ結果表示用のC1TrueDBGridコントロールのデザイン

 クエリ結果表示用のC1TrueDBGridコントロールを作成します。データベースとの連結は、すでに作成されている「収穫量一覧BindingSource」を使用します。

 (1)フォームにC1TrueDBGridコントロールをドラッグアンドドロップします。スマートタグが表示されますので、[データソースの選択]-[収穫量一覧BindingSource]を選びます。

「データソースの選択-収穫量一覧BindingSource」を選ぶ
「データソースの選択-収穫量一覧BindingSource」を選ぶ

 (2)再度スマートタグを表示し、[VisualStyle]-[Office2007Blue]を選びます。これで、C1TrueDBGridコントロールはOffice2007Blueと同じような配色になります。

[VisualStyle]-[Office2007Blue]を選ぶ

「Columnスタイル」を選ぶ

 (3)C1TrueDBGridコントロールの列「収穫量(t)」をクリックします。「Columnタスク」というスマートタグが表示されます。ここには、列編集専用のタスクが組み込まれていますので、ここから「Columnスタイル」を選びます。 

(4)「Columnスタイル(収穫量(t))」というエディタが起動しますので、「塗りつぶし」タブをクリックし、「背景色」に「Orange」を、「背景色2」に「BlanchedAlmond」を選びます。そして、「グラデーションの方向」に「ForwardDiagonal」を選びます。

 これで、列「収穫量(t)」がオレンジのグラデーションで塗りつぶされます。

 このように、C1TrueDBGridコントロールは列単位で背景色を塗りつぶすことができます。

「Columnスタイル(収穫量(t))」エディタで背景色の塗りつぶしを設定する
「Columnスタイル(収穫量(t))」エディタで背景色の塗りつぶしを設定する

 (5)最後にCheckBoxコントロールを配置して、CheckedChangedイベントハンドラを作成します。

 これで、フォームのデザインは出来上がりです。ここでプログラムを実行すると、2つのC1TrueDBGridコントロールに、データベースのデータが同じように表示されます。

完成したフォームと実行結果
完成したフォームと実行結果

コードの作成

 フォームのデザインができたら、各イベントハンドラにコードを作成していきます。

 メインの処理は2つのButtonコントロールのClickイベントハンドラで、クエリ実行の処理を行います。

 C1TrueDBGridコントロールの重要な機能の一つとして、実行時にデータベースに対する変更を自動的に検出できる機能があります。例えば、実行時に操作対象のデータセットが変更された場合、自動的にそれに対応してグリッドの行と列を変更し、データを表示します。設計時に列のプロパティを特に定義しなくても、グリッドが自動的にフィールドレイアウトの変更に応答します。

 そこでこの機能を用いて、実行時にクエリーを実行し、結果セットをグリッドに表示する処理を実装します。実装はとても簡単で、クエリ文字列を作成し、数行のコードを書くだけです。

 C1TrueDBGridコントロールは2つ配置し、1つは常にデータベースデータを全件表示します。もう一つのC1TrueDBGridコントロールはクエリの結果セットを表示します。こうすることで、ユーザーは全件データを見ながら必要なデータ抽出を行うことができます。

フォームのLoadイベントハンドラの処理

 Loadイベントハンドラでは、グリッドの「ID」列の列幅を自動的に設定する処理と、ComboBoxコントロールのドロップダウンリストに、リスト項目の先頭の項目をセットする処理を記述します。

 列幅の自動設定は、列ごとに行います。まず、Splitsプロパティを使用して、操作対象のSplitオブジェクトを指定します。このグリッドではスプリットを使用していませんので、Splitオブジェクトは1つしかないため引数には(0,0)を指定します。

 そして、DisplayColumnsプロパティでC1DisplayColumnオブジェクトを指定します。サイズ変更をするのは最初の列なので、引数には列番号「0」を指定し、AllowSizingプロパティをTrueに設定します。これで列幅の変更が可能になります。続いて、AutoSizeメソッドを実行します。このメソッドが、列幅をデータの長さに合わせて設定してくれます。

Visual Basic
Imports System.Data.SqlClient
Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'TODO: このコード行はデータを '平成23年度秋冬野菜収穫量_DataDataSet.収穫量一覧' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
        Me.収穫量一覧TableAdapter.Fill(Me.平成23年度秋冬野菜収穫量_DataDataSet.収穫量一覧)

        '列「ID」のみ列幅を自動調節
        C1TrueDBGrid1.Splits(0, 0).DisplayColumns(0).AllowSizing = True
        C1TrueDBGrid1.Splits(0, 0).DisplayColumns(0).AutoSize()

        C1TrueDBGrid2.Splits(0, 0).DisplayColumns(0).AllowSizing = True
        C1TrueDBGrid2.Splits(0, 0).DisplayColumns(0).AutoSize()

        'ドロップダウンリストにリストの先頭項目を表示
        ComboBox1.SelectedIndex = 0
        ComboBox2.SelectedIndex = 0
    End Sub
C#
using System.Data.SqlClient;
namespace trueDB_cs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: このコード行はデータを '平成23年度秋冬野菜収穫量_DataDataSet.収穫量一覧' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
            this.収穫量一覧TableAdapter.Fill(this.平成23年度秋冬野菜収穫量_DataDataSet.収穫量一覧);
            
            //列「ID」のみ列幅を自動調節
            c1TrueDBGrid1.Splits[0, 0].DisplayColumns[0].AllowSizing = true;
            c1TrueDBGrid1.Splits[0, 0].DisplayColumns[0].AutoSize();

            c1TrueDBGrid2.Splits[0, 0].DisplayColumns[0].AllowSizing = true;
            c1TrueDBGrid2.Splits[0, 0].DisplayColumns[0].AutoSize();

            //ドロップダウンリストにリストの先頭項目を表示
            comboBox1.SelectedIndex = 0;
            comboBox2.SelectedIndex = 0;
        }
ID列のみ列幅がデータに合わせられる
ID列のみ列幅がデータに合わせられる

SQL文を直接入力するクエリ処理の作成

 次に、SQL文を直接入力してクエリを実行する処理を作成します。この処理は、Buttonコントロール「Button1」のClickイベントハンドラで行います。

 (1)TextBoxコントロールからSQL文を取得します。

 (2)SqlDataAdapterオブジェクトを作成します。操作対象のデータベースがSQL Serverの場合は、System.Data.SqlClient名前空間にあるSqlDataAdapterクラスを使用します。コンストラクタの引数は、クエリ文字列と接続文字列です。接続文字列は、収穫量一覧TableAdapterオブジェクトのConnectionプロパティから取得します。

 (3)DataSetオブジェクトを作成し、SqlDataAdapterクラスのFillメソッドを実行します。引数はDataSetオブジェクトへの参照とテーブル名です。ここでは、「クエリー結果」というテーブル名を使用します。これで、クエリが実行され結果セットがDataSetオブジェクトに格納されます。

 (4)「C1TrueDBGrid2」のDataSourceプロパティを空にし、ClearFieldsメソッドでフィールドをクリアして、DataSourceプロパティにDataSetオブジェクトのテーブル「クエリー結果」を設定します。

 これで、2つ目のC1TrueDBGridコントロールにクエリ結果が表示されます。

 (5)グリッドのデータが入れ替わりましたので、再度ID列の列幅を自動設定にし、列「収穫量(t)」のグラデーションをコードから設定します。列幅の自動設定はAutoSizeメソッドを実行します。

 列のグラデーションでの塗りつぶしは、C1DisplayColumnクラスの下層に位置するStyleクラスのメンバを使用します。

 列の指定は列幅の自動設定と同じようにSplitsプロパティとDisplayColumnsプロパティを使用しますが、操作対象の列の指定に列番号ではなく列見出しを使うこともできます。こちらの方が、どの列を操作するのかすぐに分かって便利です。

 あとは、GradientMode、BackColor、BackColor2プロパティを使用してグラデーションの2色と方向を設定します。

 プログラムを実行し、TextBoxコントロールに入力されているSQL文のまま「実行」ボタンをクリックすると、下のC1TrueDBGridコントロールにクエリ結果が表示されます。

プログラムの実行結果
プログラムの実行結果
Visual Basic
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

    'SQL文字列の作成とDataAdapterの作成
    Dim sqlStr As String = TextBox1.Text  '(1)
    Dim adapter As New SqlDataAdapter(sqlStr, Me.収穫量一覧TableAdapter.Connection)  '(2)


    'DataSetオブジェクトの作成
    Dim ds As DataSet = New DataSet()  '(3)

    ds.Clear()

    'クエリを実行し結果セットをC1TrueDBGrid2のDataSourceプロパティに設定
    Try
        adapter.Fill(ds, "クエリー結果")
        C1TrueDBGrid2.DataSource = Nothing  '(4)

        C1TrueDBGrid2.ClearFields()
        C1TrueDBGrid2.DataSource = ds.Tables("クエリー結果")
    Catch ex As Exception
        MessageBox.Show("SQL文のエラー")
    End Try

    '列「ID」のみ列幅を自動調節  (5)
    C1TrueDBGrid2.Splits(0, 0).DisplayColumns(0).AutoSize()

    'グラデーションの設定
    C1TrueDBGrid2.Splits(0).DisplayColumns("収穫量(t)").Style.GradientMode = C1.Win.C1TrueDBGrid.GradientModeEnum.ForwardDiagonal
    C1TrueDBGrid2.Splits(0).DisplayColumns("収穫量(t)").Style.BackColor = Color.Orange
    C1TrueDBGrid2.Splits(0).DisplayColumns("収穫量(t)").Style.BackColor2 = Color.BlanchedAlmond
End Sub
C#
private void button1_Click(object sender, EventArgs e)
{
    //SQL文字列の作成とDataAdapterの作成
    string sqlStr = textBox1.Text;  //(1)
    SqlDataAdapter adapter = new SqlDataAdapter(sqlStr, 収穫量一覧TableAdapter.Connection);  //(2)


    //DataSetオブジェクトの作成
    DataSet ds = new DataSet();  //(3)

    ds.Clear();

    //クエリを実行し結果セットをC1TrueDBGrid2のDataSourceプロパティに設定
    try{
        adapter.Fill(ds, "クエリー結果");
        c1TrueDBGrid2.DataSource = null;  //(4)

        c1TrueDBGrid2.ClearFields();
        c1TrueDBGrid2.DataSource = ds.Tables["クエリー結果"];
    }catch{
        MessageBox.Show("SQL文のエラー");
    }

    //列「ID」のみ列幅を自動調節  (5)

    c1TrueDBGrid2.Splits[0, 0].DisplayColumns[0].AutoSize();

    //グラデーションの設定
    c1TrueDBGrid2.Splits[0].DisplayColumns["収穫量(t)"].Style.GradientMode = C1.Win.C1TrueDBGrid.GradientModeEnum.ForwardDiagonal;
    c1TrueDBGrid2.Splits[0].DisplayColumns["収穫量(t)"].Style.BackColor = Color.Orange;
    c1TrueDBGrid2.Splits[0].DisplayColumns["収穫量(t)"].Style

TextBox、ComboBoxコントロールを使ったクエリ処理

 TextBox、ComboBoxコントロールを使用してクエリを実行します。クエリの条件は「収穫量」とし、テキストボックスに数値を入力してもらい、比較演算子と野菜名を選んで実行ボタンをクリックすると、クエリ文を作成して実行し結果セットをグリッドに表示します。

 TextBoxコントロールに入力があった場合のみ処理を実行し、テキストボックスの入力値と2つのドロップダウンリストの選択項目から、クエリ用のSQL文を作成します。

 クエリ文が作成できれば、前述のクエリ実行処理と同じ処理を行い、結果セットを「C1TrueDBGrid2」にセットします。

 そして、列「ID」の列幅調整と列「収穫量(t)」のグラデーション処理を実行します。

 また、取得したレコード数をグリッドのRowCountプロパティから取得し、Labelコントロールで表示します。

Visual Basic
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    Dim value As String = "", yasaimei As String = "", sqlStr As String = ""

    'SQL文字列の作成とDataAdapterの作成
    If TextBox2.Text <> "" Then
        Select Case ComboBox1.SelectedIndex
            Case 0
                value = ">=" & TextBox2.Text
            Case 1
                value = "<=" & TextBox2.Text
            Case 2
                value = "=" & TextBox2.Text
            Case 3
                value = "<" & TextBox2.Text
            Case 4
                value = ">" & TextBox2.Text
        End Select

        If ComboBox2.SelectedItem = "全て" Then
            sqlStr = "SELECT 収穫量一覧.ID, 収穫量一覧.地方名, 収穫量一覧.都道府県, 収穫量一覧.野菜名, " & _
                     "収穫量一覧.[収穫量(t)] FROM 収穫量一覧 WHERE (((収穫量一覧.[収穫量(t)])" & _
                     value & "));"
        Else
            yasaimei = " AND " & "((収穫量一覧.野菜名)='" & ComboBox2.SelectedItem & "'));"
            sqlStr = "SELECT 収穫量一覧.ID, 収穫量一覧.地方名, 収穫量一覧.都道府県, 収穫量一覧.野菜名, " & _
                     "収穫量一覧.[収穫量(t)] FROM 収穫量一覧 WHERE (((収穫量一覧.[収穫量(t)])" & _
                     value & ")" & yasaimei
        End If
        Dim adapter As New SqlClient.SqlDataAdapter(sqlStr, Me.収穫量一覧TableAdapter.Connection)

        'DataSetオブジェクトの作成
        Dim ds As DataSet = New DataSet()
        ds.Clear()

        'クエリを実行し結果セットをC1TrueDBGrid2のDataSourceプロパティに設定
        Try
            adapter.Fill(ds, "クエリー結果")
            C1TrueDBGrid2.DataSource = Nothing
            C1TrueDBGrid2.ClearFields()
            C1TrueDBGrid2.DataSource = ds.Tables("クエリー結果")
        Catch ex As Exception
            MessageBox.Show("SQL文のエラー")
        End Try

        '列「ID」のみ列幅を自動調節
        C1TrueDBGrid2.Splits(0, 0).DisplayColumns(0).AutoSize()

        Label3.Text = "抽出結果:合計" & C1TrueDBGrid2.RowCount & "件のデータを取得しました"

        'グラデーションの設定
        C1TrueDBGrid2.Splits(0).DisplayColumns("収穫量(t)").Style.GradientMode = C1.Win.C1TrueDBGrid.GradientModeEnum.ForwardDiagonal
        C1TrueDBGrid2.Splits(0).DisplayColumns("収穫量(t)").Style.BackColor = Color.Orange
        C1TrueDBGrid2.Splits(0).DisplayColumns("収穫量(t)").Style.BackColor2 = Color.BlanchedAlmond
   End If
End Sub
C#
private void button2_Click(object sender, EventArgs e)
{
    string value = "", yasaimei = "", sqlStr = "";

    //SQL文字列の作成とDataAdapterの作成
    if (textBox2.Text != "")
    {
        switch (comboBox1.SelectedIndex)
        {
            case 0:
                value = ">=" + textBox2.Text;
                break;
            case 1:
                value = "<=" + textBox2.Text;
                break;
            case 2:
                value = "=" + textBox2.Text;
                break;
            case 3:
                value = "<" + textBox2.Text;
                break;
            case 4:
                value = ">" + textBox2.Text;
                break;
        }


        if (comboBox2.SelectedItem.ToString() == "全て")
        {
            sqlStr = "SELECT 収穫量一覧.ID, 収穫量一覧.地方名, 収穫量一覧.都道府県, 収穫量一覧.野菜名, 収穫量一覧.[収穫量(t)] FROM 収穫量一覧 WHERE (((収穫量一覧.[収穫量(t)])" + value + "));";
        }
            else
        {
            yasaimei = " AND " + "((収穫量一覧.野菜名)='" + comboBox2.SelectedItem + "'));";
            sqlStr = "SELECT 収穫量一覧.ID, 収穫量一覧.地方名, 収穫量一覧.都道府県, 収穫量一覧.野菜名, 収穫量一覧.[収穫量(t)] FROM 収穫量一覧 WHERE (((収穫量一覧.[収穫量(t)])" + value + ")" + yasaimei;
        }
        SqlDataAdapter adapter = new SqlDataAdapter(sqlStr, 収穫量一覧TableAdapter.Connection);

        //DataSetオブジェクトの作成
        DataSet ds = new DataSet();
        ds.Clear();

        //クエリを実行し結果セットをC1TrueDBGrid2のDataSourceプロパティに設定
        try
        {
            adapter.Fill(ds, "クエリー結果");
            c1TrueDBGrid2.DataSource = null;
            c1TrueDBGrid2.ClearFields();
            c1TrueDBGrid2.DataSource = ds.Tables["クエリー結果"];
        }
        catch
        {
            MessageBox.Show("SQL文のエラー");
        }

        //列「ID」のみ列幅を自動調節
        c1TrueDBGrid2.Splits[0, 0].DisplayColumns[0].AutoSize();

        label3.Text = "抽出結果:合計" + c1TrueDBGrid2.RowCount + "件のデータを取得しました";

        //グラデーションの設定
        c1TrueDBGrid2.Splits[0].DisplayColumns["収穫量(t)"].Style.GradientMode = C1.Win.C1TrueDBGrid.GradientModeEnum.ForwardDiagonal;
        c1TrueDBGrid2.Splits[0].DisplayColumns["収穫量(t)"].Style.BackColor = Color.Orange;
        c1TrueDBGrid2.Splits[0].DisplayColumns["収穫量(t)"].Style.BackColor2 = Color.BlanchedAlmond;
    }
}

フォーム表示の切り替え処理

 最後に、グリッドの表示をフォーム表示に切り替える処理を作成します。これは、CheckBoxコントロールのCheckedChangedイベントハンドラで行います。チェックボックスにチェックが付くとフォーム表示に、チェックが外れると元のグリッド表示になるようにします。

 グリッドのフォーム表示は、C1TrueDBGridクラスのDataViewプロパティを使用します。設定値はDataViewEnum 列挙体のメンバです。このメンバの「Form」を設定すると、フォーム表示になります。「Normal」を設定すると元のグリッド表示に戻ります。

Visual Basic
Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged
    If sender.checked = True Then
        C1TrueDBGrid2.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Form
    Else
        C1TrueDBGrid2.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Normal
    End If
End Sub
C#
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if(checkBox1.Checked == true)
    {
        c1TrueDBGrid2.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Form;
    }
    else
    {
        c1TrueDBGrid2.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Normal;
    }
}
DataViewEnum列挙体のメンバ
メンバ 設定値
Normal 0 グリッドにはフラットファイルだけが表示され、階層ビューはサポートされません。
データソースが階層化データセットの場合、
グリッドにはマスターテーブルのデータだけが表示されます。
Inverted 1 行は水平に、列は垂直に表されます。
Form 2 データは簡単なデータ入力フォームで表示されます。
GroupBy 3 グループ化領域はグリッドの最上部に作成され、
この領域に置かれる列はすべてGroupedColumnコレクションに含まれます。
グループモードでは、AddおよびRemoveAtメソッドを使用して、
それぞれグリッド列を追加または削除できます。列を選択してドラッグし、
グループに入れたり、グループから出すことによって、
同じ操作を実行することもできます。
スタイルを指定してグループ化された行の表示をカスタマイズしたり、
グループ化された列の集計を自動的に計算できます。
グループの展開/折りたたみの状態も指定できます。
MultipleLines 4 グリッドには、複数ラインを使用して現在のグリッド領域に
すべてのフィールドが表示されます。
Hierarchical 5 グリッドではDataSetが階層形式で表示されます。
ツリー表示に類似したインターフェースを使用して、
階層レコードセットBandsを実行時に展開/折りたたむことができます。
MultipleLinesFixed 6 グリッドには、複数ラインを使用して
現在のグリッド領域にすべてのフィールドが表示されます。
サブ行の数は、一度設定すると変更されません。
サブ行の数はLinesPerRowプロパティを使用して設定します。

まとめ

 C1TrueDBGridコントロールは、大変多くの機能を持っているデータグリッドコントロールです。今回は、その機能のごく一部を利用したアプリケーションを作成しました。

 プログラム実行時にクエリを行う処理は、その結果セットのデータ表示に苦労しますが、C1TrueDBGridコントロールはすべて自動で行ってくれます。プログラマはクエリ用SQL文を作成することと、データオブジェクトへの接続とデータセットの作成をするだけで、あとはC1TrueDBGridコントロールがすべて行ってくれますから、プログラマの負担はぐっと軽くなり、開発工数も少なくて済みます。データベースブラウザの開発に苦労している方は、導入を検討してみてはいかがでしょうか。

 次回は、さらにC1TrueDBGridコントロールの機能を使ったアプリケーションを作成する予定です。

参考資料

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング