TrueDBGrid for WinForms 2016.01.20 更新 グレープシティ株式会社 TrueDBGrid for WinForms 目次 はじめに コンポーネントをプロジェクトに組み込む方法 コンポーネントのランタイムファイル 11-12 12 製品の概要 13 変更履歴 13 3.0Jの新機能 主な特長 クイックスタート 手順 1:C1TrueDBGrid アプリケーションの作成 13-16 17-18 19 19 手順 2:DataSet への C1TrueDBGrid の連結 19-23 手順 3:C1TrueDBGrid 設定のカスタマイズ 23-25 オブジェクトモデル 26 C1TrueDBGrid のオブジェクトとコレクション 26-28 C1TrueDBGrid クラス 28-29 C1TrueDBDropDown クラス 29 C1DataColumnCollection クラス 29 C1DataColumn オブジェクト C1DisplayColumnCollection クラス C1DisplayColumn クラス GroupedColumnCollection クラス SplitCollection クラス Split オブジェクト GridStyleCollection クラス 1 11 29-30 30 30 30 30-31 31 31 Style オブジェクト 31-32 ValueItems クラス 32 ValueItemCollection クラス 32 ValueItem クラス 33 PrintInfo クラス 33 PrintPreviewWinSettings クラス 33 HBar クラス 33 VBar クラス 33-34 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms GridLines クラス 34 GridBorders クラス 34 SelectedRowCollection クラス 34 SelectedColumnCollection クラス 34 オブジェクトとコレクションを使用する 34 コレクションを使用する 39-40 メンバを削除する 40 設計時のサポート オブジェクトモデルとプロパティへのアクセス方法を理解する グローバルなグリッドプロパティにアクセスする 40-42 43 43 43-44 スプリット固有のプロパティにアクセスする 44 列のプロパティにアクセスする 44 SplitCollection エディタを使用する スプリットのプロパティ C1DisplayColumnCollection エディタを使用する DisplayColumns のプロパティ 44-45 45-47 47 48-49 ValueItemCollection エディタを使用する 49-50 GridStyleCollection エディタを使用する 50-51 C1TrueDBGrid デザイナを使用する 51 C1TrueDBGrid デザイナへのアクセス 51-52 C1TrueDBGrid デザイナの要素 52-53 Splits のプロパティ 53-55 C1DataColumn のプロパティ 55-56 DisplayColumns のプロパティ 56-57 [C1TrueDBGrid タスク]メニュー [Column タスク]メニュー コンテキストメニュー 実行時の操作 移動とスクロール マウスナビゲーション操作 右端の列をクリックする 2 34-39 メンバを追加する Count プロパティを使用する 57-64 64-70 70-72 73 73 73 73-74 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms キーボードナビゲーション操作 行の境界での移動 75 スプリットの境界での移動 75-76 セル間の移動を制限する 76-77 選択と移動 77 列を選択する 77-78 列を移動する 78-79 実行時に列を移動する 列のソート 行を選択する セルの範囲を選択する サイズ変更 79-80 80 80-81 81 81 行をサイズ変更する 81-82 列をサイズ変更する 82 データベースの操作 82-83 データを編集する 83 新しいレコードを追加する 83 レコードを削除する グリッド エディタのカスタマイズ カスタム エディタの使用 その他のユーザー操作機能 データ連結 TrueDBGrid for WinForms をデータソースに連結する グリッドのレイアウトの保持 非連結列 83-84 84 84-85 85 86 86 86-87 87 非連結列を作成する 87-88 複数の非連結列を実装する 88-89 非連結列を更新する 89-90 非連結列を編集する 90 DataSource に連結せずにデータを表示する 90-92 非連結グリッドに新しい行を追加する 92-95 グリッドの外見をカスタマイズする 視覚スタイル 3 74-75 96 96-98 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms キャプション、ヘッダ、フッタ 列のキャプションとグリッドのキャプション 列のフッタ 複数行のヘッダおよびフッタ スプリットのキャプション 99 99-100 100 100-101 101-103 境界線と分割線 103-104 104 右端の列 104-105 使用されないデータ行 105-106 現在の行またはセルを強調表示する 行の高さとワードラップ 106-109 109 すべてのグリッド行の高さを調整する 109-110 セル内でのワードラップを有効にする 110-111 行の色を互い違いにする 水平方向および垂直方向の配置 データ表示テクニック テキストの書式設定 数値フィールドの書式設定 111 111-112 113 113 113 所定の数値オプション 113-114 カスタムの書式設定 114-115 組み込みの書式を使った入力の検証 115 入力マスクを使って書式設定する 115 カスタムイベントハンドラを使って書式設定する 115-118 ValueItems を使ってデータを自動的に変換する 118 ValueItems について 118 テキストからテキストへの変換を指定する 118-120 テキストから画像への変換を指定する 120-123 セルにテキストと画像を同時に表示する 123-126 ブール値をチェックボックスとして表示する 126-127 許容値をラジオボタンとして表示する 127-128 CellTips の状況依存ヘルプ 4 98-99 3D 表示とフラット表示 データがない領域 128-130 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms スクロールトラッキングとScrollTips データ依存型のセルマージ マージされたセルを書式設定する 列のグループ化 GroupIntervalEnum 列挙体による列のグループ化 130-135 135-136 136-137 137 Year で行をグループ化 137-140 値の先頭文字で行をグループ化 140-144 Date Value で行をグループ化(Outlook スタイル) 144-147 カスタム設定で行をグループ化 147-153 グループ化された行の展開/折りたたみ データの表示 153-156 156-157 階層化データの表示 157-158 階層化データのドロップダウン表示 158-159 フォームデータの表示 159-160 転置データの表示 データの複数ライン表示 複数ラインモードについて 複数ラインの固定モード オーナー描画セル DataSet 内のデータのフィルタ処理 160 160-161 161 161-162 162-166 166 手作業によるデータのフィルタリング 166-167 フィルタバーに入力促進文字列を追加する 167-168 複数の条件によるグリッドのフィルタリング 168-169 フィルタドロップダウンリストの追加 169-170 条件付きフィルタリング 170-172 カスタムフィルタ 172-173 スプリットの使用方法 スプリットとそのプロパティを参照する 5 130 174 174-176 C1TrueDBGrid と共通のスプリットのプロパティ 176 TrueDBGrid にないスプリットだけのプロパティ 176-177 スプリットのマトリックス表記 177 スプリットの作成および移動 177-179 スプリット内の列を使用する 179 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms スプリットをサイズ変更およびスケーリングする 179-182 ユーザーの操作を通してスプリットを作成およびサイズ変更する 182-184 垂直方向のスクロールとスプリットグループ 184-186 水平スクロールと固定列 186-188 複数のスプリットにまたがる移動 スタイルの使用方法 組み込みの名前付きスタイル 189 189-190 190-191 名前付きスタイルの継承 191-192 名前付きスタイルを変更する 192-193 スタイルプロパティを使用する 193 スタイルプロパティを直接変更する 193-194 名前付きスタイルと無名スタイル 194-195 195 例 1 195-196 例 2 196-197 例 3 197-198 例 4 198-199 例 5 199-200 例 6 200 例 7 200-201 例 8 201-202 例 9 202 例 10 セルにスタイルを適用する セルステータス値を指定する 202-203 203-204 204 ステータスに基づいてセルのスタイルを適用する 204-206 コンテンツに基づいてセルのスタイルを適用する 206-207 独自の条件に基づいてセルのスタイルを適用する 207-210 セルのスタイルの評価順序 210-211 画像をグリッドの要素に適用する 6 188 名前付きスタイルのデフォルト値 無名スタイルの継承 211 背景画像を表示する 211-215 前景画像を表示する 215 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms セルの編集テクニック 216 セルの編集時動作 216 セルの編集を開始する 216 色とワードラップ 216 変更ステータスを判定する 216 セルのコンテンツを決定する セルの編集を終了する 217 編集イベントを処理する 217 標準キー操作イベント 217-218 列の編集イベント 218-219 セルのコンテンツを一度のキー操作で変更する 219-220 テキストを使用する データ入力フィールドのサイズを制限する 長いフィールドにドロップダウン編集コントロールを提供する テキストを選択して置き換える 入力マスク 列の入力マスクを指定する 220-221 221 221-222 222 222 222-223 書式設定用の入力マスクを使用する 223 マスクされた入力の更新方法を制御する 223 セル内ボタン 223 セル内ボタンを有効にする 223-224 セルをコマンドボタンとしてレンダリングする 224-225 セル内ボタンのクリックを検出する セル内ボタンのビットマップをカスタマイズする ドロップダウンコントロール 組み込みコンボボックスを使用する 組み込みコンボボックスの選択を検出する C1TrueDBDropDown コントロールを使用する C1TrueDBDropDown を使ってデータを自動的に変換する 任意のドロップダウンコントロールを使用する 組み込み列ボタンを使用する チュートリアル 7 216-217 225 225-226 226 226-227 227 227-228 228 228-229 229 230 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms チュートリアル1:C1TrueDBGrid を DataSet に連結する 230-234 チュートリアル2:C1TrueDBGrid で SQL クエリーの結果を使用する 234-237 チュートリアル3: 複数の C1TrueDBGrid コントロールをリンクする 237-240 チュートリアル4: コードや他の連結コントロールと対話する 240-245 チュートリアル5: ブックマークを使って複数の行を選択する 245-248 チュートリアル6: 連結グリッド内で非連結列を定義する 248-250 チュートリアル7: 組み込みコンボを使って変換データを表示する 250-251 チュートリアル8: ドロップダウンコントロールをグリッドセルに結び付ける 251-253 チュートリアル9: 任意のドロップダウンコントロールをグリッドセルに結び付ける 253-256 チュートリアル10: セル内ビットマップを使ってユーザーインタフェースを強化する 256-258 チュートリアル11: スタイルを使って関連データを強調表示する 258-262 チュートリアル12: 行の色を互い違いに表示する 262-263 チュートリアル13:C1TrueDBGridでのドラッグ&ドロップ操作の実装 263-270 チュートリアル14: スクロールしない固定列を持つグリッドを作成する 270-272 チュートリアル15: PrintInfo および印刷プレビュー 272-275 チュートリアル16: 階層表示 275-276 チュートリアル17: グループ化表示 276-277 チュートリアル18: 値の変換 277-278 チュートリアル19: 範囲選択 278-280 チュートリアル20: 複数のデータビュー 280-284 チュートリアル21: フィルタバー 284-285 チュートリアル22: 境界線、スクロールトラッキング、スクロールヒント 285-294 タスク別ヘルプ 行に関するタスク 295 295-297 新しい行を追加する 297-299 行を選択する 299-300 グリッド内で選択されている行の値にアクセスする 300-301 行の背景色を設定する 301-303 個々の行の高さを設定する 303-304 選択行を強調表示する 304-307 特定の条件に基づいて行を書式設定する 8 295 AddNew 行に移動する ソートやフィルタリング後に DataRow を取得する 307 307-310 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms フッターに列の合計を表示する 列に関するタスク 311 特定の列の編集を制限する 311-312 列内のエントリを検索する 312-316 列にグラデーションをかける 316-320 列のキャプションの高さを設定する 320-322 列の順序を変更する 322-323 列のソートを無効にする 323-324 列のフォントスタイルを設定する 324-328 列幅を拡大または縮小する 328-330 列ヘッダに画像を配置する 330-333 列をフリーズする 333-335 レコードセレクタ列を非表示にする 335-336 列ヘッダを整列する 336-337 列に日付と時刻を表示する 337-338 セルに関するタスク 338 指定したセルの編集を無効にする 338-339 選択したセルの列番号および行番号を取得する 339-340 選択された強調表示を無効にする 340-341 データのエクスポート 341-342 Excel にエクスポートする 342-343 HTML にエクスポートする 343-344 PDF にエクスポートする 344-345 RTF にエクスポートする 345-346 文字区切りテキストにエクスポートする 346-347 有効なすべてのファイルタイプにエクスポートする 347-348 その他 ConnectionString を変更する DataSource リセット時にグリッドのレイアウトを維持する FetchCellStyle イベントを使用して列のスタイルを設定する。 階層データビューで、グリッドの折りたたみを禁止する カスタムのエラーチェックを追加する グリッドのレイアウトを保存する 9 310-311 348 348-352 352 352-353 353 353-355 355 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 10 コードによるフォーカスを移動する 355-356 現在の列と行の表示 356-358 プログラムを使って編集モードに入る 358-359 フィルタ言語を変更する 359-360 カスタム印刷プレビューの作成 360-364 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms はじめに TrueDBGrid for WinForms は堅牢性が高く使いやすい .NET のグリッドコントロールセットです。複雑な連結や非連結のグ リッドアプリケーションをすばやく作成できます。TrueDBGrid for WinForms の強みはデータ連結にあります。ADO.NET マ ネージドデータベースインタフェースを使用して、Excel のような分割ビューや組み込みの階層連結、エンドユーザーの生産性 を向上するグループ化などの機能を提供します。開発者にとっても使いやすく、コントロールは Microsoft 仕様に基づいてい るので Microsoft .NET のオブジェクトやコレクションモデルに慣れている開発者であれば問題なく TrueDBGrid for WinForms を使いこなしていただけるでしょう。TrueDBGrid コントロールの .Net 4 ビルドを使用する Windows フォームアプ リケーションのターゲットフレームワークは .NET Framework 4 Client Profile となります。 本格的なグリッドコントロールのC1TrueDBGridコントロールと複数の列を持つグリッド列用ドロップダウンリストボックス のC1TrueDBDropDown, コントロールをそなえ、データアクセス、データ表示(分割、グループ化、フィルタリングおよびカスタ ムナビゲーションなど)、ユーザーインタフェース機能(Office 2007 のようなスタイルや組み込みスタイルなど)な ど、TrueDBGrid for WinForms は数多くの高度な機能を用意しており、直感的で信頼性が高いプロレベルのグリッドアプリ ケーションを構築できます。 コンポーネントをプロジェクトに組み込む方法 コンポーネントの組み込み Visual Studio では、ツールボックスにコンポーネントを追加しただけでは、プロジェクトにコンポーネントを追加したことにはな りません。プロジェクトの参照設定へ追加された時点でコンポーネントが組み込まれます。 以下のいずれかの操作を行うとプロジェクトへコンポーネントが組み込まれます。 1. フォームにコンポーネントを配置する 2. ソリューションエクスプローラ上で参照の追加を行う プロジェクトに組み込まれているコンポーネントの一覧は、ソリューションエクスプローラで確認できます。また、各コンポーネン トが使用している DLL もソリューションエクスプローラに登録される場合があります。詳細については、Visual Studio の製品ヘ ルプを参照してください。 本製品で使用しているコンポーネントの一覧を以下に示します。 ファイル 内容 C1.Win.C1TrueDBGrid.2.dll 本体アセンブリ C1.Win.C1TrueDBGrid.4.dll 本体アセンブリ(※) C1.Win.C1TrueDBGrid.4.Design.dll デザイナアセンブリ(※) ※ .NET Framework 4 以上でご利用いただけます。 フォームにコンポーネントを配置する方法 以下に、C1TrueDBGrid コントロールをツールボックスに追加し、フォームに配置する方法を示します。これにより、コンポー ネントがプロジェクトに組み込まれます。 配置手順 1. [ツール]メニューから[ツールボックス アイテムの選択]を選択します。 2. [ツールボックス アイテムの選択]ダイアログの「.NET Framework コンポーネント」タブを選択します。 3. 使用するコンポーネントのチェックボックスを ON にして〈OK〉ボタンをクリックしてください。ツールボックスに指定したコ ントロールのアイコンが表示されます。 11 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 4. ツールボックスから指定したコントロールのアイコンを選択してフォームに配置します。ソリューションエクスプローラの 参照設定に指定したコントロールの名前空間が追加されます。 コンポーネントのランタイムファイル TrueDBGrid for WinForms のランタイムファイルは、 C:\Program Files\ComponentOne\Studio for WinForms\bin\ フォルダにインストールされる次のファイルです。 ファイル 内容 C1.Win.C1TrueDBGrid.2.dll 本体アセンブリ C1.Win.C1TrueDBGrid.4.dll 本体アセンブリ(※) ※ .NET Framework 4 以上でご利用いただけます。 注意: 注意:本製品に含まれているファイルのうち、上記以外のファイルは配布できません。 12 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 製品の概要 変更履歴 3.0Jの新機能 の新機能 新機能の概要 今バージョンで追加された主な機能は次のとおりです。 フィルタバーが強化されました。入力促進文字列をフィルタバーに追加できます。 C1TrueDBGrid デザイナが改善され、任意の場所に列を挿入できるようになりました。 非連結グリッドに関するメンバが追加され、柔軟性が向上しました。 GroupBy モードが改善されました。サブ行を展開/折りたたむことができます。 MultipleLinesFixed DataView が更新され、複数行のグリッドをより柔軟にレイアウトできます。 転置ビューでもセルをマージできるようになりました。 新しいクラスメンバが追加されました。 新機能の詳細 全般的な機能強化 以下に、今バージョンで強化されたいくつかの機能について解説します。 ButtonText プロパティを使用して BackColor プロパティまたは BackgroundImage プロパティをセルと設定する と、BackColor または BackgroundImageがレンダリングされます。 C1DataColumn オブジェクトに ImeMode プロパティが追加されました。 このプロパティで、この列の編集に使用される IME (Input Method Editor) モードを指定します。IME は、漢字などの複 雑な文字や記号を標準キーボードで入力できるようにするプログラムです。 新しいメソッド SetActiveCell このメソッドで、行と列を一度に設定できます。 フィルタバーの強化点 グリッドのフィルタバーに入力促進文字列を含める機能が追加されました。 FilterWatermark プロパティで、空のフィルタバーセルのテキストをレンダリングできます。たとえば次の画像では、各 列のキャプションがフィルタバーの中で繰り返されています。 テキストがフィルタバーに入力されると、FilterWatermark テキストが置換されます。FilterWatermark プロパティに 関する詳細は、「フィルタバーに入力促進文字列を追加する」を参照してください。 グリッドのフィルタバーの入力促進文字列を書式設定する機能が追加されました。 FilterWatermarkStyle プロパティで、FilterWatermark のスタイルを設定できます。 デザイナの強化点 C1TrueDBGrid デザイナ デザイナで列を挿入できる機能が追加されました。 これまでは C1TrueDBGrid デザイナ に追加された列を持つグリッドを追加できるのみでしたが、グリッド内の任意の列 13 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms を挿入できます。 C1TrueDBGrid デザイナ に関する詳細は、C1TrueDBGrid デザイナを使用する デザイナを使用するを参照してください。 GroupBy モードの強化点 オーバーライドが新しく追加されました。ExpandGroupRow メソッド(Int32, Boolean) これにより、グループ化されたサブ行の展開を制御できます。インデックスに-1を渡すとすべての行とオプションですべ てのサブ行が展開されます。 CollapseGroupRow メソッドがアップデートされました。インデックスに -1 をとります。-1 を渡すと、すべての行が折り たたまれます。 グループ化された行の展開と折りたたみに関する詳細は、グループ化された行の展開/折りたたみ グループ化された行の展開/折りたたみを参照してくださ い。 非連結グリッドの強化点 メンバが2つ新しく追加され、非連結グリッド使用時の柔軟性が向上しました。 NewRow メソッドが追加されました。このメソッドは、グリッドの非連結スキーマと互換性のある DataRow を返します。 Rows コレクションが追加されました。このプロパティは、非連結グリッドの DataRowCollection を取得します。 詳細は非連結グリッドに新しい行を追加する 非連結グリッドに新しい行を追加するトピックを参照してください。 MultipleLines とMultipleLinesFixed DataView の強化点 DataViewEnum.MultipleLinesFixedDataView の要素が変わり、複数行グリッドのレイアウトの柔軟性が向上しまし た。詳細は、「複数ラインの固定モード 複数ラインの固定モード」トピックを参照してください。 DataViewEnum.MultipleLinesFixedDataView の行の幅は、グリッドの幅に拘束されなくなりました。列幅の合計が グリッドのクライアント領域の幅より大きいと、水平方向にスクロールバーが表示されます。 Merge プロパティを設定すると、左端の列が行の高さまで延長できます。たとえば次の画像では、ProductID列が行 まで伸びています。 14 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 注意 注意:マージのプロパティは、グリッド内の左端の列に対してのみ適用できます。 MultiLineExtendColumns メソッドが追加されました。このメソッドは、サブ行の最終列の幅を調整し、もっとも幅の広 いサブ行に合わせます。 通常、最終列は次のようになります。 MultiLineExtendColumns メソッドが使用されている場合は、最終列は次のようになる場合があります。 Inverted DataView の強化点 DataViewEnum.InvertedDataView でもセルのマージがサポートされました。たとえば次の画像では CatagoryID 列 がマージされています。 15 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 新しいクラスメンバ 次は、TrueDBGrid for WinForms に追加されたメンバです。 クラス メンバ 説明 C1DataColumn FilterWatermark プロパティ このプロパティは、空のフィルタバーセルのテキストをレンダリングするため に使用します。 C1DataColumn ImeMode プロパティ この列を編集するために使用する IME (Input Method Editor) モードを指定 します。 C1TrueDBGrid FilterWatermarkStyle プロ パティ FilterWatermark の外観を制御する Style オブジェクトを取得または設定しま す。 C1TrueDBGrid SetActiveCell メソッド このメソッドは、行と列を一度に設定します。 C1TrueDBGrid MultiLineExtendColumns メソッド このメソッドは、サブ行の最終列の幅を調整して、もっとも幅の広いサブ行に 合わせます。 C1TrueDBGrid NewRow メソッド このメソッドは、グリッドの非連結スキーマと互換性のある DataRow を返しま す。 C1TrueDBGrid Rows プロパティ 非連結グリッドの DataRowCollection を取得します。 Split FilterWatermarkStyle プロ パティ FilterWatermark の外観を制御する Style オブジェクトを取得または設定しま す。 16 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 主な特長 TrueDBGrid for WinFormsでは、多数の詳細なデータアクセス、データプレゼンテーション、ユーザーインターフェースなど の機能が用意されてあり開発者は直感でプロフェッショナルなアプリケーションを作成できます。 広範囲なデザイン時サポート スマートタグ、機能豊富なエディタなどの設計時機能でほとんどあるいは全くコードを書く必要はなく、直観的にグリッド アプリケーションを作成できます。詳細については、 設計時のサポート 設計時のサポートを参照できます。 複数のデータレイアウト GroupBy ビューまたは、標準の Microsoft Outlook スタイルのグループ 化、Heirarchical、Form、Inverted、MultipleLines、MultipleLinesFixed ビューを使用して最も便利な形式でデー タを表示させます。 水平・垂直分割 Excel に似た分割機能でグリッドを水平、垂直または、両方の方向に分割することが可能です。また、分割した部分が 個々にスクロールするか、同時にスクロールするか、スクロール方法を制御できます。 ドロップダウンオブジェクトの対応 データ入力のために、マルチカラムコントロール(C1TrueDBDropDown コントロール)、コンボボックス、マルチライン テキストエディタなど多数のドロップダウンオブジェクトを提供します。詳細については、ドロップダウンコントロール ドロップダウンコントロール を参 照できます。なお、サードパーティコントロールも使用可能です。 複数のエクスポートオプションと強力な印刷オプション 複数のエクスポートオプションと強力な印刷オプションinsdind グリッドを、文字区切り、エクセル(XLS および XLSX)、PDF、HTML、RTFなど多数の形式でエクスポートすることが可能 です。詳細については、データのエクスポート データのエクスポートを参照できます。ズーム、ウィンドウに合わせた幅の調整、ページングの 設定、プレビュー等の印刷機能を制御できます。 注意: 注意:C1TrueDBGrid の印刷とエクスポート機能が内部的に Report for Windows Forms のアセンブリを使用します ので、参照に関するエラーが出る場合、Report for Windows Forms アセンブリ((C1.Win.C1Report と C1.C1Report))への参照を追加する必要がある可能性があります。 Office 2007・・2010形式の視覚スタイル 形式の視覚スタイル C1TrueDBGridでは、Office2007、2010のスタイルに似た視覚スタイルが用意されています。VisualStyle プロパティ を使用して容易に視覚スタイルを設定することが可能です。詳細については、視覚スタイル 視覚スタイルを参照できます。 データ連結 TrueDBGrid for WinForms では、コードを記述しなくても、いずれかの.Net データソースに連結でき、数秒でナビ ゲーションできるデータベースブラウザを作成できます。詳細については、データ連結 データ連結 を参照できます。 Microsoft の仕様に準拠した設計 TrueDBGrid for WinForms は Microsoft の仕様に従って設計された .NET オブジェクトであるため、Microsoft .Net オブジェクトとコレクションモデルの知識のある方は問題なく使用できます。 強化されたキーボードナビゲーション プロパティを1つ設定するだけで、Enter キーが押されたときの次のセルの相対位置を制御できます。詳細について は、移動とスクロール 移動とスクロール を参照できます 。 高度なスクロール機能 グリッド上のスクロールバーの位置が容易に取得可能です。レコードのスクロール時に、垂直スクロールバーのサム に、詳細をポップアップ表示させることができます。詳細については、スクロールトラッキングと スクロールトラッキングとScrollTips と チュートリ アル アル22: 境界線、スクロールトラッキング、スクロールヒント を参照できます。 セルの セルの2D・・3D表示 表示 仕様に応じて、2次元、3次元または、両方の組み合わせを使ってセルを表示できます。詳細については、3D 表示とフ ラット表示 を参照できます。 境界線のスタイル セル境界線の外観、サイズ、色、種類などをカスタマイズすることが可能です。詳細については、境界線と分割線 境界線と分割線 を参 照できます。 Excel と Word に似たスタイル 階層的なスタイルオブジェクトを使ってグリッドの外見をフォント、色、画像等の書式設定でカスタマイズすることが出来 ます。 行の色を互い違いにする 17 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 偶数行と奇数行の背景色を個別に設定でき、グリッドをたいへん読みやすく表示できます。詳細情報については行の 行の 色を互い違いにする を参照できます。 セル内オブジェクト グリッドのデータ表示と編集を行うために、ビットマップ、コマンドボタン、チェックボックス、ラジオボタンを含め、さまざま なセル内オブジェクトを使うことができます。詳細情報については、セル内ボタン セル内ボタン を参照できます。 自動データ変換 コードを記述しなくても、データベースにある値を自動的にテキストまたはグラフィックに変換できます。たとえば、数字 コードを文字やビットマップとしてレンダリングできます。 詳細情報については、ValueItems を使ってデータを自動的 に変換する を参照できます。 データ依存型の表示 各セルのコンテンツに基づいてセルごとに表示スタイルを変更できます。たとえば、負の数を赤色で表示したり、特定 の部分文字列を含むフィールドを太字で表示することができます。詳細情報については、セルにスタイルを適用する セルにスタイルを適用する を 参照できます。 入力マスク 実行時データ入力処理の簡素化とエンドユーザーによるデータ入力エラーの減少のため、列に入力テンプレートを使 用することが出来ます。詳細情報については、入力マスク 入力マスク を参照できます。 フィルタバー 列ヘッダーの下にある特殊なデータ入力行[フィルターバー]を使ってインクリメンタル検索やレコードセットフィルタリン グなどエンドユーザーによる独自の操作を実装できます。詳細情報については、DataSet 内のデータのフィルタ処理 を参照できます。 非連結グリッドと列 非連結グリッドを簡単に作成することが出来ます。連結グリッドに非連結グリッドを追加することも可能です。詳細情報 については、非連結列 非連結列、DataSource に連結せずにデータを表示する を参照できます。 実行時のセルチップ セルチップを使ってエンドユーザーに状況依存ヘルプを提供できます。詳細情報については、CellTips の状況依存ヘ ルプ を参照できます。 列の固定(スクロールしない列) グリッドの列をフリーズして、グリッド内の任意の位置(左端 左端、右端 右端、中央 中央)に、スクロールしない列を作成できます。 ス プリットを使って固定列を作成するのも簡単です。詳細情報については、列をフリーズする 列をフリーズする を参照できます。 Excel 方式のセル選択 一つの行や列を選択するだけではなく、セルの任意の範囲を選択することも出来ます。詳細情報については、移動と 移動と スクロール を参照できます。 列幅の自動調整 水平方向にグリッドのサイズを変更したとき、データを表示するためにそれに比例して列をリサイズさせることができま す。詳細情報については、サイズ変更 サイズ変更 を参照できます。 隣接する同じ値のセルのマージ 指定した列以降で隣接する同じ値のセルをマージし、単一の編集不可能なセルを形成するか、またはセル値を個々に 表示するかを指定できます。詳細については、データ依存型のセルマージ データ依存型のセルマージ を参照できます。 データ入力の簡素化 AutoDropDown と AutoCompletion プロパティで入力に必要なキーストロークの数を削減できます。 豊富なオブジェクトモデル C1TrueDBGrid では、オブジェクトモデルを簡素化するには、2つの個別な列オブジェクトが提供されていま す。C1DataColumn オブジェクトでは、データとデータ処理に関するすべてのプロパティが含まれていま す。C1DisplayColumn オブジェクトでは、列表示に関するすべてのプロパティが含まれています。詳細については オ ブジェクトモデル を参照できます。 その他 Enterキーの動作のカスタマイズ、階層化されたドロップダウングリッド、列オブジェクトの Tag プロパティ、さまざまな 印刷機能の強化などがあります。 18 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms クイックスタート このクイックスタートでは、C1TrueDBGrid アプリケーションの作成、データソースへのグリッドの連結、グリッドの外観と動作 のカスタマイズを手順ごとに説明します。C1TrueDBGrid を使用して、強力なデータベースアプリケーションを簡単に作成でき ます。 このクイックスタートでは、Access データベースの TDBGDemo.mdb を使用しますが、これはデフォルトで C:\Program Files\ComponentOne\Studio for WinForms\Data にインストールされます。ただしこのチュートリアルでは、フルパス名で はなく簡潔にファイル名だけで呼ぶこととします。 手順 1::C1TrueDBGrid アプリケーションの作成 この手順では、フォームに C1TrueDBGrid コントロールを追加し、単純なグリッドアプリケーションを作成します。次の手順を 実行します。 1. 新しい .NET プロジェクトを作成します。 2. ツールボックスを開き、C1TrueDBGrid アイコン をダブルクリックします。グリッドがフォームに追加 され、C1TrueDBGrid タスク タスクメニューが表示されます。 3. C1TrueDBGrid タスク タスクメニューから、親コンテナにドッキング 親コンテナにドッキングをクリックします。C1TrueDBGrid タスク タスクメニューにアクセ スする方法については、C1TrueDBGrid Tasks Menuを参照してください。 これで、単純なグリッドアプリケーションが作成されました。次の手順では、C1TrueDBGrid コントロールをデータソースに連結 する方法について説明します。 手順 2::DataSet への C1TrueDBGrid の連結 この手順では、 、C1TrueDBGrid コントロールを DataSet に連結する方法について説明します。また、True DBGrid の基本的なプロ パティについて説明し、グリッドの実行時の機能を確認します。次の手順を実行します。 1. C1TrueDBGrid のスマートタグをクリックしてC1TrueDBGrid タスク タスクメニューを開きます。データソースの選択 データソースの選択ドロップダウン矢 印を選択し、プロジェクトデータソースの追加 プロジェクトデータソースの追加をクリックします。 19 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 2. データソース構成ウィザードが表示され、データベース データベースが選択されています。次へ 次へをクリックします。 3. データベースを検索して接続するために、新しい接続 新しい接続 ボタンをクリックします。 20 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 4. 参照 ボタンをクリックし、C:\Program Files\ComponentOne\Studio for WinForms\Data ディレクトリにある TDBGDemo.mdb を見つけます。これを選択し、開く 開くをクリックします。 5. 接続のテスト 接続のテストボタンをクリックし、データベースまたはサーバーに正しく接続されていることを確認して、OKをクリックします。 データ接続ドロップダウンリストに新しい文字列が表示されます。 6. 次へ 次へボタンをクリックして続行します。データファイルをプロジェクトに追加して接続文字列を修正するかどうかを確認するダイ アログボックスが表示されます。いいえ いいえをクリックします。 7. 次のウィンドウでは、デフォルトで次の名前で接続を保存する 次の名前で接続を保存するチェックボックスがオンになっており、テキストボックスに自動的 に名前が入力されています。次へ 次へをクリックして続行します。 21 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 8. データベースオブジェクトの選択 データベースオブジェクトの選択ウィンドウで、データセットに必要なテーブルとフィールドを選択します。Composer テーブ ルを選択します。 データセット名 データセット名テキストボックスに、データセットのデフォルト名が表示されます。 9. 完了 完了をクリックしてウィザードを終了します。これで、フォームに DataSet、 、BindingSource、および TableAdapter が表示さ れます。 22 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 10. フォームをダブルクリックします。Visual Studio が Form_Load イベントに次のコードを追加していることがわかります。 Visual Basic コードの書き方 Visual Basic Me.ComposerTableAdapter.Fill(Me.DsComposer.Composer) C# コードの書き方 C# this.composerTableAdapter.Fill(this.DsComposer.Composer); このトピックの作業結果 Composers テーブルのデータがグリッド内に反映されています。 C1TrueDBGrid は、 、DataSet からデータベーススキーマ情報を取得し、自動的に自分自身を設定して、データベーステーブルに含ま れるすべてのフィールドを表示します。デフォルトの列ヘッダーとして、フィールド名が使用されることに注意してください。 これで、C1TrueDBGrid コントロールが DataSet に正しく連結されました。次のセクションでは、C1TrueDBGrid コントロールの外観 と動作の設定をカスタマイズします。 手順 3::C1TrueDBGrid 設定のカスタマイズ 前の手順では、 、C1TrueDBGrid をプロジェクトに追加し、グリッドを設定し、そのグリッドをデータソースに連結しました。この手 順では、グリッドの外観と動作の設定をカスタマイズします。次の手順を実行します。 1. デザインビュー デザインビューに切り替えて、C1TrueDBGrid1 のスマートタグをクリックし、C1TrueDBGrid タスク タスクメニューを開きま す。 2. C1TrueDBGrid タスク タスクメニューで、次のプロパティを設定します。 Caption プロパティをComposersに設定して、グリッドにキャプションを追加します。 追加を有効にする 追加を有効にするチェックボックスと編集を有効にする 編集を有効にするチェックボックスを選択して AllowAddNew プロパティ と AllowUpdate プロパティを True に設定し、グリッドを編集できるようにします。 行の色を互い違いにする 行の色を互い違いにするチェックボックスを選択して、 AlternatingRows プロパティを True に設定します。 VisualStyle プロパティを Office2007Blue に設定して、グリッドの外観を設定します。 23 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 3. プロパティウィンドウで、EvenRowStyle.BackColor プロパティを LightSteelBlue に設定します。 このトピックの作業結果 これで、C1TrueDBGrid のカスタマイズが完了しました。グリッドの外観が変更され、グリッド内のデータを追加および編集で きるようになりました。 24 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms これで C1TrueDBGrid のクイックスタートは終了です。コードを1行も記述することなく、TrueDBGrid for WinForms アプリ ケーションを作成し、グリッドをデータソースに連結し、グリッドの外観と動作の設定を変更できました。 25 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms オブジェクトモデル TrueDBGrid for WinForms は、最新の .NET 技術を使って開発されています。TrueDBGrid for WinForms コントロールと そのプログラム可能なコンポーネントは、すべて Microsoft の仕様に従って設計された .NET オブジェクトです。すでに Microsoft .NET のオブジェクトおよびコレクションのモデルに慣れている場合は、C1TrueDBGrid も問題なく使用できます。 はじめて .NET を使用する場合は、オブジェクトとコレクションを使用する オブジェクトとコレクションを使用する, をお読みください。この項では、C1TrueDBGrid オブ ジェクトをコード内で操作する方法について説明しています。各オブジェクトは、それぞれ異なるタスクを実行するために設計さ れていますが、それらを操作する方法はすべて同じです。これらに共通するプログラムの構成を理解していれば、簡単に使用 したり、理解することができます。 経験の度合いに関係なく、以下の項をお読みください。これらの項では、C1TrueDBGrid のすべてのオブジェクトとコレクショ ンについて簡単に説明しています。 C1TrueDBGrid のオブジェクトとコレクション TrueDBGrid for WinForms のオブジェクトモデルは、次のような要素からなるリッチなオブジェクト構造を提供します。 26 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms TrueDBGrid for WinForms には、洗練されたデータベースアプリケーションを開発できるように、TrueDBGrid for WinForms には、豊富なプロパティ、メソッド、およびイベントが用意されています。C1TrueDBGrid のオブジェクトモデルを適 用すれば、このように大きな機能セットも簡単に使いこなすことができます。 列などのビジュアルなエンティティを参照するオブジェクトやコレクションは、設計時または実行時にカスタマイズできます。配 列やブックマークなどの抽象的なエンティティを参照するオブジェクトやコレクションは、実行時にコード内でのみ利用できま す。 .NET のツールボックスから、次の2つのコントロールをプロジェクトに追加できます。 コントロール 説明 C1TrueDBGrid True DBGrid for WinForms 本体コンポーネント C1TrueDBDropDown True DBGrid for WinForms のドロップダウンボックスコンポーネント C1TrueDBGrid の名前空間には、次のオブジェクトの定義も含まれます。 27 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms オブジェクト 説明 C1DataColumn グリッド内のデータ列を表します。 C1DisplayColumn スプリットに対するデータ列を表します。 GridLines グリッド内のアイテムを分けるグリッド線を表します。 HBar 水平スクロールバーおよびそのプロパティを表します。 PrintPreviewWinSettings 印刷プレビューウィンドウおよびそのプロパティをカプセル化します。 PrintInfo ページ設定と印刷ジョブ設定をカプセル化します。 Split 一体となってスクロールする隣接する行グループを表します。 Style フォント、色、画像、および書式設定情報をカプセル化します。 ValueItems Values コレクションおよび ValueItem のプロパティの両方をカプセル化します。 ValueItem 列の有効な入力値を表します。オプションで変換を行います。 VBar 垂直スクロールバーおよびそのプロパティを表します。 コレクションは、グリッド列やスタイルなど、同種のデータアイテムをグループ化するためのオブジェクトです。一般に、 C1TrueDBGrid 内の同種のアイテムは、コレクションとして実装されています。コレクションはオブジェクトなので、他のオブ ジェクトと同様にコード内で操作できます。C1TrueDBGrid では、次のコレクションが公開されています。 コレクション 説明 C1DataColumnCollection グリッド内の0個以上の C1DataColumn オブジェクトを保持します。 C1DisplayColumnCollection グリッド内の0個以上の C1DisplayColumn オブジェクトを保持します。 GroupedColumnCollection グループ化領域内の0個以上の C1DataColumn オブジェクトを保持します。 SelectedRowCollection 0個以上の選択された行のブックマークを保持します。 SelectedColumnCollection 0個以上の選択された行のブックマークを保持します。 SplitCollection グリッド内の0個以上の Split オブジェクトを保持します。 GridStyleCollection グリッドに含まれる、組み込みおよびユーザー定義の Style オブジェクトを保持 します。 ValueItemCollection 列の0個以上のValueItem オブジェクトを保持します。 以降のセクションでは、C1TrueDBGrid のオブジェクトとコレクションの概要について説明します。 C1TrueDBGrid クラス C1TrueDBGrid コントロールは、TrueDBGrid for WinForms の主要なオブジェクトです。このコントロールの C1DataColumnCollection オブジェクトおよび C1DisplayColumnCollection オブジェクトを使用すると、グリッドの物理列 と基礎データベースフィールドのマッピングを定義する列オブジェクトを作成、アクセス、および変更できます。ま た、SplitCollection オブジェクトを使用すると、グリッドを複数の垂直ペインに分割して、同じデータソースをさまざまな外見で 表示できます。 参照 設計時のサポート 実行時の操作 参照トピック C1TrueDBGrid プロパティ 28 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid メソッド C1TrueDBGrid イベント C1TrueDBDropDown クラス C1TrueDBDropDown コントロールは、C1TrueDBGrid コントロールのサブセットです。このコントロールは、複数の列を含 むグリッド列のドロップダウンリストボックスとして使用されます。このコントロールをスタンドアロンのコントロールとして使用す ることはできません。 C1TrueDBGrid コントロールと同様に、設計時に C1TrueDBDropDown コントロールを Visual Studio のフォームに配置で きます。ただし、このコントロールを C1TrueDBGrid コントロールのC1DataColumn オブジェクトに結び付けないと、実行時に ドロップダウンコントロールは表示されません。 ドロップダウンコントロールを使用するには、設計時または実行時に、グリッド列の DropDown プロパティを C1TrueDBDropDown コントロールの名前に設定します。実行時にその列のセル内ボタンをクリックする と、C1TrueDBDropDown コントロールがグリッドの現在のセルの下に表示されます。ドロップダウンコントロールからアイテ ムを選択すると、グリッドの現在のセルが更新されます。C1TrueDBDropDown コントロールは、インクリメンタルサーチもサ ポートしています。 参照 C1TrueDBDropDown コントロールを使用する 参照トピック C1TrueDBDropDown プロパティ C1TrueDBDropDown メソッド C1TrueDBDropDown イベント C1DataColumnCollection クラス C1TrueDBGrid コントロールおよび C1TrueDBDropDown コントロールはどちらも、C1DataColumn オブジェクトを保持お よび操作するために C1DataColumnCollection オブジェクトを持っています。このコレクションは、C1TrueDBGrid オブジェク トの下に含まれており、C1TrueDBGrid デザイナ デザイナを使って変更できます。デザイナにはデザイナには、プロパティウィンドウの Columns プロパティ、グリッドのコンテキストメニュー、およびスマートタグからアクセスできます。詳細について はC1TrueDBGrid デザイナを使用する デザイナを使用するを参照してください。 C1DataColumn オブジェクト C1TrueDBGrid コントロール、C1TrueDBDropDown コントロール、または Split 内の各列は、2つの列オブジェクト(グロー バルな列オブジェクトとスプリット固有の列オブジェクト)によって表されます。データアクセスおよび書式設定に関連するすべ てのプロパティは、C1DataColumn オブジェクトのプロパティはグローバルなスコープを持ちます。C1DataColumn のプロパ ティを変更すると、他のスプリットにある列を含むすべての列の値が変更されます。DataColumn オブジェクトには、次のよう にアクセスできます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns(0).Caption = "Region" C# コードの書き方 C# this.c1TrueDBGrid1.Columns[0].Caption = "Region"; 参照 29 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid デザイナを使用する 参照トピック C1DataColumn プロパティ C1DataColumn メソッド C1DisplayColumnCollection クラス C1TrueDBGrid コントロールおよび C1TrueDBDropDown コントロールはどちらも、 C1DisplayColumn オブジェクトを保持 および操作するためにC1DisplayColumnCollection オブジェクトを持っています。このコレクションは SplitCollection オブ ジェクト内にあり、 Split の DisplayColumns プロパティからアクセスできます。また、このコレクションは、.NET の C1DisplayColumnCollection エディタ エディタを使って変更できます。詳細については、 C1DisplayColumnCollection エディタを 使用する 使用するを参照してください。 C1DisplayColumn クラス グリッド内の各スプリットは、少なくとも1つの C1DisplayColumnオブジェクトを含んでいます。列の表示に関連するプロパティ はすべてこのオブジェクト内に含まれています。C1DataColumn のプロパティとは異なり、C1DisplayColumn オブジェクトの プロパティはスプリット固有のものです。C1DisplayColumn プロパティを変更しても、特定のスプリット内にある特定の列のプ ロパティ値だけが変更されます。このオブジェクトには、次のようにアクセスできます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0,0).DisplayColumns(0).Style.ForeColor = System.Drawing.Color.Blue C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0,0].DisplayColumns[0].Style.ForeColor = System.Drawing.Color.Blue; 参照 C1DisplayColumnCollection エディタを使用する 参照トピック C1DisplayColumnCollectionプロパティ C1DisplayColumnCollection メソッド GroupedColumnCollection クラス DataView プロパティを DataViewEnum.GroupBy, に設定すると、グリッドの上部にグループ化領域が作成されます。この 領域に列を追加してグループを形成し、グリッドにソートされたツリービュー構造を作成できます。グループに入れられた各列 は、コレクションに追加されます。グループから除外された各列は、コレクションから削除されます。 参照 列のグループ化 SplitCollection クラス C1TrueDBGrid コントロールは、 Split オブジェクトを保持および操作するために SplitCollection コレクションを維持してい 30 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ます。デフォルトではグリッドにはスプリットが1つありますが、複数のスプリットが含まれることもあります。このコレクションに は、C1TrueDBGrid のSplits プロパティを介してアクセスできます。また、このコレクションは、.NET の SplitCollection エディ タを使って変更できます。詳細については、SplitCollection エディタを使用する を参照してください。 Split オブジェクト TrueDBGrid for WinForms は、Excel に似たスプリット分割 分割をサポートしています。スプリットは、グリッドを垂直および水平 のペインに分割して、同じデータソースをさまざまな外見で表示します。各スプリットは1つの Split オブジェクトで表され、隣 接する一連の列を含んでいます。これらの列は、同時にスクロールされます。 C1TrueDBGrid コントロールが作成された場合は、デフォルトで1つの Split オブジェクトが含まれています。Split オブジェク トのプロパティの多くは、一般に C1TrueDBGrid コントロールにも適用されます。したがって、スクロールしない固定列を作成 する場合など、実際にスプリットを使用する必要がないかぎり、スプリットについて意識する必要はありません。このオブジェク トには、次のようにアクセスできます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).Caption = "Split00" C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].Caption = "Split00"; 参照 スプリットの使用方法 SplitCollection エディタを使用する 参照トピック Split プロパティ Split メソッド GridStyleCollection クラス C1TrueDBGrid コントロールと C1TrueDBDropDown コントロールは、組み込みの Style オブジェクトおよびユーザー定義 の Style オブジェクトをすべて GridStyleCollection オブジェクトに格納します。実行時に、名前を使ってこのコレクションのメ ンバにアクセスし、それらのメンバをグリッド、列、スプリットなどに適用することで、それらのオブジェクトの外見を制御できま す。このコレクションには、C1TrueDBGrid の Styles プロパティを介してアクセスできます。また、このコレクションおよびそのメ ンバは、.NET の the StyleCollection エディタ エディタを使って変更できます。 Style オブジェクト Style オブジェクトは、C1TrueDBGrid, C1TrueDBDropDown, Split, C1DisplayColumn の各オブジェクトのフォント、色、 画像、および書式設定情報をカプセル化します。 Style オブジェクトは、Excel や Word に似た書式設定機能を提供してグリッ ド表示の外見を制御するたいへん柔軟で強力なツールです。 作成された C1TrueDBGrid コントロールまたは C1TrueDBDropDown コントロールは、10個の組み込みスタイルを含んでいま す。設計時または実行時に、組み込みスタイルを変更したり、独自のスタイルを追加することができます。どちらのコントロー ルも、Style オブジェクトを使ってセル単位または行単位で書式設定情報を伝達するさまざまなイベントをオプションでサポート しています。このオブジェクトには、次のようにアクセスできます。 Visual Basic コードの書き方 31 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic Me.C1TrueDBGrid1.Styles("Normal").Backcolor = System.Drawing.Color.Gray C# コードの書き方 C# this.c1TrueDBGrid1.Styles["Normal"].Backcolor = System.Drawing.Color.Gray; 参照 スタイルの使用方法 GridStyleCollection エディタを使用する 参照トピック Style プロパティ ValueItems クラス ValueItems オブジェクトは、グリッド内のデータベース値に代わる表示値を作成するための1つのコレクションといくつかのプ ロパティを含んでいます。このオブジェクトは、特定の C1DataColumn オブジェクトに対して許可される入力値を指定できま す。また、生データ値を表示用の代替テキストまたはグラフィックに変換するためにも使用できます。たとえば、0および1という 数値データの代わりに、Balance Due (請求額)および Paid in Full (支払額)と表示できます。ValueItems オブジェクトには、 表示プロパティ、および ValueItem オブジェクトのコレクションValueItemCollection.が含まれます。このオブジェクトには、 次のようにアクセスできます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid.Columns(0).ValueItems.MaxComboItems = 5 C# コードの書き方 C# this.c1TrueDBGrid.Columns[0].ValueItems.MaxComboItems = 5; ValueItemCollection クラス C1TrueDBGrid または C1TrueDBDropDown コントロール内の各 C1DataColumnオブジェクトは、 ValueItem という名前 のオブジェクトに一連の表示値/値ペアを格納します。ValueItemCollection オブジェクトは、これらのペアのコレクションで す。このコレクションには、ValueItems オブジェクトの Values プロパティを介してアクセスできます。たとえば、コレクション内 の最初の ValueItem を変更するには、次のようなコードを使用します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid.Columns(0).ValueItems.Values(0).DisplayValue = "Canada" C# コードの書き方 C# this.c1TrueDBGrid.Columns[0].ValueItems.Values[0].DisplayValue = "Canada"; 32 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ValueItem クラス ValueItem オブジェクトは、 DisplayValue とValueの2つのプロパティで構成されます。Value プロパティはデータベース内 の基礎値を指定し、DisplayValue プロパティはグリッドに表示される値を指定します。これらのオブジェクト は、ValueItemCollection オブジェクトに含まれ、 、.NET の ValueItems エディタで編集できます。このエディタ は、ValueItems オブジェクトの下の C1TrueDBGrid デザイナから使用できます。詳細については、ValueItemCollection エディタを使用する エディタを使用するを参照してください。 参照 ValueItems を使ってデータを自動的に変換する C1TrueDBDropDown を使ってデータを自動的に変換する ValueItemCollection エディタを使用する 参照トピック ValueItems プロパティ ValueItem プロパティ PrintInfo クラス PrintInfo オブジェクトを使用して、出力デバイス名、マージン設定、ページヘッダ、ページフッタ、印刷部数など、ページのレイ アウトや印刷ジョブの特性を指定します。 C1TrueDBGrid コントロールの PrintInfo プロパティは、印刷ジョブを変更するためのオブジェクトを返します。 PrintInfo オブジェクトは永続的です。つまり、設計時に印刷レイアウトを定義し、それを実行時にコード内で呼び出すことがで きます。 参照トピック PrintInfo プロパティ PrintInfo メソッド PrintPreviewWinSettings クラス PrintPreviewWinSettings オブジェクトから、グリッドの印刷プレビューウィンドウのプロパティにアクセスできます。このオブ ジェクトを使用して、ページヘッダやページフッタなど、プレビューウィンドウに表示されるさまざまな要素の外見を設定できま す。このオブジェクトには、C1TrueDBGridの PreviewInfo プロパティからアクセスします。 参照トピック PrintPreviewWinSettings プロパティ HBar クラス HBar オブジェクトは、水平スクロールバーのプロパティの指定に使用されます。HScrollBar プロパティを使用すると、スク ロールバーの高さを指定できます。また、スクロールバーを自動的に表示するか、まったく表示しないかを指定できます。 参照トピック HBar プロパティ VBar クラス VBar オブジェクトは、垂直スクロールバーのプロパティの指定に使用されます。 VScrollBar プロパティを使用すると、スク ロールバーの幅を指定できます。また、スクロールバーを自動的に表示するか、まったく表示しないかを指定できます。 参照トピック 33 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms VBar プロパティ GridLines クラス GridLines オブジェクトは、ColumnDividerプロパティとRowDivider プロパティの特性を指定するために使用されます。列と 行の境界線の色とスタイルは、実行時または設計時に GridLines オブジェクトを使って操作できます。 参照トピック GridLines プロパティ GridBorders クラス GridBorders オブジェクトは、Styleの Borders プロパティの特性を指定するために使用されます。このプロパティは、セルの 列の境界線を設定します。このオブジェクトを使用して、セルの周囲の各境界線の幅と境界線の色を指定できます。 参照トピック GridBorders プロパティ SelectedRowCollection クラス 実行時にユーザーが C1TrueDBGrid コントロールから1つ以上の行を選択して強調表示すると、選択した行のブックマーク が SelectedRowCollectionオブジェクトに格納されます。コード内では、このコレクションの Count プロパティおよび Item メ ソッドを使用して、選択されている行を特定できます。また、コレクションの Add メソッドと RemoveAt メソッドを使用して、レ コードをプログラムで選択したり、選択を解除することもできます。 参照 選択と移動 SelectedColumnCollection クラス 実行時にユーザーが C1TrueDBGrid コントロールから1つ以上の列を選択して強調表示すると、これらの列 のC1DataColumn オブジェクトがSelectedColumnCollection オブジェクトに格納されます。コード内では、このコレクション の Count プロパティおよびItemメソッドを使用して、選択されている列を特定できます。また、コレクションの Addメソッドと RemoveAt メソッドを使用して、レコードをプログラムで選択したり、選択を解除することもできます。 参照 選択と移動 オブジェクトとコレクションを使用する この項では、コード内でオブジェクトとコレクションを使用する方法について、その効率性に注目して説明します。これらの考え 方は、C1TrueDBGridのオブジェクトとコレクションを例にして説明されていますが、Visual Studio のすべてのオブジェクトとコ レクションにも同じ基本があてはまります。 フォーム上に C1TrueDBGrid コントロールを置くと、 、C1TrueDBGrid オブジェクトが作成されます。作成された C1TrueDBGrid オブジェクトには、C1TrueDBGrid1、C1TrueDBGrid2 などのデフォルト名が付けられます。設計時には、 Visual Studio のプロパティウィンドウでコントロール名を変更できます。 コレクションを使用する C1TrueDBGrid オブジェクトには、さまざまなオブジェクトを管理する8つの異なるコレクションが含まれます。また、これらのコ レクションにそれぞれ対応し、そのコレクションオブジェクトを返すプロパティが C1TrueDBGrid オブジェクト内にあります。そ 34 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms のため、コード内でグリッドを使用する場合に、完全なコレクション名を覚えておく必要がありません。次に、これらのコレクショ ンとプロパティの対応を示します。 コレクション 関連プロパティ C1DataColumnCollection Columns プロパティ C1DisplayColumnCollection DisplayColumns プロパティ GridStyleCollection Styles プロパティ SelectedColumnCollection SelectedCols プロパティ SelectedRowCollection SelectedRows プロパティ SplitCollection Splits プロパティ ValueItemCollection Values プロパティ デフォルトでは、SplitCollection オブジェクトには1つのSplit オブジェクトが含まれます。GridStyleCollection オブジェクト には、Caption、Editor、EvenRow、FilterBar、 、 Footer、Group、Heading、HighlightRow、Inactive、Normal、OddRow、RecordSelector、および Selected という13個 のデフォルトのStyle オブジェクトが含まれます。 コレクション内のオブジェクトを参照するには、0から始まるインデックスを使用します。次のように、Split オブジェクトのプロパ ティを設定または読み取ることができます。 Visual Basic コードの書き方 Visual Basic ' Split オブジェクトのプロパティを読み取ります variable = Me.C1TrueDBGrid1.Splits(0).Property ' Split オブジェクトのプロパティを設定します Me.C1TrueDBGrid1.Splits(0).Property = variable C# コードの書き方 C# // Split オブジェクトのプロパティを読み取ります variable = this.c1TrueDBGrid1.Splits[0].Property; // Split オブジェクトのプロパティを設定します this.c1TrueDBGrid1.Splits[0].Property = variable; コレクションの Item メソッドを使用して、コレクション内のオブジェクトの参照を作成できます。次のコードは、グリッドのデフォ ルトの Split オブジェクトへの参照を作成しています。 Visual Basic コードの書き方 Visual Basic ' Split0 を Split オブジェクトとして宣言します Dim Split0 As C1.Win.C1TrueDBGrid.Split ' コレクション内の最初のスプリットを参照するように Split0 を設定します Split0 = Me.C1TrueDBGrid1.Splits(0) 35 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C#コードの書き方 C# // Split0 を Split オブジェクトとして宣言します C1.Win.C1TrueDBGrid.Split Split0; // コレクション内の最初のスプリットを参照するように Split0 を設定します Split0 = this.c1TrueDBGrid1.Splits[0]; 上の例で、名前空間修飾子を使用していることに注意してください。他のコントロールとの潜在的な名前の競合を解決するた めに、名前空間修飾子を使用することをお勧めします。たとえば、同じプロジェクトで別のコントロールを使用しており、そのコ ントロールでも Split という名前のオブジェクトを定義している場合は、C1TrueDBGrid 名前空間修飾子が必要になります。そ の別のコントロールにも名前空間修飾子を付けます。 コレクションの Item メソッドは暗黙的に使用できるため、省略できます。 Visual Basic コードの書き方 Visual Basic ' Split0 を Split オブジェクトとして宣言します Dim Split0 As C1.Win.C1TrueDBGrid.Split ' コレクション内の最初のスプリットを参照するように Split0 を設定します Split0 = Me.C1TrueDBGrid1.Splits(0) C# コードの書き方 C# // Split0 を Split オブジェクトとして宣言します C1.Win.C1TrueDBGrid.Split Split0; // コレクション内の最初のスプリットを参照するように Split0 を設定します Split0 = this.c1TrueDBGrid1.Splits[0]; ここで、Split0 を使用して、Split オブジェクトのプロパティを取得または設定したり、メソッドを実行することができます。 Visual Basic コードの書き方 Visual Basic 'Split オブジェクトのプロパティを読み取ります variable = Split0.Property ' Split オブジェクトのプロパティを設定します Split0.Property = variable ' Split オブジェクトのメソッドを実行します Split0.Method (arg1, arg2, ...) C# コードの書き方 C# //Split オブジェクトのプロパティを読み取ります variable = Split0.Property; 36 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms // Split オブジェクトのプロパティを設定します Split0.Property = variable; //Split オブジェクトのメソッドを実行します Split0.Method (arg1, arg2, ...); 1つ以上のオブジェクトプロパティを取得および設定することもよくあります。 Visual Basic コードの書き方 Visual Basic ' Split オブジェクトのプロパティを読み取ります variable1 = Me.C1TrueDBGrid1.Splits(0,0).Property1 variable2 = Me.C1TrueDBGrid1.Splits(0,0).Property2 ' Split オブジェクトのプロパティを設定します Me.C1TrueDBGrid1.Splits(0,0).Property1 = variable1 Me.C1TrueDBGrid1.Splits(0,0).Property2 = variable2 C# コードの書き方 C# // Split オブジェクトのプロパティを読み取ります variable1 = this.c1TrueDBGrid1.Splits[0,0].Property1; variable2 = this.c1TrueDBGrid1.Splits[0,0].Property2; // Split オブジェクトのプロパティを設定します this.c1TrueDBGrid1.Splits[0,0].Property1 = variable1; this.c1TrueDBGrid1.Splits[0,0].Property2 = variable2; このコードは、Me.C1TrueDBGrid1.Splits(0,0) オブジェクトに何度もアクセスしているため、あまり効率よくありません。事前に このオブジェクトへの参照を1つ作成しておき、それを繰り返し使用する方が効率的です。 Visual Basic コードの書き方 Visual Basic ' Split0 を Split オブジェクトとして宣言します Dim Split0 As C1TrueDBGrid.Split ' コレクション内の最初のスプリットを参照するように Split0 を設定します Split0 = Me.C1TrueDBGrid1.Splits.Item(0,0) ' Split オブジェクトのプロパティを読み取ります variable1 = Split0.Property1 variable2 = Split0.Property2 ' Split オブジェクトのプロパティを設定します Split0.Property1 = variable1 Split0.Property2 = variable2 C# コードの書き方 37 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# // Split0 を Split オブジェクトとして宣言します C1TrueDBGrid.Split Split0; // コレクション内の最初のスプリットを参照するように Split0 を設定します Split0 = this.c1TrueDBGrid1.Splits[0,0]; // Split オブジェクトのプロパティを読み取ります variable1 = Split0.Property1; variable2 = Split0.Property2; // Split オブジェクトのプロパティを設定します Split0.Property1 = variable1; Split0.Property2 = variable2; これで、たいへん効率よくなり、コードも読みやすくなります。.NET アプリケーションで頻繁にコレクションオブジェクトにアクセス する場合は、このガイドラインに従うことで、コードのパフォーマンスを著しく向上させることができます。 このテクニックは、C1TrueDBGrid の他のオブジェクトとコレクション、および一般に Visual Studio のオブジェクトとコレクショ ンにも同様に適用できます。グリッドの場合に特に重要なのは、C1DataColumn オブジェクトと C1DataColumnCollection オブジェクトです(C1DisplayColumn オブジェクトも同様)。 Visual Basic コードの書き方 Visual Basic 'Cols を Columns コレクション オブジェクトとして宣言し、C1TrueDBGrid1 の C1DataColumnCollection オ ブジェクトを参照するように設定します。 Dim Cols As C1.Win.C1TrueDBGrid.C1DataColumnCollection Cols = Me.C1TrueDBGrid1.Columns ' Col0 を C1DataColumn オブジェクトとして宣言し、コレクション内の最初の Column オブジェクトを参照するように 設定します。 Dim Col0 As New C1.Win.C1TrueDBGrid.C1DataColumn Col0 = Cols(0) ' C1DataColumn オブジェクトの Property1 を取得および設定します。 variable1 = Col0.Property1 Col0.Property1 = variable1 ' C1DataColumn オブジェクトの Method1(Sub として宣言)を実行します Col0.Method1 (arg1, arg2, ...) ' C1DataColumn オブジェクトの Method2(Function として宣言)を実行します。 variable2 = Col0.Method2(arg1) C# コードの書き方 C# // Cols を Columns コレクション オブジェクトとして宣言し、C1TrueDBGrid1 の C1DataColumnCollection オブジェクトを参照するように設定します。 C1.Win.C1TrueDBGrid.C1DataColumnCollection Cols; Cols = this.c1TrueDBGrid1.Columns; 38 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms // Col0 を C1DataColumn オブジェクトとして宣言し、コレクション内の最初の Column オブジェクトを参照するよう に設定します。 C1.Win.C1TrueDBGrid.C1DataColumn Col0 = new C1TrueDBGrid.DataColumn(); Col0 = Cols[0]; // C1DataColumn オブジェクトの Property1 を取得および設定します。 variable1 = Col0.Property1; Col0.Property1 = variable1; // C1DataColumn オブジェクトの Method1(Sub として宣言)を実行します Col0.Method1 (arg1, arg2, ...); // C1DataColumn オブジェクトの Method2(Function として宣言)を実行します。 variable2 = Col0.Method2(arg1); オブジェクトの複数のプロパティを効率よく設定するために、Visual Basic には With...End With 文も用意されています。この 文を使用すると、各プロパティを明示的に変数に割り当てる必要がありません。たとえば、次のコードは、グリッドの最初の列 の複数のプロパティを設定しています。コレクションのインデックスが0で始まることに注意してください。 Visual Basic コードの書き方 Visual Basic With Me.C1TrueDBGrid1.Columns(0) .Property1 = variable1 .Property2 = variable2 End With C#コードの書き方 C# this.c1TrueDBGrid1.Columns[0].Property1 = variable1; this.c1TrueDBGrid1.Columns[0].Property2 = variable2; メンバを追加する コレクションにオブジェクトを作成および追加するには、コレクションの Add メソッドを使用します。このメソッドは、唯一の引数 としてオブジェクトを受け取ります。たとえば、列に値のアイテムを複数作成するには、ValueItemCollection オブジェクトに新 しい ValueItem オブジェクトを追加します。 Visual Basic コードの書き方 Visual Basic ' ValueItem オブジェクトを作成します。 Dim v As C1TrueDBGrid.ValueItem = new C1TrueDbGrid.ValueItem() Me.C1TrueDBGrid1.Columns(0).ValueItems.Values.Add(v) C# コードの書き方 C# // ValueItem オブジェクトを作成します。 C1TrueDBGrid.ValueItem v = new C1TrueDBGrid.ValueItem(); 39 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.c1TrueDBGrid1.Columns[0].ValueItems.Values.Add(v); このコードは、 、C1TrueDBGrid1 の ValueItemCollection に ValueItem オブジェクトを追加します。また、次のように Insert メソッドを使用して、インデックスが1の ValueItem オブジェクトを作成することもできます。 Visual Basic コードの書き方 Visual Basic ' インデックス 1 の Split オブジェクトを作成します Dim S As C1TrueDBGrid.ValueItem Me.C1TrueDBGrid1.Columns(0).ValueItems.Values.Insert(1, S) C# コードの書き方 C# // インデックス 1 の Split オブジェクトを作成します C1TrueDBGrid.ValueItem S; this.c1TrueDBGrid1.Columns[0].ValueItems.Values.Insert(1, S); Split オブジェクトだけは、Add メソッドや RemoveAt メソッドを使用して、メンバを追加または削除することができません。ス プリットを正しく追加または削除するには、Split オブジェクトの InsertHorizontalSplit / RemoveHorizontalSplit メソッドお よびInsertVerticalSplit / RemoveVerticalSplit メソッドを使用する必要があります。これらのメソッドは、設計時にグリッドを 右クリックして表示されるコンテキストメニューからも使用できます。 メンバを削除する コレクションに Add または Insert の各メソッドがどのように実装されているかに関係なく、アイテムを削除する構文は同じで す。コレクションから既存のアイテムを削除するには、次のように、RemoveAt メソッドを使用します。 Visual Basic コードの書き方 Visual Basic ' インデックス 1 の Split オブジェクトを削除します Me.C1TrueDBGrid1.Columns(0).ValueItems.Values.RemoveAt(1) C# コードの書き方 C# // インデックス 1 の Split オブジェクトを削除します this.c1TrueDBGrid1.Columns[0].ValueItems.Values.RemoveAt(1); この文を実行すると、削除されたスプリットの場所が埋めるように、コレクションインデックスが1より大きいすべてのスプリット が1つずつ移動します。RemoveAt メソッドのパラメータは、削除されるメンバの場所であることに注意してください。 Count プロパティを使用する コレクション内のオブジェクトの数を参照するには、次のように、コレクションの Count プロパティを使用します。 Visual Basic コードの書き方 Visual Basic 40 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ' 変数に C1TrueDBGrid1 内のスプリットの数を設定します variable = Me.C1TrueDBGrid1.Splits.Count C# コードの書き方 C# // 変数に C1TrueDBGrid1 内のスプリットの数を設定します variable = this.c1TrueDBGrid1.Splits.Count; 次の例のように、Count プロパティを使用して、コレクション内のすべてのオブジェクトを反復処理することもできます。この コードは、グリッド内の各 C1DataColumn オブジェクトの Caption 文字列を出力しています。 Visual Basic コードの書き方 Visual Basic For n = 0 To Me.C1TrueDBGrid1.Columns.Count - 1 Debug.WriteLine(Me.C1TrueDBGrid1.Columns(n).Caption) Next n C# コードの書き方 C# for (n = 0; n < this.c1TrueDBGrid1.Columns.Count; n++) { Console.WriteLine(this.c1TrueDBGrid1.Columns[n].Caption); } Count プロパティは、列の追加や削除にも便利です。 Visual Basic コードの書き方 Visual Basic ' 何列あるかを決定します Dim NumCols As Integer NumCols = Me.C1TrueDBGrid1.Columns.Count ' Columns コレクションの最後に列を追加します Dim C As C1TrueDBGrid.C1DataColumn = New C1TrueDBGrid.C1DataColumn() Me.C1TrueDBGrid1.Columns.Insert(NumCols, C) ' 新しい列を可視にします。実行時に作成される列はデフォルトでは不可視です Me.C1TrueDBGrid1.Splits(0).DisplayColumns(C).Visible = True '次のループは、グリッドからすべての列を削除します While Me.C1TrueDBGrid1.Columns.Count Me.C1TrueDBGrid1.Columns.RemoveAt(0) End While C# コードの書き方 C# // 何列あるかを決定します 41 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms int NumCols; NumCols = this.c1TrueDBGrid1.Columns.Count; // Columns コレクションの最後に列を追加します C1TrueDBGrid.C1DataColumn C = new C1TrueDBGrid.C1DataColumn(); this.c1TrueDBGrid1.Columns.Insert(NumCols, C); // 新しい列を可視にします。実行時に作成される列はデフォルトでは不可視です this.c1TrueDBGrid1.Splits[0].DisplayColumns[C].Visible = true; // 次のループは、グリッドからすべての列を削除します while ( this.c1TrueDBGrid1.Columns.Count > 0 ) { this.c1TrueDBGrid1.Columns.RemoveAt(0); } コレクション内のオブジェクトを効率よく反復処理できるように、Visual Basic には For Each...Next 文(C#では、foreach)も用意 されています。この文を使用すると、 、Count プロパティを使用する必要がありません。 Visual Basic コードの書き方 Visual Basic Dim C As C1TrueDBGrid.C1DataColumn For Each C In Me.C1TrueDBGrid1.Columns Debug.WriteLine(C.Caption) Next S C# コードの書き方 C# C1TrueDBGrid.C1DataColumn c; foreach (c In this.c1TrueDBGrid1.Columns) { Console.WriteLine(c); } 実際、コレクション内のオブジェクトを反復処理する場合は、For Each...Next 文を使用することをお勧めします。 42 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 設計時のサポート TrueDBGrid for WinForms は、Visual Studio のプロパティウィンドウを使って設計時に簡単に設定できます。次の各項で は、C1TrueDBGrid の設計時環境を使用して、C1TrueDBGrid コントロールを設定する方法について説明します。 C1TrueDBDropDown コントロールは C1TrueDBGrid のサブセットなので、以下の説明のほとんどは、 C1TrueDBDropDown コントロールにもあてはまります。これら2つのコントロールの具体的な違いについては、この章の最後 で説明します。 オブジェクトモデルとプロパティへのアクセス方法を理解する TrueDBGrid for WinForms は、ビジュアルなコンポーネントの構成を反映した豊富なオブジェクトモデルをサポートしていま す。したがって、グリッドの外見や動作をカスタマイズするには、Visual Studio のプロパティウィンドウやコレクションエディタが グリッドのオブジェクトモデルをどのように反映しているかについて理解しておく必要があります。 スプリットは、Microsoft Excel や Microsoft Word などの製品の分割ウィンドウの機能に似ています。スプリットを使用する と、複数の水平ペインや垂直ペインにデータを表示できます。これらのペイン、つまりスプリットでは、データをそれぞれ異なる 色やフォントで表示できます。また、複数のスプリットを一体としてスクロールすることも、個別にスクロールすることもできま す。それぞれ異なる列セットを表示することも、同じ列セットを表示することもできます。スプリットを使用して、いくつかの列また は行をスクロールできないようにすることもできます。デフォルトでは、グリッドには1つのスプリットがあり、そこにすべての列 が含まれています。スプリットのプロパティのほとんどは、メインのプロパティウィンドウに表示されていないことに注意してくだ さい。たとえば、AlternatingRows プロパティを設定するには、 Split Collection editor を開き、Split オブジェクトを変更す る必要があります。このプロパティの値は、スプリットごとに異なる場合があるからです。このように、グリッド全体ではなく個別 のスプリットに適用されるプロパティをスプリット固有のプロパティと呼びます。 逆に、グローバルなプロパティは、DataView や BorderStyle. など、グリッド全体に適用されるプロパティを指します。グロー バルなプロパティには、Visual Studio のプロパティウィンドウからアクセスできます。プロパティウィンドウは、初期設定では、 .NET IDE の右下に配置されています。グローバルなプロパティには、Align や Tag など、Visual Studio 固有の拡張プロパ ティも表示されます。 スプリット固有のプロパティとグローバルなプロパティの違いは、グリッド内でデータ列を表す2つの列オブジェクトにも及びま す。これらオブジェクトは、列のプロパティを決定します。C1DataColumn オブジェクトは、データアクセスと書式設定に関連す るすべての列プロパティを含みます。 C1DisplayColumn オブジェクトは、列のビジュアルな表示に関連するすべての列プロ パティを含みます。C1DataColumn のプロパティはグローバルな列プロパティです。これらのプロパティは、どのスプリットに 置かれるかに関係なく、グリッド内のすべての列に適用されます。たとえば、列を追加または削除する場合は、関連する C1DataColumn を追加または削除します。一方、C1DisplayColumn のプロパティはスプリット固有のプロパティです。これら のプロパティの1つを設定しても、すべてのスプリットでそのプロパティが設定されるわけではありません。 グローバルなグリッドプロパティにアクセスする グリッドオブジェクト全体に適用されるプロパティは、グローバルなプロパティと見なされます。一度設定されたグローバルなプ ロパティは、スプリット固有のプロパティまたは列のプロパティを設定してもそのまま維持されます。これらのプロパティには、 Visual Studio のプロパティウィンドウからアクセスできます。このように、グリッドのすべてのプロパティにアクセスして、設計時 に簡単に値を設定できます。プロパティウィンドウには、プロパティがカテゴリ別またはアルファベット順に並んでいます。オブ ジェクトとコレクションにアクセスできるように、プロパティページにはオブジェクトがツリー構造で表示されています。オブジェク トのツリー構造を展開すると、その構成要素のプロパティを表示できます。 43 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms スプリット固有のプロパティにアクセスする Visual Studio のプロパティウィンドウでは、 Splits プロパティからスプリットのプロパティにアクセスします。 Splits ノードの横 にある省略符をクリックすると、SplitCollection エディタが表示されます。このエディタを使用して、現在のスプリットに対応す るC1DisplayColumnCollection プロパティと、スプリット固有のすべてのプロパティにアクセスできます。コレクションエディタ の使用方法については、SplitCollectionエディタを使用する エディタを使用するを参照してください。 また、スプリット固有のプロパティは C1TrueDBGrid デザイナ デザイナでも利用できます。詳細は、C1TrueDBGridデザイナを使用す デザイナを使用す るを参照してください。 列のプロパティにアクセスする Visual Studio のプロパティウィンドウで、グローバルな列プロパティC1DataColumn のプロパティに は、C1DataColumnCollection オブジェクトのプロパティからアクセスします。Visual Studio のプロパティウィンドウ で、Columns ノードの横にある省略符をクリックすると、C1TrueDBGrid デザイナが表示されます。デザイナの使用方法につ いては、C1TrueDBGrid デザイナを使用する デザイナを使用するを参照してください。 SplitCollection の各メンバも、Visual Studio のプロパティウィンドウで DisplayColumns プロパティを公開します。このプロ パティは、C1DisplayColumnCollection オブジェクトとも呼ばれます。これらのC1DisplayColumn プロパティは、スプリット 固有のプロパティです。プロパティウィンドウの Splits ノードの横にある省略符をクリックし、SplitCollection エディタ エディタで DisplayColumns ノードの横にある省略符をクリックすると、C1DisplayColumnCollection 用のエディタが表示されます。こ のエディタの使用方法については、C1DisplayColumnCollectionエディタを使用する エディタを使用する を参照してください。 また、スプリット固有のプロパティは C1TrueDBGrid デザイナでも利用できます。詳細は、C1TrueDBGrid デザイナを使用す る を参照してください。 SplitCollection エディタを使用する SplitCollection は Split オブジェクトのコレクションで、グリッドの表示プロパティの大部分と、Split 固有のプロパティへのア クセスを提供します。コード内でこれらプロパティにアクセスするには、C1TrueDBGrid オブジェクトを使用します。次に例を示 44 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).AllowColMove = True C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].AllowColMove = true; .NET には、コレクションに簡単に変更を加えることができるように、コレクションエディタが用意されています。SplitCollection は、設計時に .NET のコレクションエディタを使って変更できます。SplitCollection のコレクションエディタは、Visual Studio の プロパティウィンドウで、Splits プロパティの横にある省略符ボタンをクリックするとアクセスできます。SplitCollection エディタ で、DisplayColumns プロパティの横にある省略符ボタンをクリックすると、C1DisplayColumnCollection エディタが起動し ます。 このエディタには、スプリットを追加および削除するボタンがないことに注意してください。コレクションエディタではスプリットを 作成および削除することができませんが、設計時にこれらを行うことは可能です。グリッドで右クリックすると、グリッドのコンテ キストメニューが表示されます。スプリットを追加または削除するには、コンテキストメニューから [デザイナの起動 デザイナの起動] を選択 し、C1TrueDBGrid デザイナ を使用します。 スプリットのプロパティ SplitCollection オブジェクトの次のプロパティは、Visual Studio のプロパティウィンドウにある SplitCollection エディタ エディタで設 定できます。 プロパティ 説明 AllowColMove 列の移動を有効にする。 AllowColSelect 列の移動を有効にする。 45 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms AllowFocus 列にフォーカスを移動できるかどうかを制御する。 AllowRowSelect 列の選択を有効にする。 AllowRowSizing 行をサイズ変更できるかどうかを制御する。 AlternatingRowStyle スプリットに偶数/奇数 スタイルを適用するかどうかを設定する。 Caption スプリットのキャプションを設定する。 CaptionStyle グリッドのキャプションのスタイルを制御する。 ColumnCaptionHeight 列のキャプションの高さを設定する。 ColumnFooterHeight 列のフッタの高さを設定する。 DisplayColumns C1DisplayColumn を返す。 EditorStyle 列のエディタのスタイルを制御する Style オブジェクトを返す。 EvenRowStyle 偶数行の行スタイルを制御する Style オブジェクトを返すまたは設定する。 ExtendRightColumn スプリットの最後の列を拡張するかどうかを返すまたは設定する。 FetchRowStyles FetchRowStyle を発生させるかどうかを設定する。 FilterBar FilterBar の状態を設定する。 FilterBarStyle FilterBar のセルを制御する Style オブジェクトを返す。FilterBar. FooterStyle 列のフッタのスタイルを制御する Style オブジェクトを返す。 HeadingStyle 列のヘッダのスタイルを制御する Style オブジェクトを返す。 HighlightRowStyle マーキーが Highlight Row である場合に、スタイルを制御する。Style オブジェク トを返す。 HorizontalScrollGroup 水平スクロールグループを設定する。 HScrollBar 水平スクロールバーの外見を制御する HBar オブジェクトを返します。 InactiveStyle グリッドの非アクティブなヘッダのスタイルを制御するStyle オブジェクトを返す。 Locked スプリットが読み取り専用かどうかを制御する。 MarqueeStyle スプリットのマーキースタイルを返すまたは設定する。 OddRowStyle 奇数行の行スタイルを制御する Style オブジェクトを返す。 RecordSelectors レコードセレクタを表示するかどうかを制御する。 RecordSelectorStyle RecordSelectors のStyle オブジェクトを返す。 RecordSelectorWidth レコードセレクタの幅を返すまたは設定する。 SelectedStyle グリッドの選択されている行/列のスタイルを制御するStyleオブジェクトを返す SplitSize スプリットのサイズを設定する。 SplitSizeMode スプリットがサイズ変更される場合の単位を設定する。 SpringMode スプリットを使って列をサイズ変更するかどうかを設定する。 46 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms VerticalScrollGroup 垂直スクロールグループを設定する。 VScrollBar 垂直スクロールバーの外見を制御する VBar オブジェクトを返す。 C1DisplayColumnCollection エディタを使用する C1DisplayColumnCollection は、表示、色、フォントなどに関する列プロパティのコレクションです。これらのプロパティ は、SplitCollectionの下の Columns 識別子の下にあります。また、これらのプロパティはスプリット固有です。つま り、C1DisplayColumn の各プロパティは、スプリットごとに異なる値を持つことができます。コード内でこれらプロパティにアク セスするには、この SplitCollection を使用します。次に例を示します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Merge = True C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Merge = true; スプリット固有の列プロパティとさまざまなコレクションを持つ C1TrueDBGrid のオブジェクトモデルを考えると、これらのプロ パティの多くは、簡単に効率よく検索したり、設定することができません。ただし、.NET には、C1TrueDBGrid コントロールのコ レクションのプロパティを分類したり、設定するために便利なコレクションエディタが用意されています。このエディタに は、SplitCollection エディタからアクセスできます。それには、Visual Studio のプロパティページで、グリッドの Splits プロパ ティの横にある省略符ボタンをクリックします。SplitCollection エディタで、 DisplayColumns プロパティの横にある省略符ボ タンをクリックすると、エディタが起動します。 このエディタには2つのペインがあります。左ペインには、[メンバ]見出しの下にグリッド内の現在の列が表示されます。右ペイ ンには、左ペインで強調表示されている列の表示関連のプロパティが表示されます。 C1DisplayColumnCollection エディタ エディタには、<追加>ボタンまたは<削除>ボタンがないことに注意してください。グリッド内の 各スプリットに複数の DisplayColumns が存在することがあるため、列の追加または削除は、C1TrueDBGrid デザイナで行 う必要があります。これにより、列は、すべてのスプリットに追加されたり、すべてのスプリットから削除されます。 47 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms DisplayColumns のプロパティ C1DisplayColumnCollection オブジェクトの次のプロパティは、Visual Studio のプロパティウィンドウにある C1DisplayColumn Collection エディタ エディタで設定できます。 プロパティ 説明 AllowFocus 列にフォーカスを移動できるかどうかを制御します。 AllowSizing ユーザーに、列をサイズ変更する機能を提供するかどうかを指定します。 AutoComplete データエントリを自動的に完了するかどうかを指定します。 AutoDropDown 入力に応答してドロップダウンを開くかどうかを指定します。 Button 現在のセル内にボタンを表示するかどうかを制御します。 ButtonAlways セル内ボタンをいつ表示するかを制御します。 ButtonFooter 列のフッタもボタンにするかどうかを指定します。 ButtonHeader ButtonText セルをボタンとしてレンダリングするかどうかを制御します。 ColumnDivider 列間の分割線を制御します。 DropDownList ドロップダウンコントロールをリストボックスのように動作させるかどうかを指定し ます。 EditorStyle 列のエディタのスタイルを制御します。 FetchStyle FetchCellStyle イベントを発生させるかどうかを指定します。 FilterButton フィルタセルにボタンを表示するかどうかを指定します。 FooterDivider FooterStyle 列のフッタのスタイルを制御します。 Frozen GroupFooterStyle GroupHeaderStyle HeaderDivider 列のヘッダの右端を垂直分割線で描画するかどうかを指定します。 HeadingStyle Inverted DataViewまたはForm DataViewでのヘッダのスタイルを制御します。 Height 列の高さを制御します。 Locked 列の編集をロックするかどうかを指定します。 Merge この列の連続する類似値のセルが 1 つの大きなセルにマージされるかどうかを 示す値を取得または設定します。 MinWidth 列の最小幅を指定します。 Name OwnerDraw OwnerDrawCell イベントを発生させるかどうかを指定します。 Style 列の標準のスタイルを制御します。 Visible 列を表示または非表示にします。 48 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms プロパティ 説明 Width コンテナの座標で列幅を設定または取得します。 ValueItemCollection エディタを使用する ValueItemCollection は値と表示値のコレクションで、列内のデータ変換に使用されます。このコレクションオブジェクトに は、C1DataColumn.ValueItems.Values プロパティを介してアクセスできます。コード内でこれらプロパティにアクセスするに は、このコレクションを使用します。次に例を示します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns(0).ValueItems.Values C# コードの書き方 C# this.c1TrueDBGrid1.Columns[0].ValueItems.Values; これらのプロパティを簡単に編集できるように、ValueItems エディタ エディタが用意されています。このエディタを使用し て、ValueItems を追加および削除したり、それらのValue プロパティや DisplayValue プロパティを変更することができます。 このエディタには、Visual Studio のプロパティウィンドウからアクセスできます。Visual Studio のプロパティウィンドウ で、Columns アイテムの横にある省略符ボタンをクリックすると、C1TrueDBGrid デザイナ デザイナが起動します。 ValueItems ノー ドを展開すると、the ValueItems コレクションのアイテムが表示されます。Values ノードの横の省略符ボタンをクリックする と、ValueItems エディタ エディタが起動します。 49 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms GridStyleCollection エディタを使用する スタイルコレクションは、Microsoft Word のスタイルに似たスタイルのコレクションです。これらのスタイルをグリッドの特定の セクションに関連付けることができます。Styles コレクションは、C1TrueDBGrid オブジェクトの下にあり、そのメンバとして個 別の Style オブジェクトを含んでいます。コード内で個別の Style オブジェクトおよびそれらのプロパティにアクセスするには、 このコレクションを使用します。次に例を示します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Styles("Normal").WrapText = False C# コードの書き方 C# this.c1TrueDBGrid1.Styles["Normal"].WrapText = false; これらのプロパティを簡単に変更できるように、GridStyleCollection エディタ エディタが用意されています。このエディタを使用して、 スタイルを追加したり、既存のスタイルのプロパティを変更することができます。GridStyleCollection エディタ エディタは、Visual Studio のプロパティウィンドウから使用できます。Visual Studio のプロパティウィンドウで Styles ノードの横にある省略符ボタ ンをクリックすると、エディタが起動します。 50 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid デザイナを使用する DisplayColumns、DataColumns、および Splits に属しているプロパティを、プロパティウィンドウを使って変更するのは、複 雑であり、困惑することもあるかもしれません。これらをより簡単にするために、C1TrueDBGrid には、デザイナが搭載されて います。 このデザイナにより、コードを記述しなくても設計時にグリッドの列を簡単に設定することが可能です C1TrueDBGrid デザイナへのアクセス C1TrueDBGrid デザイナ デザイナは、C1TrueDBGrid タスク タスクメニュー、Columns プロパティ、またはコンテキストメニューのいずれか を使用してアクセスできます。 [C1TrueDBGrid タスク]メニューの使用 [C1TrueDBGrid タスク タスク]メニューを使用して C1TrueDBGrid デザイナ デザイナにアクセスするには、C1TrueDBGrid の右上端にある スマートタグをクリックしてC1TrueDBGrid タスク タスクメニューを開き、デザイナ デザイナを選択します。 51 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Columns プロパティの使用 Columns プロパティを使用して C1TrueDBGrid デザイナ デザイナにアクセスするには、プロパティウィンドウの Columns プロパティ の横の〈...〉ボタンをクリックします。 コンテキストメニューの使用 コンテキストメニューを使用して C1TrueDBGrid デザイナ デザイナにアクセスするには、フォーム上でC1TrueDBGrid コントロールを 右クリックし、コンテキストメニューから[デザイン]を選択します。 C1TrueDBGrid デザイナの要素 デザイナでは、ウィンドウの右側にグリッドの列、左側に関連するプロパティが表示されます。ツールバーの左端のタブ で、DataColumn 、DisplayColumn 、Split のどれに関連したプロパティを表示するかを切り替えます。 デザイナにより、次のような操作が可能です。 列の順序の変更 列の順序の変更: マウスで列のヘッダをドラッグして列を移動できます。 列幅の調節 列幅の調節: 列ヘッダの右端をドラッグすることにより、列の幅を調節できます。列幅を -1 に設定すると、デフォルトの 列幅になります。 52 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 列のプロパティの設定 列のプロパティの設定: 1つ以上の列が選択されていれば、デザイナ左側のペイン内で各プロパティの設定内容を確 認したり変更したりできます。 列の挿入と削除 列の挿入と削除: ツールバーの列を挿入 列を挿入ボタンを使って列を挿入できます。また、選択した列の削除 列の削除には、列の削除ボ タンを使います。 ツールバーの機能 ツールバーの機能: 以下に、ツールバーに表示されている各ボタンの機能について説明します。 要素 説明 プロパティグリッドの上にあるこれらのタブで、デザイナで変更するプロパティの 種類を指定します。データ関連の列プロパティが含まれている DataColumns 、表示関連の列プロパティの集まりである DisplayColumns、スプリットに関連 したプロパティを集めた Splits の3つを指定できます。 これらのトグルボタンは、プロパティグリッドの表示を制御します。左側のボタン は、選択した列のプロパティが項目別にグループして並べ替ていることを示しま す。右側のボタンは、選択した列のプロパティがアルファベット順で並べられて いることを示します。 これらは、列幅の調節に使用します。左端のボタンは、すべての列の幅を同じ にします。中央のボタンは、選択されている列(フォーカスが当てられている列) の幅を広げます。右端のボタンは、選択されている列(フォーカスが当てられて いる列)の幅を狭めます。 これらのボタンは、列をグリッドへ追加、挿入および削除します。最初のボタンを クリックすると列がグリッドに追加されます。2つめのボタンをクリックすると列が グリッドに挿入されます。3つめのボタンをクリックすると、列がグリッドから削除 されます。 このボタンで操作の対象となる列を指定します。ドロップダウンリストから列を選 択すると、その列に関連したプロパティが、デザイナの左側のペインに表示され ます。 選択した列の垂直方向の配置を設定します。最初のボタンは、列の内容を上揃 えに配置します。次のボタンは、列の内容を中央揃えに配置し、最後のボタン は、下揃えに配置します。 Alignment: 列の内容を左、中央、右に配置します。これらのボタンが有効なの は、グリッドのスクロール領域内のみです。ヘッダ列内については、対象となる ヘッダ列を選択した後、TextAlignFixed プロパティを設定してください。 これらのボタンは、水平または垂直のスプリットを追加/削除します。最初のボ タンは、グリッドに垂直スプリットを追加し、2番目のボタンは水平スプリットを追 加します。3番目のボタンは垂直スプリットを削除し、最後のボタンは水平スプ リットを削除します。 これらのボタンは、テーブルの DataView プロパティを設定します。これらのボ タンは、DataView プロパティをそれぞれ Normal、GroupBy、Hierarchial、 、 Inverted、Form、MultipleLines、および MultipleLinesFixed に設定しま す。詳細については、データの表示 データの表示 を参照します。 Splits のプロパティ 53 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGridデザイナ デザイナのSplitタブでは、次の C1DataColumnCollection オブジェクトプロパティを使用できます。 プロパティ 説明 AllowColMove 列を移動する機能を示す値を取得または設定します。 AllowColSelect 列を選択する能力を示す値を取得または設定します。 AllowFocus スプリットがフォーカスを受け取ることができるかどうかを示す値を取得または 設定します。 AllowHorizontalSizing ユーザーが水平スプリットをサイズ変更できるかどうかを示す値を取得または 設定します。 AllowRowSelect 行を選択する機能を示す値を取得または設定します AllowRowSizing 行のサイズ変更を対話式で実行する方法を取得または設定します。 AllowVerticalSizing ユーザーが垂直スプリットをサイズ変更できるかどうかを示す値を取得または 設定します。 AlternatingRowStyle スプリットが、奇数番号の行にOddRowStyle を使用し、偶数番号の行 にEvenRowStyle を使用するかどうかを示す値を取得または設定します。 BorderStyle スプリットの境界線をレンダリングする方法を決定します。 Caption キャプションを取得または設定します。 CaptionHeight キャプションの高さを取得または設定します。 CaptionStyle キャプション領域の外観を制御する Style オブジェクトを取得または設定しま す。 ColumnCaptionHeight 列のキャプションの高さを取得または設定します。 ColumnFooterHeight 列フッターの高さを取得または設定します。 DisplayColumns C1DisplayColumn オブジェクトのコレクションを取得します。 EditorStyle グリッド内のセルエディタの外観を制御する C1.Win.C1TrueDBGrid.Style オブ ジェクトを取得または設定します。 EvenRowStyle AlternatingRowsを使用しているときに偶数番号の行の外観を制御する Styleオブジェクトを取得または設定します。 ExtendRightColumn 最終列を延長してスプリットのデッドエリアを埋める方法を決定する値を取得 または設定します。 FetchRowStyles FetchRowStyle イベントが発生するかどうかを示す値を取得または設定しま す。 FilterBar FilterBarの表示状態を示す値を取得または設定します。 FilterBarStyle FilterBarの外観を制御する C1.Win.C1TrueDBGrid.Style オブジェクトを取得 または設定します。 FilterBorderStyle フィルタバーのセパレータの外観を制御します。 FooterStyle 列フッターの外観を制御する C1.Win.C1TrueDBGrid.Style オブジェクトを取得 または設定します。 HeadingStyle グリッドの列ヘッダの外観を制御する C1.Win.C1TrueDBGrid.Style オブジェク トを取得または設定します。 Height スプリットの高さを取得または設定します。 54 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms HighlightRowStyle MarqueeStyle が Highlight Row/Cell に設定されているときに、現在の行/ セルを制御する C1.Win.C1TrueDBGrid.Style オブジェクトを取得または設定 します。 HorizontalScrollGroup スプリット間で水平スクロールを同期するグループを取得または設定します。 HScrollBar 水平スクロールバーの外観を制御する HBar オブジェクトを取得します。 InactiveStyle フォーカスを持たないときのグリッドキャプションを制御する Styleオブジェクト を取得または設定します。 Locked スプリットのセルを編集できるかどうかを示す値を取得または設定します。 MarqueeStyle Split の MarqueeStyle を取得または設定します。 MinHeight スプリットのサイズを対話式に変更できる最小の高さを取得または設定しま す。 MinWidth スプリットのサイズを対話式に変更できる最小の幅を取得または設定します。 Name スプリットの名前を取得または設定します。 OddRowStyle AlternatingRowsを使用しているときに奇数番号の行の外観を制御する C1.Win.C1TrueDBGrid.Style オブジェクトを取得または設定します。 RecordSelectors スプリットの行ヘッダーの表示状態を示す値を取得または設定します。 RecordSelectorStyle RecordSelectors の外観を制御する C1.Win.C1TrueDBGrid.Style オブジェク トを取得または設定します。 RecordSelectorWidth 行ヘッダーの幅を取得または設定します。 SelectedStyle 選択された行と列の外観を制御する C1.Win.C1TrueDBGrid.Style オブジェク トを取得または設定します。 SplitSize スプリットのサイズを取得または設定します。 SplitSizeMode SplitSizeプロパティを使用してスプリットの実際のサイズを決定する方法を示 す値を取得または設定します。 SpringMode グリッドがサイズ変更されるときに列をサイズ変更する方法を決定する値を取 得または設定します。 Style スプリットのルートの C1.Win.C1TrueDBGrid.Style オブジェクトを取得または 設定します。 VerticalScrollGroup スプリット間で垂直スクロールを同期するグループを取得または設定します VScrollBar 垂直スクロールバーの外観を制御する VBar オブジェクトを取得します。 C1DataColumn のプロパティ C1TrueDBGridデザイナ デザイナのColumnタブでは、次の C1DataColumnCollection オブジェクトプロパティを使用できます。 プロパティ 説明 Aggregate グループ化された行に対して計算された集計タイプを取得または設定します。 ButtonPicture 列のドロップダウンボタンに表示される画像を取得または設定します。 Caption 列ヘッダのテキストを取得または設定します。 DataField 列のデータベースのフィールド名を取得または設定します。 55 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms プロパティ 説明 DataWidth この列のセルに入力される文字の最大数を取得または設定します。 DefaultValue グリッドによって新しい行が追加されたときに、列のデフォルト値を取得または設定し ます。 DropDown この列に関連する C1TrueDBDropDown コントロールを取得または設定します。 EditMask 列の編集マスクを取得または設定します。 EditMaskUpdate 編集マスクのリテラル文字を基底になるデータソースに保存するかどうかを示す値を 取得または設定します。 EnableDateTimeEditor フィルタ基準をデータソースに適用するときにエスケープする必要がある文字を取得 または設定します。 FilterButtonPicture 列のフィルタボタンに表示する画像を取得または設定します。 FilterDropdown すべてのフィールド値をリストするフィルタセルにドロップダウンリストを表示するかど うかを示す値を取得または設定します。 FilterEscape フィルタ基準をデータソースに適用するときにエスケープする必要がある文字を取得 または設定します。 FilterKeys ユーザーが Split.FilterBarに入力したときに、フィルタ操作を開始するために使用す るキーを取得または設定します FilterOperator フィルタ式に使用する演算子を取得または設定します。 FilterText 列のフィルタの値に関連するデータを取得または設定します。 FooterText 列フッターに表示されるテキストを取得または設定します。 GroupInfo この列に関連付けられたGroupInfo を取得または設定します。 Level 階層データソースでこの列のレベルを取得または設定します。 NumberFormat 列の書式文字列を取得または設定します。 SortDirection 列キャプションでソートするグリフの状態を取得または設定します。 ValueItems この列の ValueItems を取得します DisplayColumns のプロパティ C1TrueDBGridデザイナ デザイナのDisplay Columnタブでは、次の C1DisplayColumnCollection オブジェクトプロパティを使用で きます。 プロパティ 説明 AllowFocus 列にフォーカスを移動できるかどうかを制御します。 AllowSizing ユーザーに、列をサイズ変更する機能を提供するかどうかを指定します。 AutoComplete データエントリを自動的に完了するかどうかを指定します。 AutoDropDown 入力に応答してドロップダウンを開くかどうかを指定します。 Button 現在のセル内にボタンを表示するかどうかを制御します。 ButtonAlways セル内ボタンをいつ表示するかを制御します。 ButtonFooter 列のフッタもボタンにするかどうかを指定します。 56 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms プロパティ 説明 ButtonHeader 列ヘッダがボタンのように動作するかどうかを示す値を取得または設定します。 ButtonText セルをボタンとしてレンダリングするかどうかを制御します。 ColumnDivider 列間の分割線を制御します。 DropDownList ドロップダウンコントロールをリストボックスのように動作させるかどうかを指定し ます。 EditorStyle 列のエディタの Style を制御します。 FetchStyle FetchCellStyle イベントを発生させるかどうかを指定します。 FilterButton フィルタセルにボタンを表示するかどうかを指定します。 FooterDivider 列分割線をフッタ領域に表示するかどうかを示す値を取得または設定します。 FooterStyle 列のフッタのスタイルを制御します。 Frozen 列をスクロールするかどうかを示す値を取得または設定します。 GroupFooterStyle グループ化された行のセルをレンダリングするために使用する Styleを取得ま たは設定します。 GroupHeaderStyle グループ化されたヘッダ行のセルをレンダリングするために使用する Style を取 得または設定します。 HeaderDivider 列のヘッダの右端を垂直分割線で描画するかどうかを指定します。 HeadingStyle Inverted DataView または Form DataViewでのヘッダのスタイルを制御します。 Height 列の高さを制御します。 Locked 列の編集をロックするかどうかを指定します。 Merge 特定の列内で、同じ値のセルを持つ隣接する行を結合する場合は、True。 MinWidth 列の最小幅を指定します。 Name 関連するC1DataColumn オブジェクトのキャプションを取得します。 OwnerDraw OwnerDrawCell イベントを発生させるかどうかを指定します。 Style 列の標準の Style を制御します。 Visible 列を表示または非表示にします。 Width コンテナの座標で列幅を設定または取得します。 [C1TrueDBGrid タスク]メニュー [C1TrueDBGrid タスク タスク]メニューでは、データソースの選択、データレイアウトの変更、グリッドキャプションの追加、グリッドの 外観のカスタマイズ、グリッドのフォームへのドッキング、TrueDBGridデザイナへ デザイナへのアクセス アクセスをすばやく簡単に実行できます。 また、 AllowAddNew, AllowUpdate, AllowDelete, FilterBar, AlternatingRowsの各プロパティも設定できます。 [C1TrueDBGrid タスク タスク]メニューにアクセスするには、グリッドの右上隅にあるスマートタグ ( ) をクリックします。 [C1TrueDBGrid タスク タスク]メニューが表示されます。 57 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms [C1TrueDBGrid タスク] タスク]メニューの機能は次のとおりです。 データソースの選択 [データソースの選択] データソースの選択]ボックスのドロップダウン矢印をクリックすると、使用可能なデータソースのリストが開き、新しいデータ ソースを追加できます。新しいデータソースをプロジェクトに追加するには、[プロジェクトにデータソースを追加 プロジェクトにデータソースを追加]をクリックし て、データソース設定ウィザードを開きます。 データソースを選択 データソースを選択すると、さらに[Column タスク タスク]、[クエリの追加 クエリの追加]、[データのプレビュー データのプレビュー]の 3 つのオプションが [C1TrueDBGrid タスク タスク]メニューに追加されます。 58 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms データレイアウト [データレイアウト データレイアウト]ボックスのドロップダウン矢印をクリックすると、Normal、 、 Inverted、Form、GroupBy、MultipleLines、Hierarchial、MultipleLinesFixed などのさまざまな DataView プロパティオ プションのリストが開きます。さまざまなデータビューの詳細については、データ表示テクニック データ表示テクニックを参照してください。 視覚スタイル [視覚スタイル 視覚スタイル]ボックスのドロップダウン矢印をクリックする と、Custom、System、Office2007Blue、Office2007Silver、Office2007Black などのさまざまな VisualStyle プロパティオ プションのリストが表示されます。視覚スタイルの種類については、視覚スタイル 視覚スタイルを参照してください。 59 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms キャプション [キャプション キャプション]ボックスにキャプションを入力すると、グリッドの Caption プロパティが設定されます。 外観 [外観 外観]ボックスのドロップダウン矢印をクリックすると、Standard、Flat、Popup、System などのさまざまな FlatStyle プロパ ティのオプションのリストが開きます。コントロールの外観のさまざまなオプションの詳細については、3D 表示とフラット表示 表示とフラット表示を 参照してください。 追加を有効にする [追加を有効にする 追加を有効にする]チェックボックスを選択すると、AllowAddNew プロパティが True に設定され、新しい行をグリッドに追 加できるようになります。デフォルトはオフです。 Enable Editing [編集を有効にする]チェックボックスを選択すると、AllowUpdate プロパティが True に設定され、グリッドを編集できるように 60 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms なります。デフォルトはオンです。 削除を有効にする [削除を有効にする 削除を有効にする]チェックボックスを選択すると、AllowDelete プロパティが True に設定され、グリッドの行を削除できるよ うになります。デフォルトはオフです。 フィルタバーを有効にする [フィルタバーを有効にする フィルタバーを有効にする]チェックボックスを選択すると、FilterBar プロパティが True に設定され、グリッドの上部にフィル タバーが表示されます。デフォルトはオフです。 行の色を互い違いにする [行の色を互い違いにする] [行の色を互い違いにする]チェックボックスを選択すると、AlternatingRows プロパティが True に設定され、1 行ごとに異な る背景色が交互に表示されます。デフォルトはオフです。 フィルタバーを有効にする [Column タスク タスク]をクリックすると、[Column タスク タスク]メニューが開きます。[Column タスク タスク]メニューの詳細について は、Column タスク]メニュー タスク]メニュー.を参照してください。 デザイナ [デザイナ デザイナ]をクリックすると、TrueDBGridデザイナ デザイナが開きます。TrueDBGridデザイナ デザイナの使用方法の詳細について はC1TrueDBGrid デザイナを使用する デザイナを使用する.を参照してください。 親コンテナにドッキングする/親コンテナでドッキングを解除する [親コンテナにドッキングする 親コンテナにドッキングする]をクリックすると、C1TrueDBGrid の Dock プロパティが Fill に設定されます。 C1TrueDBGrid が親コンテナにドッキングされている場合は、親コンテナから C1TrueDBGrid をドッキング解除するオプション を使用できるようになります。[親コンテナでドッキングを解除する]をクリックすると、C1TrueDBGrid の Dock プロパティが None に設定されます。 クエリの追加(データソースに連結されている場合のみ) [クエリの追加 クエリの追加]をクリックすると、[検索条件ビルダ 検索条件ビルダ]ダイアログボックスが開き、ここでクエリを作成または変更できます。 61 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms [クエリ クエリ]テキストボックスにクエリを入力する代わりに、[クエリ クエリ ビルダ ビルダ]ボタンをクリックして、クエリ ビルダでクエリを構築する こともできます。 > 62 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms データのプレビュー(データソースに連結されている場合のみ) [データのプレビュー データのプレビュー]をクリックすると、[データのプレビュー データのプレビュー]ダイアログボックスが開き、DataSet のデータをプレビューでき ます。 63 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms [Column タスク]メニュー [Column タスク タスク]メニューでは、列のキャプション、データフィールド、入力マスク、集計、キャプションスタイル、列スタイル、お よび列の値項目を設定できます。また Visible, ColumnVisible, EnableDateTimeEditorの各プロパティも設定できます。 [Column タスク タスク]メニューには、グリッドがデータソースに連結されている場合にのみアクセスできます。[Column タスク タスク]メ ニューにアクセスするには、グリッド内の列をクリックするか、[C1TrueDBGrid タスク タスク]メニューから[Column タスク タスク]を選択し ます。 64 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms [Column タスク] タスク]メニューの機能は次のとおりです。 列の選択 [列の選択 列の選択]ボックスのドロップダウン矢印をクリックすると、グリッドにある列のリストが開きます。グリッド内の列をクリックして タスクメニューを開いた場合は、その列が選択されます。 Column キャプション 65 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms [Column キャプション キャプション]ボックスにキャプションを入力すると、列のCaption プロパティが設定されます。 データフィールド [データフィールド データフィールド]ボックスのドロップダウン矢印をクリックすると、データソースにあるフィールドのリストが開きます。 入力マスク [入力マスク 入力マスク]ボックスの省略符ボタンをクリックすると、[入力マスク 入力マスク]ダイアログボックスが開きます。 66 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 集計タイプ [集計タイプ] 集計タイプ]ボックスのドロップダウン矢印をクリックすると、 、 Count、Sum、Average、Min、Max、Std、StdPop、Var、VarPop、Custom などの集計関数のリストが開きます。使用可能 な集計関数の詳細については、 AggregateEnum 列挙体を参照してください。 表示 [表示 表示]チェックボックスを選択すると、選択した列の Visible プロパティが True に設定されます。デフォルトはオンです。 グループ化の際に表示 [グループ化の際に表示 グループ化の際に表示]チェックボックスを選択すると、選択した列の ColumnVisible が True に設定されます。デフォルト はオフです。 DateTimePicker を用いて編集 [DateTimePicker を用いて編集 を用いて編集]チェックボックスを選択すると、選択した列の EnableDateTimeEditor プロパティが True に設定されます。デフォルトはオンです。 Caption スタイル [Caption スタイル スタイル]をクリックすると、選択した列の Caption スタイルエディタ スタイルエディタが開き、スタイル、塗りつぶし効果、画像などの キャプションのプロパティを指定できます。 67 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Column スタイル [Column スタイル スタイル]をクリックすると、選択した列の Column スタイルエディタ スタイルエディタが開き、スタイル、塗りつぶし効果、画像などの 列のプロパティを指定できます。 68 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ValueItems エディタ [ValueItems エディタ エディタ]をクリックすると、選択した列の ValueItems エディタ エディタが開き、列の ValueItem の表示と動作のプロパ ティを指定できます。 69 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid タスク [C1TrueDBGrid タスク タスク]をクリックすると、[C1TrueDBGrid タスク タスク]メニューに戻ります。[C1TrueDBGrid タスク タスク]メニューの 詳細については、[[C1TrueDBGrid タスク]メニュー タスク]メニューを参照してください。 親コンテナにドッキングする [親コンテナにドッキングする 親コンテナにドッキングする]をクリックすると、C1TrueDBGrid の Dock プロパティが Fill に設定されます。 C1TrueDBGrid が親コンテナにドッキングされている場合は、親コンテナから C1TrueDBGrid をドッキング解除するオプショ ンを使用できるようになります。[親コンテナでドッキングを解除する]をクリックすると、C1TrueDBGrid の Dock プロパティが None に設定されます。 クエリの追加 [クエリの追加 クエリの追加]をクリックすると、[検索条件ビルダ 検索条件ビルダ]ダイアログボックスが開き、ここでクエリを作成または変更できます。 データのプレビュー [データのプレビュー データのプレビュー]をクリックすると、[データのプレビュー データのプレビュー]ダイアログボックスが開き、DataSet のデータをプレビューでき ます。 コンテキストメニュー グリッドの任意の位置で右クリックすると、TrueDBGrid for WinForms のコンテキストメニューが表示されます。これは、Visual Studio が .NET コントロールに提供するコンテキストメニューです。C1TrueDBGrid のコンテキストメニューには、いくつかの機 能が追加されています。 70 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コンテキストメニューのコマンドは、次のように動作します。 [バージョン情報] このコマンドを指定すると、このグリッドの情報ボックスが表示されます。これは、グリッドのビルド番号を知りたい場合に便利 です。 [フィールドの取得]及び[フィールドのクリア] これらのコマンドを指定すると、グリッドの RetrieveFields メソッドおよび ClearFields メソッドが起動します。RetrieveFields は、データソースに戻り、列のすべての書式設定情報および基礎データを取得します。ClearField は、列の既存の書式設定を 削除します。 [デザイナの起動] このコマンドにより、C1TrueDBGrid デザイナが起動されます。このデザイナを使用すると、開発者は列の追加または削除や、 DataColumn、DisplayColumn、Split の各プロパティの設定、列の順番の設定、その他さまざまなグリッドデザインの外見の 設定を行えます。詳細はC1TrueDBGrid デザイナを使用する デザイナを使用するrを参照してください。 [レイアウトの保存]及び[レイアウトの読み込み [レイアウトの保存]及び[レイアウトの読み込み…]] これらのコマンドでは、グリッドの現在のレイアウトを xml ファイルに保存したり(style の各プロパティ、列の幅など)、xml ファ イルから取得して新たなグリッドの設定として読み込んだりします。 [切り取り]、[コピー]、[貼り付け]及び[削除] これらのコマンドは、Visual Studio の [Edit] メニューにあるコマンドと同じです。[切り取り] ([Ctrl]+[X] キー) を選択すると、グ リッドが Visual Studio のフォームからクリップボードに移動します。[コピー] ([Ctrl]+[C] キー) を選択すると、フォーム上のグ リッドを変更することなく、グリッドがクリップボードにコピーされます。[貼り付け] ([Ctrl]+[V] キー) を選択すると、グリッドがク リップボードからフォームにコピーされます。[削除] ([Del] キー) を指定すると、グリッドは削除され、クリップボードにも移動しま せん。[削除] コマンドを取り消すには、Visual Studio の [編集] メニューから [元に戻す] ([Ctrl]+[Z] キー) を選択します。 [最前面へ移動]及び[最背面へ移動] 71 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms これらのコマンドによって、グリッドと Visual Studio のフォームにある他のオブジェクトの z 順を制御できます。 [最前面へ移 動] ([Ctrl]+[J] キー) を選択すると、グリッドは他のオブジェクトの前に配置されます。 [最背面へ移動] ([Ctrl]+[K] キー) を選択 すると、グリッドはオブジェクトの後ろに配置されます。 [コードの表示] このコマンドを選択すると、グリッドのコードウィンドウが表示されます。このウィンドウを使用して、グリッドのイベントを処理す るコードを表示したり、編集することができます。 [グリッドに合わせて整列] このコマンドを選択すると、グリッドコントロールの外枠が自動的にフォーム上の設計時のグリッド線に揃えられます 72 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 実行時の操作 以下のトピックでは、グリッドアプリケーションのエンドユーザーが実行時に TrueDBGrid for WinForms とどのように対話す るかについて説明します。ユーザーには、次の操作の一部または全部を実行する機能を提供できます。 マウスまたはキーボードを使用して、グリッド内を移動する。 行または列を選択する。 レコードを追加、更新、および削除する。 グリッドのレイアウトを設定する。 以下の項では、特定のユーザー操作に関連するプロパティおよびイベントについて説明しています。 移動とスクロール 以下の各項では、グリッドのデフォルトの移動とスクロールの動作について説明します。[Tab] キーや矢印キーの動作のほ か、行やスプリットの境界に達した場合の現在のセルの位置まで完全に制御できます。 マウスナビゲーション操作 ユーザーが現在のセル以外のセルをクリックすると、BeforeRowColChange イベントが発生します。このイベントがキャンセ ルされないかぎり、クリックされたセルが現在のセルになります。その後、更新操作が完了すると、 RowColChange イベント が発生します。ただし、次の場合は例外です。 AllowFocus プロパティが False に設定されている列またはスプリットのセルをユーザーがクリックし、そのセルが現在 の行にある場合、現在のセルは変わりません。 AllowFocus プロパティが False に設定されている列またはスプリットのセルをユーザーがクリックし、そのセルが現在 の行にない場合、現在の行は変わりますが、列にあるフォーカスは変わりません。 現在のセルが変更された後で、BeforeColUpdate イベントがキャンセルされた場合、現在のセルは変わりません。 現在の行が変更された後で、ユーザーが別の行のセルをクリックし、 BeforeUpdate イベントがキャンセルされた場 合、現在のセルは変わりません。 ユーザーは、マウスを使ってグリッドのスクロールバーを操作し、グリッドの表示領域外にあるセルを表示することもできます。 垂直スクロールバーは行を、水平スクロールバーは列を管理します。HScrollBar プロパティは、水平スクロールバーを表示す るかどうかを制御し、VScrollBar プロパティは垂直スクロールバーを制御します。 スクロールは、常にセル単位で行われます。どちらの方向にもピクセル単位でスクロールすることはできません。 スクロールバーは現在のセルを変更しないことに注意してください。したがって、現在のセルがグリッド内に表示されていない 場合があります。 コード内で垂直スクロール操作に応答するには、FirstRowChange イベントを使用します。水平スクロール操作に応答するに は、 LeftColChange イベントを使用します。 右端の列をクリックする グリッドには、常に左端の列(最初の表示列)の全体が表示されます。反対に、通常、右端の列は部分的に表示されます。こ の部分的に表示されている右端の列がクリックされた場合の動作は、グリッドのExposeCellMode プロパティで制御します。 ExposeCellMode プロパティのデフォルト値は、ExposeCellModeEnum.ScrollOnSelectです。部分的に表示されている右 端の列がクリックされると、この列全体が表示されるようにグリッドが左にスクロールします。部分的に表示されている右端の 列をクリックすると、必ずグリッドが左に移動するため、グリッドをクリックして編集を開始することが多い場合、これは好ましい 動作ではありません。 ExposeCellMode をExposeCellModeEnum.ScrollOnEditに設定すると、右端に表示されている列をクリックしても、グリッ ドはスクロールしません。ただし、セルを編集しようとすると、グリッドが左にスクロールして、その列全体が表示されます。 73 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Microsoft Excel はこのように動作します。ユーザーにとっては、これが最も使い慣れた設定です。 ExposeCellMode をExposeCellModeEnum.ScrollNeverに設定すると、セルを編集しようとしても、グリッドがスクロールし て右端の列が表示されることがありません。列の一部しか表示されていないと、編集作業が難しくなります。この設定を使用す るのは、セルの編集に必要な領域が常に十分あることがわかっている場合や編集を許可していない場合に、グリッドが誤って 移動しないようにするためです。 ExposeCellMode プロパティは、ユーザーが右端に表示されている列をクリックした場合の動作を制御します。右端の列に コード(グリッドのCol プロパティを設定)やキーボード操作によって移動した場合、グリッドは常にスクロールして、その列全体 が表示されます。 キーボードナビゲーション操作 TrueDBGrid for WinForms では、キーボードショートカットが提供されていますので、ユーザーの実行時操作に役に立ちま す。デフォルトでは、ユーザーは、矢印キー、Enter キー、Tab キー、PageUpキー、[PageDown] キー、Home キー、および End キーを使ってグリッド内を移動できます。 キー 動作 [↑]/[↓] キー 現在のセルを隣の行に移動します。 [←]/[→] キー AllowArrows プロパティが True (デフォルト)の場合、これらのキーは現在のセルを隣の 列に移動します。 AllowArrows プロパティが False の場合、これらのキーは、コントロール間の移動に使用 され、セル間の移動には使用できません。 [Enter] キー デフォルトでは、[Enter] キーの動作は [→] キーと同じで、現在のセルを左から右へ隣の列 に移動します。[Enter] キーの動作を変更するには、DirectionAfterEnter プロパティを使 用します。セル編集時に、Enter キーで編集を保存し、次のセルに移動します。 [Tab] キー TabAction プロパティの値が Control Navigation (デフォルト)の場合、[Tab] キーは、タ ブオーダーの指定に従って、フォーム上の次のコントロールにフォーカスを移動します。 TabAction プロパティが ColumnNavigation または GridNavigation の場合、[Tab] キーは、現在のセルを次の列に移動します。また、[Shift] + [Tab] キーを使用して、現在の セルを前の列に移動します。列とグリッドの移動の違いについては、次の項を参照してくだ さい。 [PageUp]/[PageDown] キー グリッドのページ全体を1度に上下にスクロールします。垂直スクロールバーとは異なり、 [PageUp] キーおよび [PageDown] キーは、グリッドに表示されている行の数に応じて、現 在の行を変更します。ページアップすると、表示領域内の最初の行が現在の行になります。 ページダウンすると、AddNew 行も含めて、表示領域内の最後の行が現在の行になりま す。現在の列は変化しません。 [Home]/[End] キー 現在のセルを最初の列または最後の列に移動します。必要に応じて、グリッドが水平方向 にスクロールして、現在のセルが表示されます。現在の行は変化しません。現在のセルが 編集中の場合、[Home] キーと [End] キーは、挿入ポイントをセルのテキストの先頭または 末尾に移動します。 [F2] データシート内の編集モード(挿入ポイントを表示)とナビゲーションモードの間で切り替えま す。フォームまたはレポートの操作時にナビゲーションモードを離れるには、[Esc]を押しま す。 [F4] このキーはコンボボックスの表示/非表示にします。 [Alt]+ 下矢印 このキーの組み合わせを使ってコンボボックス(C1TrueDBG など)を表示できます。 ALT + LEFT ARROW 74 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms キー 動作 ALT+RIGHT ARROW [Delete] 〈Delete〉ボタンは行を削除します。編集モードでは、[Delete]キーはカーソルの右側にある コンテンツを削除して、セルの選択されたコンテンツを削除します。 スペースバー [スペースバー]キーは、ボタンクリック、およびチェックボックスとラジオボタンの ON/OFF を開始します。 [Ctrl]+[C] このキーの組み合わせは選択されたコンテンツをクリップボードにコピーします。 [Ctrl]+[V] このキーの組み合わせはクリップボードのコンテンツを選択された位置に貼り付けます。 [Ctrl]+[X] このキーの組み合わせは選択されたコンテンツを切り取ってクリップボードにコピーします。 [BackSpace]、[Ctrl]+[H] 編集モードでは、[BackSpace]キーまたは[Ctrl]+[H]キーの組み合わせを使ってカーソルの 左側のコンテンツを削除して、セルからコンテンツを削除できます。 [Tab] [Tab]キーは、すべてのコンテンツの変更を保存して選択された現在のセルを離れて、セル の編集モードを終了します。 [Insert] セルの編集モードでは、[Insert]キーはテキストをセル内に入力する方法を変更します。 [Insert]キーがアクティブのとき、入力されたテキストが既存のコンテンツを上書きします。 [Ctrl]+ 上/下矢印 これらのキーの組み合わせにより、リストボックス内を移動できます。[Ctrl]+ 上矢印キーの 組み合わせの場合、リストボックス内の前の項目まで上方に移動できます。[Ctrl]+ 下矢印 キーの場合、次の項目まで下方に移動できます。 行の境界での移動 グリッドの行の境界、つまり最初の列と最後の列の間での移動は、WrapCellPointer プロパティによってその動作が決まりま す。次の説明では、AllowArrows プロパティが True に、TabAction プロパティが ColumnNavigation または GridNavigation のいずれかに設定されているとします。 キー 動作 [←]/[→] キー WrapCellPointer プロパティが True の場合、現在のセルは行の境界を越えて移動しま す。現在のセルが最後の列にある場合に [→] キーを押すと、現在のセルが次の行の最初 の列に移動します。現在のセルが最初の列にある場合に [←] キーを押すと、現在のセル が前の行の最後の列に移動します。 WrapCellPointer プロパティが False (デフォルト)の場合、これらのキーによって、行の境 界にある現在のセルを移動することはできません。 [Tab] キー TabAction プロパティが ColumnNavigation の場合、カーソルは隣の行に移動せ ず、WrapCellPointer プロパティは無視されます。現在のセルが最後の列にある場合に [Tab] キーを押すと、フォーカスがタブオーダーの次のコントロールに移動します。現在の セルが最初の列にある場合に [Shift] + [Tab] キーを押すと、フォーカスがタブオーダーの 前のコントロールに移動します。 TabAction プロパティが GridNavigation、WrapCellPointer が True の場合、[Tab] キーや [Shift]+[Tab] キーを押すと、現在のセルが次または前の行に移動しま す。WrapCellPointer が False の場合、現在のセルは行の境界を越えて移動しません。 スプリットの境界での移動 グリッドのスプリットの境界での移動は、TabAcrossSplits プロパティの設定に基づいて、次のように動作します。 75 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms キー 動作 [←]/[→] キー TabAcrossSplits プロパティが True の場合、これらのキーを押すと、現在のセルがスプ リットの境界を越えて前後のスプリットに移動します。 TabAcrossSplits プロパティが False (デフォルト)の場合、スプリットの境界でのこれらの キーの動作は、行の境界での各キーの動作と同じになります。これらのキーによって現在 のセルを別のスプリットに移動させるには、移動先のスプリットのAllowFocus プロパティが True である必要があります。 [Tab] キー [Tab] キーおよび [Shift]+[Tab] キーの動作は、上の矢印キーの説明と同様 に、TabAcrossSplits の設定に従います。 セル間の移動を制限する BeforeRowColChange イベントを使用すると、現在のセルが変更されたかどうかに関係なく、ユーザーが別のセルに移動で きないようにできます。現在のセルが別のセルに移動しないようにするには、Cancel 引数を True に設定します。 BeforeColUpdate イベントを使用すると、現在のセルが変更された場合に、他のグリッドセルに移動する前にセルの値を検 査できます。入力された値が無効である場合は、Cancel 引数を True に設定して、現在のセルが変更されないようにできま す。また、警告音を鳴らしたり、エラーメッセージを表示することもできます。このように、BeforeColUpdate イベントでは、柔 軟にユーザーの入力を検証したり、セル間の移動を制限することができます。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_BeforeColUpdate(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.BeforeColUpdateEventArgs) Handles C1TrueDBGrid1.BeforeColUpdate Dim CharCode As Integer If e.ColIndex = 1 Then ' 列 1 のデータは大文字で始まる必要があります CharCode = Asc(Me.C1TrueDBGrid1.Columns(1).Text) If CharCode > 64 And CharCode < 91 Then Exit Sub ' ユーザーに警告メッセージを表示します MessageBox.Show("Last name must start with upper case") ' データの検証に失敗したため、ユーザーに別のセルへの移動を禁止します e.Cancel = True End If End Sub C# コードの書き方 C# private void c1TrueDBGrid1_BeforeColUpdate(object sender, C1.Win.C1TrueDBGrid.BeforeColUpdateEventArgs e) { int CharCode; if ( e.ColIndex == 1 ) { // 列 1 のデータは大文字で始まる必要があります CharCode = this.c1TrueDBGrid1.Columns[1].Text[0]; if ( CharCode > 64 && CharCode < 91 ) return; 76 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms // ユーザーに警告メッセージを表示します MessagBox.Show("Last name must start with upper case"); // データの検証に失敗したため、ユーザーに別のセルへの移動を禁止します e.Cancel = true; } } 選択と移動 以下のセクションでは、ユーザーが列を選択する方法、選択した列を移動する方法、および行を選択する方法について説明し ます。設計時またはコード内で、これらの操作の一部または全部を制限できます。 列を選択する AllowColSelect プロパティが True の場合、ユーザーは、マウスを使用して、個別の列または列の範囲を選択できます。隣 接していない列を選択することも可能です。 ユーザーが、選択されていない列のヘッダをポイントすると、マウスポインタが下向き矢印に変わり、その列を選択できること が示されます。 ユーザーが列のヘッダをクリックすると、その列は選択されて強調表示されます。それまで選択されていた列や行がある場 合、それらの選択は解除されます。 ユーザーが列の範囲を選択するには、範囲に入れる最初の列のヘッダをクリックして選択した後で、[Shift] キーを押したまま 他の列のヘッダをクリックして、範囲に入れる最後の列を選択します。必要に応じて、水平スクロールバーを使用すると、他の 列を表示できます。 実行時に、選択されている列を操作するには、SelectedColumnCollectionを照会する必要があります。これは、選択されて いるすべての列のC1DataColumn オブジェクトのコレクションです。たとえば、列5から列10までを選択する と、SelectedColumnCollection には、各列に対応する6つの C1DataColumn オブジェクトがメンバとして格納されます。こ 77 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms の機能を使用して、列の表示プロパティを直接変更できます。次のコードは、Item プロパティを使って C1DisplayColumn の プロパティにアクセスし、選択されている最初の列の前景色を赤色に変更しています。 Visual Basic コードの書き方 Visual Basic Dim dc as C1TrueDBGrid.C1DataColumn dc = Me.C1TrueDBGrid1.SelectedCols(0) Me.C1TrueDBGrid1.Splits(0).DisplayColumns(dc).Style.ForeColor = System.Drawing.Color.Red C# コードの書き方 C# dc as C1TrueDBGrid.C1DataColumn; dc = this.c1TrueDBGrid1.SelectedCols[0]; this.c1TrueDBGrid1.Splits[0].DisplayColumns[dc].Style.ForeColor = System.Drawing.Color.Red; グリッドのSelChange イベントで Cancel 引数を True に設定することで、実行時に列が選択されないようにできます。 列を移動する AllowColMove プロパティが True の場合、ユーザーは、選択しておいた列をまとめて別の場所に移動できます。それには、 選択した列のヘッダ領域内でマウスのボタンを押します。ポインタが矢印に変わり、矢印の先端には列ヘッダボックスが、矢印 の右下隅には小さな四角形が表示されます。また、2つの赤い三角形で表される位置マーカが列の左端に表示されて、列を 強調表示します。 位置マーカをドラッグして、選択した列の移動先を指定します。ポインタが列の右端をまたいで移動するたびに、位置マーカの 位置が変わります。 78 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms マウスのボタンを離して、操作を完了します。これにより、選択した列がただちに位置マーカの左に移動します。移動した列は 選択されたままです。 ユーザーがマーカーを現在選択されている範囲内の位置へドラッグしても、移動は発生しません。選択されていない列をイン タラクティブに移動することはできません。 移動が行われると、影響を受けるすべての列について、列コレクションのインデックスが調整されます。 ColMove イベントで Cancel 引数を True に設定することで、実行時に対話式に列が移動されないようにできます。 実行時に列を移動する AllowColMove プロパティが True の場合は、ユーザーも実行時にも列を移動できます。C1DisplayColumn には Order プ ロパティがないため、実行時に列を移動するには、C1DisplayColumnCollection を操作する必要がありま す。C1DisplayColumnCollection は、スプリット内のすべての列を保持しています。したがって、列を移動するには、このコレ クションから DisplayColumn を削除し、次にその列を新しい位置に置く必要があります。これは、コレクションでよく使用され る RemoveAt メソッドと Insert メソッドによって、簡単に実行できます。次に、デフォルトのスプリットの最初の2列を入れ替え るコード例を示します。 Visual Basic コードの書き方 Visual Basic Dim dc as C1TrueDBGrid.C1DisplayColumn dc = Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1) Me.C1TrueDBGrid1.Splits(0).DisplayColumns.RemoveAt(1) Me.C1TrueDBGrid1.Splits(0).DisplayColumns.Insert(0, dc) C# コードの書き方 C# dc as C1TrueDBGrid.C1DisplayColumn; dc = this.c1TrueDBGrid1.Splits(0).DisplayColumns[1]; 79 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.c1TrueDBGrid1.Splits[0].DisplayColumns.RemoveAt(1); this.c1TrueDBGrid1.Splits[0].DisplayColumns.Insert(0, dc); 列のソート AllowSort プロパティが True(デフォルト)の場合、ユーザーは列ヘッダーのクリックによって列をソートできます。マウスが列 ヘッダーの上に置かれたとき、ヘッダーは次のように強調表示して表示されます。 ユーザーが列ヘッダーをマウスで1回クリックした場合、列がソートされ、ソートの方向を示すソートインジケータ矢印が列ヘッ ダー内に表示されます。 ユーザーがヘッダーを再度クリックすると、ソートが反転し、ソートインジケータ矢印の方向も反転します。 AllowColSelect プロパティを False に設定した場合、ソート時に列は選択されません。 ユーザーが実行時に列をソートするのを禁止するには、AllowSort プロパティを False に設定します。詳細については、列の 列の ソートを無効にする トピックを参照してください。 行を選択する 80 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid では、行を選択する方法も簡単です。ポインタを行の左にあるレコードセレクタに移動すると、小さな矢印が表 示され、その行を選択できることが示されます。このレコードセレクタをクリックすると、その行が選択されます。隣接する行の 範囲を選択するには、[Shift] キーを押したまま矢印キーを移動します。これで、ユーザーが選択した行の範囲にあるすべて のフィールドのセルが選択されます。隣接していない行の範囲を選択するには、[Ctrl] キーを押したまま、選択する行をクリッ クします。これで、ユーザーが選択した隣接していない一連の行にあるすべてのフィールドのセルが選択されます。 実行時に、選択されている行を検出するには、 SelectedRowCollectionを照会する必要があります。これは、選択されてい るすべての行のインデックスを含むコレクションです。たとえば、行5から行10までを選択すると、SelectedRowCollection に は6つのメンバが格納されます。各メンバは、選択されている行の絶対位置に対応する整数値です。 セルの範囲を選択する C1TrueDBGrid のセルの選択に関する機能は、Microsoft Excel の機能にたいへんよく似ており、いつでも複数のセルを選択 できます。セルをクリック&ドラッグするか、矢印キーを使用して、セルの範囲を選択できます。また、Shift キーや Ctrl キーを 押しながらレコードセレクタ順番にクリックすると、複数の行を選択できます。この範囲は、最初にセルがある行または列に制 限されませんが、隣接していないセルを同時に選択することはできません。 セルの範囲を選択すると、グリッドのSelRange プロパティが True になります。 SelectedRowCollection コレクション とSelectedColumnCollection コレクションのどちらか一方だけでは、選択されているセルを特定できません。実行時には、 これら両方のコレクションを評価し、その共通部分を取得することによって、選択されているセルの範囲を特定できます。たと えば、ユーザーが行2列2のセルをクリックし、行4列4のセルまでドラッグすると、SelectedRowCollection コレクションには 整数2、3、および4が格納され、SelectedColumnCollection コレクションには列2、3、および4の C1DataColumn オブジェ クトが格納されます。このことから、列2~4と行2~4の9個のセルの範囲が選択されていることを実行時に特定できます。 サイズ変更 以下のセクションでは、ユーザーが行および列のサイズを変更する方法について説明します。設計時またはコード内で、これ らの操作の一部または全部を制限できます。 行をサイズ変更する AllowRowSizing プロパティが RowSizingEnum.AllRows または RowSizingEnum.IndividualRows のどちらかに設定さ れている場合は、実行時に行の高さを変更できます。レコードセレクタ列の行分割線にポインタを移動すると、ポインタが垂直 の両矢印に変わり、それをドラッグしてすべての行の高さを調整できるようになります。 ポインタを上にドラッグすると行は小さくなり、下にドラッグすると大きくなります。プロパティが AllRows に設定されている場合 は、グリッドのすべての行が同じ高さにサイズ変更されます。個別の行をサイズ変更することもできます。プロパティが IndividualRows に設定されている場合は、各行を独立してサイズ変更できます。 また、グリッドにレコードセレクタ列が表示されていない場合(RecordSelectors プロパティが False)は、対話式に行の高さを 変更することができません。 サイズ変更操作が完了すると、グリッドのRowHeight プロパティが調整されます。 RowResize イベントで Cancel 引数を True に設定することで、実行時に行がサイズ変更されないようにできま 81 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms す。AllowRowSizing が RowSizingEnum.None に設定されていたり、RowResize イベントをキャンセルしている場合でも、 コード内では常に RowHeight を変更できます。 列をサイズ変更する AllowSizing プロパティが True の場合、ユーザーは、実行時にそれぞれの列幅を個別に調整できます。列のヘッダの右端 にある分割線にポインタを合わせると、水平の両矢印に変わり、その列をドラッグしてサイズ変更できるようになります。 ポインタを左にドラッグすると列が小さくなり、右にドラッグすると大きくなります。サイズ変更操作が完了すると、列の Width プロパティが調整されます。 グリッドに列ヘッダが表示されていない場合(ColumnHeaders プロパティが False)は、グリッドの列幅を変更できません。 ポインタを左いっぱいまでドラッグした場合、列の Width プロパティの設定は元のまま維持されますが、 Visible プロパティは False に設定されます。再度列を表示するには、その前にある列の分割線の右側にポインタを合わせます。ポインタは右矢印 付きの垂直線に変わります。 ポインタを右へドラッグすると、新しい列幅が決まり、列の Visible プロパティが True に戻されます。 列をサイズ変更する方法には、AutoSize メソッドもあります。コード内でこのメソッドを使用して、特定の列オブジェクトに自動 サイズ変更を指定できます。列が自動サイズ変更されると、その列に表示されている最も長いフィールドに合わせて幅が調整 されます。AutoSize が呼び出されたときに表示されていない行にあるレコードは、幅の計算に入りません。また、指定された 列が非表示になっていたり、表示範囲外までスクロールされている場合は、トラップ可能なエラーが発生します。 ColResize イベントで Cancel 引数を True に設定することで、実行時に列がサイズ変更されないようにできま す。AllowSizing が False の列であっても、コード内では常に列の幅を変更できます。 データベースの操作 実行時にユーザーに許可される編集、削除、および追加の権限は、AllowUpdate, AllowDelete, AllowAddNew の各プロ パティによって制御されます。これらのプロパティのデフォルト値を次に示します。 プロパティ デフォルト値 AllowUpdate True 82 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms プロパティ デフォルト値 AllowDelete False AllowAddNew False これらのプロパティは、実行時のユーザーによるグリッドの操作を制御するだけであることに注意してください。DataSet などの 連結コントロールやアプリケーションのコードによってデータベースを操作できるかどうかは制御しません。 データを編集する グリッドのデータを編集するには、C1TrueDBGrid の AllowUpdate プロパティを True に設定する必要があります。デフォル ト値は True です。 ユーザーがセルに移動して入力を開始すると、セルのデータは入力された内容に置き換えられます。また、現在のセル内をク リックするとグリッドが編集モードになり(EditActive プロパティが True)、ユーザーがセルのデータを変更できるようになりま す。 編集中は、[←] キーや [→] キーを使用して、セル内でカーソルを移動できます。カーソルがセルのテキストの先頭または末 尾にある場合に[←] キーまたは [→] キーを使用すると、編集を終了して隣のセルに移動できます。 [↑] キーまたは [↓] キーを使用すると、編集を終了し、現在の行の1つ上または下の行のセルに移動できます。また、[Enter] キーを押すと、現在 のセルから移動せずに編集を終了できます。 行内の1つ以上のセルが変更されると、レコードセレクタ列に鉛筆アイコンが表示され、行内のデータが変更されたことを示し ます。鉛筆アイコンは、グリッドの EditActive プロパティが True であることを意味するのではありません。これは、グリッドの DataChanged ロパティが True であることを意味します。現在のセルに対して行われた変更を取り消すには、[Esc] キーを 押します。また、別の行に移動する前であれば、現在の行内の任意の列に再度移動して [Esc] キーを押すと、そのセルを元 の値に復元できます。行内にある変更されたすべてのセルでこの手順を繰り返すと、レコードセレクタの鉛筆アイコンは消えま す。 別の行をクリックしたり、[↑] キーまたは [↓] キーを押して別の行に移動すると、変更されたレコードに基づいてデータベース が更新されます。正しく更新が行われると、鉛筆アイコンは消えます。どのグリッド列も変更されていない場合は、行を移動し ても更新は行われません。 新しいレコードを追加する グリッドに新しいレコードを対話式に追加するには、C1TrueDBGrid のAllowAddNew プロパティを True に設定する必要が あります。デフォルト値は False です。 AllowAddNew プロパティが True の場合は、最後のレコードの後に、レコードセレクタ列にアスタリスク(*)で示される空の AddNew 行が表示されます。追加操作を開始するには、AddNew 行をクリックするか[↓] キーを使ってAddNew行に移動 し、新しいデータを入力します。最初の文字を入力すると、AddNew 行の前に空の行が挿入されます。新しく挿入された空の 行が現在の行になり、グリッドはOnAddNew イベントを発生します。 この時点で、新しい行はグリッド内にだけ存在します。この行にはブックマークがなく、まだ物理データベースレコードを表して いません。他のデータ行または AddNew 行に移動すると、新しい行が基礎データソースに追加されます。 レコードを削除する グリッドを使ってレコードを削除するには、C1TrueDBGrid の AllowDelete プロパティを True に設定する必要があります。 デフォルト値は False です。 レコードを削除するには、ユーザーは、レコードセレクタをクリックして削除する行を選択し、次に [Del] キーを押します。一度 に削除できるレコードは1つだけです。複数のレコードを選択して [Del] キーを押しても、選択したレコードをすべて削除するこ とはできません。 レコードを削除するには、グリッドが [Del] キーを受け取ることができるように、グリッドにフォーカスがある必要があります。グ リッドのレコードセレクタの列をクリックしても、グリッドにフォーカスを与えることにはなりません。ただし、ユーザーがレコードセ 83 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms レクタの列をクリックしたときに必ずグリッドにフォーカスが移動するようにする場合は、次のコード例のように、グリッド のSelChange イベントでグリッドにフォーカスを与えます。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_SelChange(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.CancelEventArgs) Handles C1TrueDBGrid1.SelChange Me.C1TrueDBGrid1.Focus() End Sub C# コードの書き方 C# private void C1TrueDBGrid1_SelChange(object sender, C1.Win.C1TrueDBGrid.CancelEventArgs e) { this.c1TrueDBGrid1.Focus(); } グリッド エディタのカスタマイズ 以下のセクションでは、カスタム グリッド エディタを作成および使用する方法について説明します。 カスタム エディタの使用 組み込みエディタでは多くの柔軟性と機能が提供されていますが、場合によっては外部コントロールを特別なエディタとして使 用できます。たとえば、数値入力用ドロップダウン電卓を提供する C1NumericEdit コントロール、複数列リストから選択する ためのエディタ、またはビジネスオブジェクトの編集用に自分で記述した特別なコントロールを使用できます。 注意 注意:C1NumericEdit コントロールは Input for WinForms コントロールの1つです。C1NumericEdit コントロールの 詳細については、Input for WinForms のマニュアル ComponentOne HelpCentralから入手可能)を参照してください。 基本の Control クラスから派生するコントロールはすべて、基本グリッドエディタとして使用できます。IC1EmbeddedEditor インターフェース インターフェースを実装するコントロールは、グリッドとのより優れた統合とより高度な機能を提供できま す。IC1EmbeddedEditor インターフェース インターフェースの詳細については、Editor プロパティを参照してください。 コントロールをカスタムエディタとして使用するには、Editor プロパティを使用し、このコントロールのインスタンスをグリッド列 に関連付けるだけで済みます。コードでこれを行うには、Editor プロパティを使用します。それ以降は、コントロールはグリッド によって自動的に使用されます。 たとえば、C1NumericEdit コントロールをグリッドエディタとして使用するには、以下の手順に従います。 1. C1TrueDBGrid コントロールと C1NumericInput コントロールをフォームに追加します。 2. C1NumericInput コントロールの場合、プロパティウィンドウ内か、Form_Load イベントに次のコードを追加すること で、BorderStyle プロパティを None に、Visible プロパティを False に設定します。 Visual Basic コードの書き方 Visual Basic ' カスタムエディタをセットアップします。 Me.C1NumericEdit1.BorderStyle = BorderStyle.None Me.C1NumericEdit1.Visible = False 84 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# // カスタムエディタをセットアップします。 this.c1NumericEdit1.BorderStyle = BorderStyle.None; this.c1NumericEdit1.Visible = false; 3. Form_Load イベントで、カスタムエディタをグリッド列に割り当てます。 Visual Basic コードの書き方 Visual Basic Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' カスタムエディタをグリッドに割り当てます。 Me.C1TrueDBGrid1.Columns(0).Editor = Me.C1NumericEdit1 End Sub C# コードの書き方 C# private void Form_Load(object sender, EventArgs e) { // カスタムエディタをグリッドに割り当てます。 this.c1TrueDBGrid1.Columns[0].Editor = this.c1NumericEdit1; } プロジェクトを実行し、最初の列のいくつかの値を編集します。グリッドが C1NumericEdit コントロールをどのように配置して 初期化してセル値を編集できるようにするかに注意してください。セルの編集を完了したら、別のセルをクリックするか、[Tab] キーを押して次のセルに移動します。新しい値がこのセルに適用されていることに注意してください。 その他のユーザー操作機能 TrueDBGrid for WinForms では、実行時に、その他のデータ表示や操作機能をユーザーに提供することができます。詳細 については、次のトピックを参照してください。 CellTips の状況依存ヘルプ スクロールトラッキングと スクロールトラッキングとScrollTips 階層化データの表示 階層化データのドロップダウン表示 列のグループ化 85 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms データ連結 以下のセクションでは、ユーザーがデータソースに連結するおよび非連結列の作成と使用方法について説明します。また、連 結せずにデータを表示する方法も説明します。 TrueDBGrid for WinForms をデータソースに連結する .NET の, C1TrueDBGrid は、任意の ADO.NET データソースに簡単に連結できます。C1TrueDBGrid を使用すると、コードを ほとんどまたはまったく必要とせずに、完全なナビゲーション機能を持つデータベースブラウザをわずかな時間で作成できま す。 TrueDBGrid コントロール(C1TrueDBGrid )を ADO.NET DataSource に関連付けるには、グリッドのプロパティを同じフォー ム上にある DataSource の名前に設定します。DataSource プロパティは、コードまたは Visual Studio のプロパティウィンド ウを使って設定できます。アプリケーションでこれだけの操作を行うだけで、C1TrueDBGrid にデータベースまたは DataTable を完全に認識させることができます。 このようなリンクを設定すると、C1TrueDBGrid および DataSet は、お互いに相手が実行した操作を自動的に認識し、それら に応答します。このように、アプリケーションの開発は容易です。 グリッドのレイアウトの保持 実行時にSetDataBinding メソッドを使用してグリッドをバインドできます。たとえば、以下のコードは DSCustomers データ ソースの Customers テーブルにC1TrueDBGrid コントロールをバインドします。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.SetDataBinding(Me.DsCustomers.Customers, "") C# コードの書き方 C# this.c1TrueDBGrid1.SetDataBinding(this.DsCustomers.Customers, ""); DataSource がコードを使用してリセットされると、グリッド内のデータがすべて表示され、デザイナによって作成された初期レ イアウトは維持されません。 HoldFields パラメータを True に設定して SetDataBinding メソッドを使用することで、グリッド のレイアウトを設計時点の状態に維持することができます。たとえば、次のようになります。 Visual Basic コードの書き方 Visual Basic C1TrueDBGrid1.SetDataBinding(Me.DsCustomers.Customers, "", True) C# コードの書き方 C# this.c1TrueDBGrid1.SetDataBinding(this.DsCustomers.Customers, "", true); SetDataBinding(Object, String, Boolean) メソッドを使用する別の例については、チュートリアル チュートリアル2:C1TrueDBGrid で SQL クエリーの結果を使用する クエリーの結果を使用するを参照してください。 SetDataBinding メソッドを引数なしで使用して、バインドされていないグリッドを作成できることに注意してください。詳細につ 86 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms いては、DataSource に連結せずにデータを表示する に連結せずにデータを表示するを参照してください。 非連結列 通常、C1TrueDBGrid は、連結されたデータベースフィールドから取得したデータを自動的に表示します。しかし、データベー スフィールドから派生される列、またはデータベース内の情報とは無関係な(または、ゆるやかな関係の)列によって、レイアウ ト内のフィールドを補完できるとよい場合もあります。たとえば、データベースに Balance (収支)フィールドがある場合、その フィールドの代わりに、Credit (貸方)と Debit (借方)の2つの列を表示して、正数と負数を個別に示す場合です。また、別の データベース内のデータを検索したり、フィールドデータを別の形式に変換(数値コードから説明テキストへのマッピングなど) する場合も考えられます。 このようなタスクを行うには、非連結列を使用できます。非連結列は、データベースに連結されているグリッド内にあるが、デー タベースフィールドに直接結び付けられていない列を指します。 DataField プロパティは設定されていない(DataField プロパティが空の文字列)がCaption プロパティが設定されている場 合、その列は非連結列と見なされます。これらの列のデータは、 UnboundColumnFetch イベントを介して要求されます。 DataField プロパティが設定されており、その DataField プロパティがデータソースのフィールドの1つと同じである場合、そ の列は連結されます。 DataField プロパティが、DataSet 内にない値に設定されている場合、その列はデータを取得する際に無視されます。同様 に、DataField と Caption の両方のプロパティの値が設定されていない列も無視されます。 非連結列を作成する 非連結列を使用するには、最初に列を作成します。設計時に列を作成するには、C1TrueDBGrid デザイナを使って列を追加します。実行時に非 連結列を追加するには、C1DataColumnCollection の Insertメソッドを使用します。列の Caption プロパティを設定して、その列に名前を付ける 必要があります。設計時に列に名前を付けるには、C1TrueDBGrid デザイナを使用します。実行時には、適切なC1DataColumn オブジェクトの Caption プロパティを設定します。C1DataColumnCollection に C1DataColumn オブジェクトを追加すると、対応す るC1DataColumnCollection C1DisplayColumn がすべてのスプリットの C1DisplayColumnCollection に追加されます。デフォルトでは、新し く追加された C1DisplayColumn の Visible プロパティは False に設定されます。 コード内で非連結列を挿入する場合は、次のように、C1TrueDBGrid.Rebind メソッドを使用して、列をグリッド内の目的の場所に表示する必要が あります Visual Basic コードの書き方 Visual Basic Dim Col As New C1.Win.C1TrueDBGrid.C1DataColumn Dim dc As C1.Win.C1TrueDBGrid.C1DisplayColumn With Me.C1TrueDBGrid1 .Columns.Insert(0, Col) Col.Caption = "Unbound" dc = .Splits(0).DisplayColumns.Item("Unbound") ' 新しく追加された列をグリッドの左端に移動します .Splits(0).DisplayColumns.RemoveAt(.Splits(0).DisplayColumns.IndexOf(dc)) .Splits(0).DisplayColumns.Insert(0, dc) dc.Visible = True .Rebind(True) End With C#コードの書き方 C# C1.Win.C1TrueDBGrid.C1DataColumn Col = new C1.Win.C1TrueDBGrid.C1DataColumn(); C1.Win.C1TrueDBGrid.C1DisplayColumn dc; c1TrueDBGrid1.Columns.Insert(0, Col); Col.Caption = "Unbound"; 87 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms dc = c1TrueDBGrid1.Splits[0].DisplayColumns["Unbound"]; // 新しく追加された列をグリッドの左端に移動します c1TrueDBGrid1.Splits[0].DisplayColumns.RemoveAt(C1TrueDBGrid1.Splits[0].DisplayColumns.IndexOf(dc)); c1TrueDBGrid1.Splits[0].DisplayColumns.Insert(0, dc); dc.Visible = true; c1TrueDBGrid1.Rebind(true); グリッドに非連結列の値を表示する必要がある場合は、UnboundColumnFetch イベントが発生します。このイベントによって、行と列のインデック スが提供されます。このインデックスを使用して、要求されているグリッドセルを特定できます。このイベントの Value 引数は、デフォルトで Null の Object 型ですが、これを任意の値に変更できます。また、この値を使用して、ブックマークまたは列のインデックスで指定したセルにコンテンツを挿 入することもできます。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_UnboundColumnFetch(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.UnboundColumnFetchEventArgs) Handles C1TrueDBGrid1.UnboundColumnFetch C# コードの書き方 C# private void c1TrueDBGrid1_UnboundColumnFetch(object sender, C1.Win.C1TrueDBGrid.UnboundColumnFetchEventArgs e) 複数の非連結列を実装する ここまでは、非連結列を1つだけ使用する UnboundColumnFetch イベントの例を示してきました。ここでは、複数の非連結 列を使用する場合を考えます。UnboundColumnFetch イベントは、各行にある非連結列ごとに発生するため、一度に1つの 列の値だけが設定されます。また、各列の値を正しく決定するには、列を特定する必要があります。UnboundColumnFetch の2番目の Column引数は、値が要求されている列を特定するために使用されます。 Visual Basic コードの書き方 Visual Basic ' Dim dtCopy As Data.DataTable 'コピーとして使用されます Dim dtCopy As Data.DataTable Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load dtCopy = Me.DataSet11.Tables(0).Copy() End Sub Private Sub C1TrueDBGrid1_UnboundColumnFetch(ByVal sender As System.Object, ByVal e As C1.Win.C1TrueDBGrid.UnboundColumnFetchEventArgs) Handles C1TrueDBGrid1.UnboundColumnFetch Select Case e.Column.Caption Case "Area" ' グリッドの「Area」列を計算します e.Value = dtCopy.Rows(e.Row).Item("Length") * dtCopy.Rows(e.Row).Item("Width") Case "Perimeter" ' グリッドの「Perimeter」列を計算します 88 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms e.Value = 2 * (dtCopy.Rows(e.Row).Item("Length") + dtCopy.Rows(e.Row).Item("Width")) End Select End Sub C# コードの書き方 C# // Dim dtCopy As Data.DataTable 'コピーとして使用されます Data.DataTable dtCopy; private void Form1_Load( System.object sender, { dtCopy = this.DataSet11.Tables[0].Copy(); } System.EventArgs e) private void C1TrueDBGrid1_UnboundColumnFetch(object sender, C1.Win.C1TrueDBGrid.UnboundColumnFetchEventArgs e) { switch (e.Column.Caption;) { case "Area"; // グリッドの「Area」列を計算します e.value = dtCopy.Rows[e.Row].Item["Length"] * dtCopy.Rows[e.Row].Item["Width"]; break; case "Perimeter"; // グリッドの「Perimeter」列を計算します e.value = 2 * (dtCopy.Rows[e.Row].Item["Length"] + dtCopy.Rows[e.Row].Item["Width"]); break; } } 非連結列を更新する 非連結列の値はグリッド内の他のデータから派生されるため、通常、非連結列は読み取り専用にします。その場合は、列のス タイルの Locked プロパティを True に設定する必要があります。 Locked が False で、更新が許可されている場合は、ユーザーが非連結列の値を編集できます。非連結列が編集されると、 その行はダーティとマークされ(レコードセレクタ列に鉛筆アイコンが表示される)、通常どおりに更新シーケンスが実行されま す。しかし、格納先のデータベースフィールドがないため、グリッドには、変更されたデータの処理方法がわかりません。した がって、編集された値を正しく格納するためのコードを UnboundColumnUpdated イベントに記述する必要があります。これ らの値は、他のデータベーステーブルなどに任意の方法で格納できます。 BeforeUpdate は、更新操作のキャンセルに使用できます。したがって、非連結列が他のデータベースと連携して使用される 場合は、非連結列の更新を BeforeUpdate で行う必要があります。この更新操作が失敗した場合は、イベントをキャンセル する必要があります。しかし、更新操作が成功した場合は、連結列の更新を進める必要があります。そこで連結列の更新が失 敗する可能性があるため、非連結列に関連するデータベース操作は、トランザクションベースで処理する必要があります。 連結列の更新が成功した場合は、AfterUpdate イベントが発生するので、非連結列のトランザクションをコミットします。連結 列の更新が失敗した場合は、更新が行われた方法に基づいて、.NET のトラップ可能なエラーハンドラ内で非連結列のトラン 89 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ザクションをロールバックする必要があります。トランザクションを使用できない場合は、更新の前に元の非連結列の値を格納 しておき、連結列の更新が失敗した場合に再度更新を実行して元の値を復元します。 非連結列を編集する 非連結列を更新するもう1つの方法は、AfterColUpdate イベントを使用して、その他の(連結されている)列の値を変更する ことです。たとえば、次のように、グリッド表示の一部に借方と貸方という2つの列があるとします。 これらの列に対応するデータベースフィールドはなく、これらの列は、同じ収支列(正または負の値のどちらか)から派生される 非連結列です。ユーザーの立場からは、これらの値を直接編集できると便利です。また、開発者の立場からは、それによって 自動的に収支列が更新される必要があります。 C1TrueDBGrid では、このような動作を簡単に実装できます。グリッドのAfterColUpdate event イベント内に次のコードを記述 すると、どちらの列を更新しても、収支列が変更されます。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_AfterColUpdate(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.ColEventArgs) Handles C1TrueDBGrid1.AfterColUpdate Dim row as Integer = Me.C1TrueDBGrid1.Row Me.C1TrueDBGrid1(row, "収支") = -e.Column.DataColumn.Value End Sub C# コードの書き方 C# private void C1TrueDBGrid1_AfterColUpdate(object sender, C1.Win.C1TrueDBGrid.ColEventArgs e) { int row = this.c1TrueDBGrid1.Row; this.c1TrueDBGrid1[row, "収支"] = -e.Column.DataColumn.Value; } どちらかの列が更新されると、実際にはこのコードによって、連結されている非表示の収支列の値が変更されます。 DataSource に連結せずにデータを表示する C1TrueDBGrid は、DataSource に連結することなくデータを表示できるようになりました。非連結グリッドは、わずかな手順 で作成できます。非連結グリッドを作成するには、次の手順を実行します。 1. 最初に列を作成します。これは、デザイナまたはコードで実行できます。列作成の詳細については 非連結列を作成す 90 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms るを参照してください。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns.Add(New C1.Win.C1TrueDBGrid.C1DataColumn("FirstName", GetType(String))) Me.C1TrueDBGrid1.Columns.Add(New C1.Win.C1TrueDBGrid.C1DataColumn("LastName", GetType(String))) Me.C1TrueDBGrid1.Columns.Add(New C1.Win.C1TrueDbGrid.C1DataColumn("DateOfBirth", GetType(DateTime))) C# コードの書き方 C# this.c1TrueDBGrid1.Columns.Add(new C1.Win.C1TrueDBGrid.C1DataColumn("FirstName",typeof(string))); this.c1TrueDBGrid1.Columns.Add(new C1.Win.C1TrueDBGrid.C1DataColumn("LateName",typeof(string))); this.c1TrueDBGrid1.Columns.Add(new C1.Win.C1TrueDBGrid.C1DataColumn("DateOfBirth",typeof(DateTime))); 2. 引数を指定しないでSetDataBinding を呼び出します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.SetDataBinding() C# コードの書き方 C# this.c1TrueDBGrid1.SetDataBinding(); 3. AddRowまたは AddRows メソッドを使用してグリッドを作成します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.AddRow("John;Doe;11/29/1985") Me.C1TrueDBGrid1.AddRow("Jane;Doe;7/12/1980") Dim index As Integer = Me.C1TrueDBGrid1.AddRows(2) Dim i As Integer For i = index To 1 Me.C1TrueDBGrid1(i, "FirstName") = "Joe" Me.C1TrueDBGrid1(i, "LastName") = "Doe" Me.C1TrueDBGrid1(i, "DateOfBirth") = New DateTime(2000, 1, 15) Next i C# コードの書き方 C# 91 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.c1TrueDBGrid1.AddRow("John;Doe;11/29/1985"); this.c1TrueDBGrid1.AddRow("Jane;Doe;7/12/1980"); int index = this.c1TrueDBGrid1.AddRows(2); for(int i=index; i < 2; i++) { this.c1TrueDBGrid1[i,"FirstName"] = "Joe"; this.c1TrueDBGrid1[i, "LastName"] = "Doe"; this.c1TrueDBGrid1[i, "DateOfBirth"] = new DateTime(2000,1, 15); } これで、非連結グリッドを作成できました。 非連結グリッドに新しい行を追加する C1TrueDBGrid.NewRow メソッドを使用すれば、非連結グリッドに新しい行を簡単に追加できます。このメソッドは非連結グ リッドと同じスキーマでSystem.Data.DataRow を新しく作成します。次の手順で、非連結グリッドの DataRowCollection を 取得する C1TrueDBGrid.Rows コレクションと、新しい行を非連結グリッドの指定したインデックスに挿入する C1TrueDBGrid.NewRow メソッドを使用します。 次の手順を実行します。 1. 新しい .NET プロジェクトを作成します。 2. ツールボックスに移動し、C1TrueDBGrid、Label、NumericUpDown、および Button の各コントロールをフォームに 追加します。 3. Button1.Text プロパティを「行の追加」に設定し、Label1.Text プロパティを「新規行のインデックス」に設定します。 4. フォーム上のコントロールを次の画像のように配置します。 5. コードビューに切り替え、次の imports 文(または using 文)をプロジェクトに追加します Visual Basic コードの書き方 Visual Basic imports C1.Win.C1TrueDBGrid C# コードの書き方 92 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# using C1.Win.C1TrueDBGrid; 6. 次のコードを追加して Form_Load イベントを作成し、データをグリッドに追加します。 Visual Basic コードの書き方 Visual Basic Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'キャプションをグリッドに追加します。 Me.C1TrueDBGrid1.Caption = "Unbound Grid" ' 列をグリッドに追加します。 Me.C1TrueDBGrid1.Columns.Add(New GetType(String))) Me.C1TrueDBGrid1.Columns.Add(New GetType(String))) Me.C1TrueDBGrid1.Columns.Add(New GetType(String))) Me.C1TrueDBGrid1.Columns.Add(New GetType(String))) C1.Win.C1TrueDBGrid.C1DataColumn("Col 1", C1.Win.C1TrueDBGrid.C1DataColumn("Col 2", C1.Win.C1TrueDBGrid.C1DataColumn("Col 3", C1.Win.C1TrueDBGrid.C1DataColumn("Col 4", ' 引数を指定せずに、SetDataBinding メソッドを呼び出します。. Me.C1TrueDBGrid1.SetDataBinding() ' グリッドに値を入力します。 Dim i As Integer For i = 0 To 20 - 1 Dim s As String = String.Format("Data {0};Data {1};Data {2}; Data {3}", New Object() {i, i, i, i}) Me.C1TrueDBGrid1.AddRow(s) Next i End Sub C# コードの書き方 C# private void Form1_Load(object sender, EventArgs e) { // キャプションをグリッドに追加します。 this.c1TrueDBGrid1.Caption = "Unbound Grid" // 列をグリッドに追加します。 this.c1TrueDBGrid1.Columns.Add(new typeof(string))); this.c1TrueDBGrid1.Columns.Add(new typeof(string))); this.c1TrueDBGrid1.Columns.Add(new typeof(string))); this.c1TrueDBGrid1.Columns.Add(new 93 C1.Win.C1TrueDBGrid.C1DataColumn("Col 1", C1.Win.C1TrueDBGrid.C1DataColumn("Col 2", C1.Win.C1TrueDBGrid.C1DataColumn("Col 3", C1.Win.C1TrueDBGrid.C1DataColumn("Col 4", Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms typeof(string))); // 引数を指定せずに、SetDataBinding メソッドを呼び出します。 this.c1TrueDBGrid1.SetDataBinding(); // グリッドに値を入力します。 for (int i = 0; i < 20; i++) { string s = String.Format("Data {0};Data {1};Data {2}; Data {3}", i, i, i, i); this.c1TrueDBGrid1.AddRow(s); } } 7. 次のコードを追加して Button_Click イベントを作成し、ボタンがクリックされるときに、指定したインデックスに新しい行 を作成します。 Visual Basic コードの書き方 Visual Basic Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim idx As Integer = CInt(Me.NumericUpDown1.Value) ' 新しい行を作成します。 Dim dr As DataRow = Me.C1TrueDBGrid1.NewRow dr.Item(0) = "new row" ' 選択したインデックスで新しい行を追加します。 Me.C1TrueDBGrid1.Rows.InsertAt(dr, idx) End Sub C# コードの書き方 C# private void button1_Click(object sender, EventArgs e) { int idx = (int) this.numericUpDown1.Value; // 新しい行を作成します。 DataRow dr = this.c1TrueDBGrid1.NewRow(); dr[0] = "new row"; // 選択したインデックスで新しい行を追加します。 this.c1TrueDBGrid1.Rows.InsertAt(dr, idx); } アプリケーションを実行して確認します。 フォームは次のようになります。 94 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 矢印を使って[新規行のインデックス 新規行のインデックス]ボックスの数を変更し、<行の追加 行の追加>ボタンを選択します。選択したインデックスに新し い行が表示されます。 95 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms グリッドの外見をカスタマイズする 以下のトピックでは、C1TrueDBGrid に表示される要素のうち、対話式に設定できない視覚スタイル、キャプション、ヘッダー、 フッター、レコードセレクタ、分割線などの要素を設定する方法について説明します。 視覚スタイル TrueDBGrid for WinForms は、Office2007/Office 2010 風の視覚スタイルをサポートしています。視覚スタイルのカスタ マイズは簡単です。[ 。[C1TrueDBGrid タスク タスク]メニュー(詳細については、「[C1TrueDBGrid タスク]メニュー タスク]メニューを参照)、プロパ ティウィンドウ、またはコードで、リストのVisualStyle を設定できます。グリッドのVisualStyleは、デフォルト でVisualStyle.Custom, に設定されています。これは、視覚スタイルを使用しない標準の外観で、設定済みのスタイルとプロ パティだけを使用してコントロールをレンダリングします。C1TrueDBGrid では、次の視覚スタイルを使用できます。 Custom 視覚スタイル Custom 視覚スタイル 視覚スタイルは、設定済みのスタイルとプロパティだけを使用してコントロールをレンダリングします。これは デフォルトの設定です。VisualStyle が Custom に設定されている場合、グリッドは次の図のようになります。 System 視覚スタイル System 視覚スタイル 視覚スタイルは、現在のシステム設定に基づく外観のコントロールをレンダリングします。VisualStyle が VisualStyle.System に設定されている場合、グリッドは次の図のようになります。 Office2007Black 視覚スタイル Office2007Black 視覚スタイル 視覚スタイルは、Office 2007 の黒の配色に基づく外観のコントロールをレンダリングします。 VisualStyle が VisualStyle.Office2007Black に設定されている場合、グリッドは次の図のようになります。 96 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Office2007Blue 視覚スタイル Office2007Blue 視覚スタイル 視覚スタイルは、Office 2007 の青の配色に基づく外観のコントロールをレンダリングします。 VisualStyle が VisualStyle.Office2007Blue に設定されている場合、グリッドは次の図のようになります。 Office2007Silver 視覚スタイル Office2007Silver 視覚スタイル 視覚スタイルは、Office 2007 のシルバーの配色に基づく外観のコントロールをレンダリングしま す。VisualStyle が VisualStyle.Office2007Silver に設定されている場合、グリッドは次の図のようになります。 Office2010Black 視覚スタイル Office2010Black 視覚スタイル 視覚スタイルは、Office 2010 の黒の配色に基づく外観のコントロールをレンダリングします。 VisualStyle が VisualStyle.Office2010Black に設定されている場合、グリッドは次の図のようになります。 97 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Office2010Blue 視覚スタイル Office2010Blue 視覚スタイル 視覚スタイルは、Office 2010 の青の配色に基づく外観のコントロールをレンダリングします。 VisualStyle が VisualStyle.Office2010Blue に設定されている場合、グリッドは次の図のようになります。 Office2010Silver 視覚スタイル Office2010Silver 視覚スタイル 視覚スタイルは、Office 2010 のシルバーの配色に基づく外観のコントロールをレンダリングしま す。VisualStyle が VisualStyle.Office2010Silver に設定されている場合、グリッドは次の図のようになります。 キャプション、ヘッダ、フッタ グリッド、列、またはスプリットに見出しを付けるには、対応するオブジェクトのCaption プロパティを設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Caption = "Grid Caption" Me.C1TrueDBGrid1.Columns(0).Caption = "Column 0 Caption" Me.C1TrueDBGrid1.Splits(0).Caption = "Split 0 Caption" 98 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# this.c1TrueDBGrid1.Caption = "Grid Caption"; this.c1TrueDBGrid1.Columns.[0].Caption = "Column 0 Caption"; this.c1TrueDBGrid1.Splits[0].Caption = "Split 0 Caption"; 列のキャプションとグリッドのキャプション C1DataColumn オブジェクトの Caption プロパティを使用して、各列のヘッダ領域に表示するテキストを指定します。 DataSet に連結されている C1TrueDBGrid を使用している場合、列のキャプションは実行時に自動的に設定されます。 また、設計時には C1TrueDBGrid デザイナを使用して、実行時には C1DataColumnCollectionをコード内で操作して、列の キャプションを設定することもできます。 Caption プロパティは、C1TrueDBGrid コントロール自体にも適用されます。そのため、グリッド全体について説明するヘッダ を付加できます。 デフォルトでは、各列の Caption プロパティを明示的に設定しなくても、C1TrueDBGrid によって各列のヘッダが表示されま す。ただし、すべての列のヘッダを非表示にするには、ColumnHeaders プロパティを False に設定します。 列のフッタ ColumnHeaders ティで列のキャプションの表示を制御するのと同様に、ColumnFooters property プロパティを使用して、 列のフッタ行の表示を制御します。列のフッタの外見は列のヘッダと同じで、データの挿入中でも、常にグリッドの下部に表示 されます。 各;C1DataColumn のFooterText プロパティを使用して、フッタ行内に表示するテキストを決定します。設計時には 99 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid デザイナ デザイナを使用して、実行時には C1DataColumnCollection コレクションを次のようなコードで操作して、 フッタのテキストを設定できます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns(0).FooterText = "Footer 0" Me.C1TrueDBGrid1.Columns(1).FooterText = "Footer 1" C# コードの書き方 C# this.c1TrueDBGrid1.Columns[0].FooterText = "Footer 0"; this.c1TrueDBGrid1.Columns[1].FooterText = "Footer 1"; Caption プロパティとは異なり、FooterText プロパティには、連結されているデータソースの値が自動的に設定されません。 そのため、手作業で設定する必要があります。 複数行のヘッダおよびフッタ ColumnCaptionHeight はスプリット固有のプロパティで、列ヘッダの高さを制御します。デフォルトでは、このプロパティ は、HeadingStyle のフォントの設定に基づいています。列ヘッダに複数行のテキストを表示する必要がある場合は、次の コード例に示すように、追加される行が収まるように ColumnCaptionHeight プロパティを大きくします。 Visual Basic コードの書き方 Visual Basic With Me.C1TrueDBGrid1 .Splits(0).ColumnCaptionHeight = .Splits(0).ColumnCaptionHeight * 2 .Columns(0).Caption = "First line" + vbCrLf + "Second line" End With C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].ColumnCaptionHeight = this.c1TrueDBGrid1.Splits[0].ColumnCaptionHeight * 2; this.c1TrueDBGrid1.Columns[0].Caption = "First line\nSecond line"; 上のコードでは、Visual Studio の vbCrLf 定数を使用して、キャプションテキスト内の改行を指定しています。このコードを実行 すると、最初の列のキャプションには2行のテキストが含まれ、2番目の列のキャプションは垂直方向に中央揃えされます。 同様に、ColumnFooterHeight プロパティを設定して列フッタの高さを制御したり、列の FooterText プロパティを設定する 際に、vbCrLf 定数を使って改行を指定することができます。 100 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms スプリットのキャプション Split オブジェクトも独自のキャプションを持つことができます。スプリットが1つだけあるグリッドでは、スプリットのキャプション は、グリッドの2番目のキャプションのように使用できます。 ただし、スプリットのキャプションは、複数のスプリットを持つグリッドで使用すると便利です。これは、列をカテゴリ別にグルー プ化してエンドユーザーに示す場合に理想的です。 3D 表示とフラット表示 TrueDBGrid for WinForms は、標準の「フラット」なコントロールの外見、多くのコントロールで使用されている見栄えのよい 3D の外見、および 3D とフラットを組み合わせた外見をサポートしています。デフォルトでは、グリッドの FlatStyle プロパティ は FlatModeEnum.Standard に設定されており、3D の外見が使用されています。ただし、このプロパティが制御するのは、 グリッドの境界線、キャプションバー、列ヘッダ、列フッタ、およびレコードセレクタ列の描画に 3D 効果を使用するかどうかだけ です。グリッドのデータセル、行分割線、および列分割線は影響を受けません。 FlatStyle が FlatModeEnum.Standard に設定されている場合、グリッドは次のように表示されます。 FlatStyle が FlatModeEnum.PopUp に設定されている場合、グリッドは次のように表示されます。 101 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms このグリッドの外見は、最初は FlatModeEnum.Flat と同じであることに注意してください。マウスがコントロール要素の上に 移動すると、その要素の外見が 3D になります。 FlatStyle が FlatModeEnum.Flat に設定されている場合、グリッドは次のように表示されます。 内部を含むグリッド全体を 3D の外見にするには、設計時または実行時に次のようにプロパティを設定します。 Visual Studio のプロパティウィンドウで、RowDivider スタイルプロパティを Reset に設定します。または、コード内で 次のように設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.RowDivider.Style = C1.Win.C1TrueDBGrid.LineStyleEnum.Raised C# コードの書き方 C# this.c1TrueDBGrid1.RowDivider.Style = C1.Win.C1TrueDBGrid.LineStyleEnum.Raised; SplitCollection エディタで、各スプリットのすべてのColumnDividerスタイルオブジェクトについて、Style プロパティを LineStyleEnum.Raised を設定します。または、コード内で次のように設定します。 Visual Basic コードの書き方 Visual Basic Dim C As C1.Win.C1TrueDBGrid.C1DisplayColumn For Each C In Me.C1TrueDBGrid1.Splits(0).DisplayColumns C.ColumnDivider.Style = C1.Win.C1TrueDBGrid.LineStyleEnum.Inset Next C# コードの書き方 102 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# C1.Win.C1trueDBGrid.C1DisplayColumn C ; for each(C in this.C1trueDBGrid1.Splits[0].DisplayColumns) { C.ColumnDivider.Style = C1.Win.C1TrueDBGrid.LineStyleEnum.Raised; } Visual Studio のプロパティウィンドウで、BackColor プロパティを gray に設定します。または、コード内で次のように設 定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Styles("Normal").BackColor = System.Drawing.Color.Lavender C# コードの書き方 C# this.c1TrueDBGrid1.Styles["Normal"].BackColor = System.Drawing.Color.Lavender; このグリッドは、次のように表示されます。 RowDivider オブジェクトの Style プロパティを Inset に変更すると、各データ行で垂直方向に数ピクセルが使用されるため、 表示できる行が減ってしまうことに注意してください。 次の項で説明するように、他の色や分割線のスタイルを組み合わせて、さまざまな 3D 効果を試すことができます。, 境界線と分割線 RowDividerプロパティおよび ColumnDivider プロパティを使用すると、水平線と垂直線を個別に選択し、その色を設定でき ます。これらのプロパティは、Style プロパティと Color プロパティを持つ基礎 GridLines オブジェクトを返します。これら2つの プロパティによって、グリッドにあるセルの境界線の外見が定義されます。Style プロパティに設定できる値は、次のとおりで す。 LineStyleEnum.Double LineStyleEnum.Inset LineStyleEnum.Raised LineStyleEnum.None LineStyleEnum.Single たとえば、RowDivider のスタイルプロパティを LineStyleEnum.None に設定すると、行間の分割線がなくなるため、利用で 103 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms きる領域に表示できるデータが増えます。 ColumnDivider プロパティの場合は、たとえば、Style プロパティを LineStyleEnum.None に、 HeaderDivider プロパティ を False に設定できます。これにより、次の図のように、関連のある列をビジュアルにまとめることができます。 データがない領域 データソース内の列や行の数によっては、グリッド内にデータセルがない部分ができる場合があります。ただし、 ExtendRightColumn プロパティや EmptyRows プロパティを使用すると、このような「デッドエリア」をなくすことができます。 デッドエリアの色を変更するには、BackColor プロパティを使用します。 右端の列 後の列が完全に見えるまで水平方向にグリッドをスクロールすると、通常は、最後の列とグリッドの右境界線の間に空白の領 域が表示されます。 この空白の領域の色は、システムの 3D オブジェクト色(ボタン表面の色)の設定に依存し、通常は灰色で す。ExtendRightColumn プロパティを使用すると、この空白の領域をなくすことができます。このプロパティのデフォルト値は 104 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms False ですが、これを True に設定すると、最後の列の幅がグリッドの右端まで広がります。 使用されないデータ行 データソース内の行が、グリッドに表示できる行より少ない場合、AddNew 行(AllowAddNew が False の場合は最後の データ行)より下の領域は空白になります。 この空白の領域の色は、システムの 3D オブジェクト色(ボタン表面の色)の設定に依存し、通常は灰色です。EmptyRows プ ロパティを使用すると、この空白の領域をなくすことができます。このプロパティのデフォルト値は False ですが、これを True に 設定すると、最後のデータ行の下に空の行が表示されます。 105 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 空の行はフォーカスを受け取ることができません。 EmptyRowsとExtendRightColumn の両方のプロパティを True に設定すると、グリッド内部の空白の領域を完全になくす ことができます。 現在の行またはセルを強調表示する マーキーは、グリッドの現在のセルまたは行を表す、強調表示された領域です。MarqueeStyle プロパティは、次の8種類の 表示に設定できます。これらは、MarqueeEnum オブジェクトに含まれる列挙体です。 MarqueeEnum.DottedCellBorder グリッドのマーキーのデフォルトのスタイルです。現在のセルは、点線の境界線で強調表示されます。 106 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms MarqueeEnum.SolidCellBorder セルをより目立つように強調表示します。背景色によっては、点線の四角形が見分けにくい場合があるため、この設定 が有効です。 MarqueeEnum.HighlightCell このスタイルは、現在のセルを完全に反転して強調表示します。グリッドが編集可能な場合、Edit Style のBackColor プロパティとForeColor プロパティの値は、満足できる効果が得られるように慎重に選択する必要があります。 MarqueeEnum.HighlightRow 行全体が強調表示されますが、行内のどのセルが現在のセルなのかを見分けることはできません。強調表示色を変 更するには、GridStyleCollection エディタで組み込みの HighlightRow スタイルを編集します。ユーザーがグリッドを 編集できず、データを一度に1レコードずつ表示する場合に、最も有効なスタイルです。 107 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms MarqueeStyleEnum.DottedRowBorder この設定は、行全体を点線の四角形で強調表示します。少し控え目に強調表示する場合は、Highlight Row の代わり に使用できます。 MarqueeEnum.HighlightRowRaiseCell 「浮き出た」外見を使って現在のセルを強調表示するため、この値は、グリッドで 3D の線を使用する場合にだけ使用し てください。 MarqueeEnum.NoMarquee マーキーを完全に非表示にします。この設定は、現在の行が無関係である場合や、必要になるまでユーザーの注意を グリッドに向けたくない場合によく使用されます。 108 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms MarqueeEnum.FloatingEditor セルのテキスト(セル全体ではなく、実際のテキストのみ)が強調表示され、テキストの末尾に点滅するテキストカーソ ル(カレット)が表示されます。 強調表示の色には、システムの強調表示色が使用されます。フローティングエディタのスタイルは、Microsoft Access のデー タシートの外見と同じです。点滅するテキストカーソルは、そのセルが編集可能であることを示します。このために、このマー キースタイルはフローティングエディタと呼ばれています。他のマーキースタイルでは、このようにセルが編集可能なモードに ならないため、フローティングエディタのグリッドの動作は、他のマーキースタイルのグリッドと異なる部分があります。次 に、MarqueeStyle プロパティを MarqueeEnum.FloatingEditorに設定した場合の違いをまとめます。 1. フローティングエディタでは、EditDropDown プロパティと EditorStyleプロパティが無視されます。 2. フローティングエディタで AddCellStyle メソッドと AddRegexCellStyle メソッドを使用する場合、Condition 引数の現 在のセルビット(CellStyleFlag.CurrentCell) と強調表示された行ビット(CellStyleFlag.MarqueeRow) は無視されま す。詳細については、セルにスタイルを適用する セルにスタイルを適用するを参照してください。 3. Automatic Data Translation with ValueItems.ValueItems を使ってデータを自動的に変換する で説明したよう に、ラジオボタンまたは画像があるセルにはフローティングエディタが表示されません。代わりに点線のセルマーキー が使用されます。現在のセルが通常のテキストを表示するセルに移動すると、フローティングエディタによる強調表示 に戻ります。 4. MarqueeStyle プロパティが MarqueeEnum.Floating Editor に設定されている場合、CycleOnClick プロパティ ((ValueItemCollection) に適用される)は無効です。MarqueeEnum.FloatingEditor. 5. グリッド内のセルをユーザーがダブルクリックしても、C1TrueDBGrid コントロールのDoubleClickイベントは発生しま せん。最初のクリックによって、フローティングエディタが編集を開始し、クリックされた文字の位置でセルが編集モード になるためです。 行の高さとワードラップ すべてのグリッド行の高さを調整する 設計時に行の高さを対話式に設定するには、グリッドをそのビジュアルな編集モードに置くか、Visual Studio のプロパティウィ 109 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ンドウでグリッドの RowHeight プロパティを変更します。AllowRowSizing が RowSizingEnum.AllRows または RowSizingEnum.IndividualRows に設定されている場合は、設計時に行の高さを対話式に調整できます。詳細について は、実行時の操作 実行時の操作を参照してください。 RowHeight プロパティは、コンテナの座標系の単位で表されます。ただし、0に設定すると、各行が現在のフォントで1行分の 高さになるように、グリッドの表示が再調整されます。したがって、次のコードを使用すると、ちょうど3行のテキストが表示され るように、行の高さを調整できます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.RowHeight = 0 Me.C1TrueDBGrid1.RowHeight = 3 * Me.C1TrueDBGrid1.RowHeight C# コードの書き方 C# this.c1TrueDBGrid1.RowHeight = 0; this.c1TrueDBGrid1.RowHeight = 3 * this.c1TrueDBGrid1.RowHeight; このテクニックは、次の図のように、フィールドに複数行のメモを表示する場合に特に有効です [概要] 列の Style オブジェクトの WrapText プロパティを True に設定する必要があることに注意してください。そうしないと、 メモフィールドが1行目の末尾で切れてしまいます。 セル内でのワードラップを有効にする デフォルトでは、グリッドのセルにはテキストが1行で表示され、入りきらないテキストはセルの右の境界線で切り捨てられま す。グリッドの RowHeight プロパティの値を大きくし、目的の列のStyle オブジェクトのWrapTextプロパティを True に設定 すると、セル内に複数行のテキストを表示できます。WrapText を True (デフォルト値は False)に設定すると、セルの境界に かかる語の前で改行が行われます。グリッドの行が複数のテキスト行を表示するための十分な高さがある場合は、セルの内 容が続けて次の行に表示されます。 次のループを使用すると、すべてのグリッド列でワードラップを有効にできます。 Visual Basic コードの書き方 Visual Basic Dim C As C1.Win.C1TrueDBGrid.C1DisplayColumn For Each C In Me.C1TrueDBGrid1.Splits(0).DisplayColumns C.Style.WrapText = True Next 110 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# C1.Win.C1trueDBGrid.C1DisplayColumn C ; for each(C in this.C1trueDBGrid1.Splits[0].DisplayColumns) { C.Style.WrapText = true ; } 行の色を互い違いにする 1行ごとに行の背景色を互い違いにして、グリッドを見やすく表示します。AlternatingRows プロパティを True に設定する と、グリッドには、組み込みスタイルの OddRow を使って奇数行(最初に表示される行が1)が表示され、EvenRow を使って 偶数行が表示されます。 水平方向および垂直方向の配置 列のStyleオブジェクトのHorizontalAlignment プロパティを使用すると、列内のセルテキストの水平方向の位置を制御でき ます。このプロパティに設定できる値は次のとおりです。 AlignHorzEnum.General AlignHorzEnum.Near AlignHorzEnum.Center AlignHorzEnum.Far AlignHorzEnum.Justify General (データセルのデフォルト値)に設定すると、基礎データのデータ型に基づいて配置が決まります。たとえば、文字列 は左揃えになり、数値は右揃えになります。 Style オブジェクトのVerticalAlignment メンバを使用すると、グリッドのセル、スプリット、または列内のテキストの垂直方向 の位置を制御できます。このプロパティに設定できる値は次のとおりです。 AlignVertEnum.Top AlignVertEnum.Center AlignVertEnum.Bottom データセルの場合、デフォルト値は Top です。キャプションバー、列ヘッダ、列フッタなどのグリッドの静的要素の場合、デフォ ルト値は Center です。デフォルト値がどのように決定されているかについては、Named Style Defaults 名前付きスタイルの デフォルト値」を参照してください。 次のグリッドには、HorizontalAlignment プロパティと VerticalAlignment プロパティのすべての組み合わせが表示されて います。General の設定は、最終的に左揃え、右揃え、中央揃えのいずれかでレンダリングされるため、省略されています。 111 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms HorizontalAlignment プロパティと VerticalAlignment プロパティは、スタイルの概念と堅密に統合されています。詳細に ついては、スタイルの使用方法 スタイルの使用方法を参照してください。 112 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms データ表示テクニック この章では、セルのデータをさまざまなテキスト形式やグラフィック形式で表示する方法について説明します。TrueDBGrid for WinForms でセルの編集時動作をカスタマイズする方法については、セルの編集テクニック セルの編集テクニックを参照してください。 テキストの書式設定 多くの場合、TrueDBGrid for WinForms がデータソースから受け取る生数値データは、エンドユーザー向けの表示に適して いません。たとえば、日付のフィールドは、特定の国際的な書式に変換する必要があります。また、通貨のフィールドには、小 数点の後に無意味に数字が数多く付いていることがあります。したがって、TrueDBGrid for WinForms には、数値フィール ドの書式を変更する方法して、NumberFormat プロパティが用意されています。 さらに、データベースにある情報を一般的に書式設定することが不適切な場合のために、C1TrueDBGrid に は、FormatTextというイベントが用意されています。このイベントをアプリケーションで使用して、列ごとにデフォルトの書式設 定を上書きできます。このイベントの簡単なハンドラを記述することで、列データの外見をさまざまな方法でカスタマイズできま す。 数値フィールドの書式設定 C1TrueDBGrid は、C1DataColumn オブジェクトのNumberFormat プロパティを介して、さまざまなデータの書式設定オプ ションを提供します。NumberFormat は、データベースからグリッドに渡されるデータの書式を再設定します。特定の列で、ほ とんどの種類の数値を変更できます。たとえば、列内のすべての日付の値を 26-Apr-01 の形式で表示するには、次のコード 例のように、Medium Date の設定を使用します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns("HireDate").NumberFormat = "Medium Date" C# コードの書き方 C# this.c1TrueDBGrid1.Columns["HireDate"].NumberFormat = "Medium Date"; 列の NumberFormat プロパティを実行時に変更する場合、表示を更新する必要はありません。C1TrueDBGrid が自動的 に処理します。 所定の数値オプション NumberFormat プロパティには、数値および日付と時刻の値に対して所定のオプションがいくつか用意されています。 数値データの場合、次の所定のオプションを NumberFormat プロパティで利用できます。 オプション 説明 Standard 1000 単位の区切りを付け、小数点以上に少なくとも1桁、小数点以下に2 桁表示します。 General Number 1000 単位の区切りなしで数値をそのまま表示します。 Currency 必要に応じて、1000 単位の区切りを付けて数値を表示します。小数点以下 には2桁表示されます。出力は、システムのロケールの設定に基づきます。 113 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms オプション 説明 Percent 数値に 100 を掛け、右側にパーセント記号(%)を付けて表示します。小数 点以下には常に2桁表示されます。 Fixed 小数点以上に少なくとも1桁、小数点以下に2桁表示します。 Scientific 標準の指数表記を使用します。 Yes/No 数値が0の場合は、No を表示します。それ以外の場合は、Yes を表示しま す。 True/False 数値が0の場合は、False を表示します。それ以外の場合は、True を表示 します。 On/Off 数値が0の場合は、Off を表示します。それ以外の場合は、On を表示しま す。 0% 数値に 100 を掛け、整数に丸めた後で、右側にパーセント記号(%)を付け て表示します。 0.00% Percent と同じです。 日付と時刻データの場合、次の所定のオプションを NumberFormat プロパティで利用できます。 オプション 説明 General Date 日付や時刻を表示します。実数の場合は、日付と時刻が表示されます(たと えば、4/3/93 05:34 PM)。小数部分がない場合は、日付だけが表示されま す(たとえば、4/3/93)。整数部分がない場合は、時刻だけが表示されます (たとえば、05:34 PM)。日付の表示は、システムの設定に基づきます。 Long Date システムの長い日付形式を使って日付を表示します。 Medium Date Visual Basic 言語バージョンに適した中間の長さの日付形式を使って日付を 表示します。 Short Date システムの短い日付形式を使って日付を表示します。 Long Time システムの長い時刻形式を使って時刻を表示します。時間、分、秒を含みま す。 Medium Time 時間、分、および AM/PM の区分を使用して、12 時間制で時刻を表示しま す。 Short Time 24 時間制で時刻を表示します(たとえば、17:45)。 カスタムの書式設定 数値情報の表示をカスタマイズするには、NumberFormat プロパティを所定のオプションでなくカスタム値に設定します。 たとえば数値列を小数点第3位まで明確に表示するよう設定するには、次のコードを記述して NumberFormat プロパティを 設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns("Value").NumberFormat = "0.000" C# コードの書き方 114 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# this.c1TrueDBGrid1.Columns["Value"].NumberFormat = "0.000"; 日付の列を特に mm/dd/yyyy 形式で表示するよう設定する場合は、次のコードを記述して NumberFormat プロパティを 設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns("BirthDate").NumberFormat = "MM/dd/yyyy" C# コードの書き方 C# this.c1TrueDBGrid1.Columns["BirthDate"].NumberFormat = "MM/dd/yyyy"; 組み込みの書式を使った入力の検証 NumberFormat プロパティがグリッド内のデータの表示だけに影響することは重要です。EditMask プロパティの値を指定し ないかぎり、入力テンプレートは適用されず、ユーザーは、書式設定されたセルにも自由に入力できます。別のセルに移動す ると、ユーザーが入力した値は適切に解釈され、NumberFormat の設定に従ってデータが表示し直されます。 たとえば、列に Medium Date 書式を設定すると、Saturday, April 25, 1998, 12:00:00 AM という日付は、曜日と時間が 無視されて、25-Apr-98 と表示されます。ユーザーが July とだけ入力して別の行に移動すると、グリッドは、入力された日付 の値を正しく解釈できず、トラップ可能なエラーが発生します。ユーザーが oct 5 または 10/5 と入力した場合、入力された日 付は October 5, 2009 と解釈されます(年は現在の年と見なされる)。データベースの更新が成功すると、Medium Date 書 式が設定されているため、入力された日付が 05-Oct-09 と表示し直されます。 入力マスクを使って書式設定する 入力形式と表示形式は同じであることが多いため、 NumberFormat プロパティには Edit Mask オプション(間のスペースに 注意)が用意されています。このオプションを選択すると、EditMask プロパティの設定がデータの入力と表示の両方に使用さ れます。ただし、入力形式と表示形式が同じである必要はなく、EditMask プロパティと異なる NumberFormat オプションを 選択することもできます。 たとえば、次のコードは、電話番号のテンプレートを列の表示と編集の両方に適用します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns("Phone").EditMask = "(###) ###-####" Me.C1TrueDBGrid1.Columns("Phone").NumberFormat = "Edit Mask" C# コードの書き方 C# this.c1TrueDBGrid1.Columns["Phone"].EditMask = "(###) ###-####"; this.c1TrueDBGrid1.Columns["Phone"].NumberFormat = "Edit Mask"; データの入力マスクの指定方法については、入力マスク 入力マスクを参照してください。 115 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms カスタムイベントハンドラを使って書式設定する 既存の書式設定オプションが個別の目的に合わない場合があります。また、使用できる書式設定の種類に制限があったり、カ スタムの書式設定オプションが必要な場合もあります。このような場合に、NumberFormat プロパティに FormatText Event オプションを指定します。列でこのオプションを選択すると、その列にデータが表示される前に、FormatText イベントが発生し ます。このイベントによって、データを表示する直前に、書式設定の再実行、変換、インデントなどの任意の処理をデータに対 して実行できます。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_FormatText(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FormatTextArgs) Handles C1TrueDBGrid1.FormatText End Sub C# コードの書き方 C# private void C1TrueDBGrid1_FormatText(object sender, C1.Win.C1TrueDBGrid.FormatTextArgs e) { } ColIndex は、FormatTextEventArgs オブジェクトのメンバの1つで、書式設定し直すグリッドの列番号を指定します。ま た、Valueメンバは、データの現在の値を含み、書式設定された表示値のプレースホルダにもなります。たとえば、最初の列に 1から 30 までの数値が含まれており、それらのデータをローマ数字で表示する場合は、次のようなコードを記述します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_FormatText(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FormatTextEventArgs) Handles C1TrueDBGrid1.FormatText Dim result As String If e.ColIndex = 0 Then ' X の個数を決定します While e.Value >= 10 result = result & "X" e.Value = e.Value - 10 End While ' 1 ~ 9 の「数字」を追加します Select Case e.Value Case 1 result = result & "I" Case 2 result = result & "II" Case 3 result = result & "III" 116 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Case 4 result Case 5 result Case 6 result Case 7 result Case 8 result Case 9 result End Select = result & "IV" = result & "V" = result & "VI" = result & "VII" = result & "VIII" = result & "IX" ' 実際の書式を変更します e.Value = result End If End Sub C# コードの書き方 C# private void C1TrueDBGrid1_FormatText(object sender, C1.Win.C1TrueDBGrid.FormatTextEventArgs e) string result; if ( e.ColIndex = 0 ) { //X の個数を決定します while ( e.Value >= 10 ) { result = result + "X"; e.Value = e.Value - 10; } // 1 ~ 9 の「数字」を追加します switch (e.Value) { case 1; result = result + case 2; result = result + case 3; result = result + case 4; result = result + case 5; result = result + case 6; result = result + case 7; 117 "I"; "II"; "III"; "IV"; "V"; "VI"; Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms result = result + "VII"; case 8; result = result + "VIII"; case 9; result = result + "IX"; } //実際の書式を変更します e.Value = result; } } FormatText イベントは、他の書式設定テクニックに比べて制限が少なく、このイベントを使用すれば、グリッドに表示される値 のテキストを自由に制御できます。 ValueItems を使ってデータを自動的に変換する FormatTextイベントを使用すると、データの値をより説明的な表現の値にマップできますが、TrueDBGrid for WinForms に も、コードを記述しないで、このように自動的にデータを変換するメカニズムがあります。ValueItem コレクションオブジェクトを 使用すると、テキストまたは画像のいずれかを指定して、それらを基礎データ値の代わりに表示できます。 この機能は、数字コードまたは短く省略された値をエンドユーザーが理解しやすい形式で表示するために適しています。たと えば、国コードを正式な国名または各国の国旗の画像としてレンダリングできます。また、0、1、2の各数字を Yes、No、 Maybe と表示できます。実行値(0、1、2)または変換された値(Yes、No、Maybe)のいずれかをセルやドロップダウンコンボ ボックスにラジオボタンとして表示できます。 ValueItems について ValueItemCollection オブジェクトには、基礎データ値とグリッド内でのそのビジュアルな表現の関連付けを定義するための コレクションとプロパティが含まれます。ValueItemCollection は、0個以上の ValueItem オブジェクトから成るコレクション を含み、各 ValueItem は、2つの主要なプロパティをサポートしています。Valueは基礎データ値で、DisplayValue,はそのビ ジュアルな表現です。どちらのプロパティも Object 型です。各 C1DataColumn オブジェクトは1つの ValueItemCollection オブジェクトを所有します。最初、このコレクションは空です。 実行時には、他の C1TrueDBGrid または Visual Studio のコレクションと同様に、ValueItem のコレクションを操作できま す。ValueItem は、ValueItemCollection オブジェクトを介して追加、削除、または操作できます。 設計時には、.NET の C1TrueDBGrid デザイナを使用するから ValueItemCollection エディタを使用するを使用できます。詳 細については、ValueItemCollection エディタを使用する エディタを使用するを参照してください。 テキストからテキストへの変換を指定する Country フィールドが簡単な符号で表されている次のグリッドを例にします。 118 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms この符号を正しい名前として表示するには、列のValueItemCollectionオブジェクトを使用して、自動データ変換を指定しま す。それには、設計時に、.NET のValueItemCollection エディタを使用する エディタを使用するを使用します。 このエディタを使って ValueItemCollection オブジェクトに変更を加えると、列単位でデータ変換を指定できます。特定の列の データ変換リストを構築するには、次の手順に従います。 1. Visual Studio のプロパティウィンドウで、Columns コレクションの横にある省略符ボタンをクリックし て、C1TrueDBGrid デザイナ デザイナを使用するを開きます。 2. 左ペインで、内容を変換する列を選択します。右ペインで、 ValueItems ノードを展開します。Values ノードの横の省略 符ボタンをクリックすると、ValueItemCollection エディタを使用する エディタを使用するが起動します。 3. ValueItem オブジェクトを正しく設定したら、〈OK〉を選択して C1TrueDBGrid デザイナを使用するに デザイナを使用するに戻ります。右ペイ ンで、 ValueItems ノードの下の Translate プロパティを True に設定します。 4. 左ペインで〈...〉ボタンをクリックすると、ValueItem オブジェクトが追加されます。右ペインで、各 ValueItem のValue および DisplayValue を指定します。ValueItem のテキストを入力する場合は、省略符ボタンを使用しません。このボ タンは、DisplayValue にビットマップを入力するために使用します。 5. 〈OK〉 または 〈Apply〉 を選択して変更をコミットします。 プログラムが実行されると、Value 列のアイテムと一致する Country フィールドの値が、対応する DisplayValue エントリとし て表示されます。たとえば、CAN はカナダになり、UK はイギリス になります。 119 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 基礎データベースには影響がないことに注意してください。データ値の表現だけが異なります。コードで同様の結果を得るに は、次のようにします。 Visual Basic コードの書き方 Visual Basic Dim v as C1.Win.C1TrueDBGrid.ValueItemCollection v = Me.C1TrueDBGrid1.Columns("Country").ValueItems.Values v.Add(new v.Add(new v.Add(new v.Add(new v.Add(new C1.Win.C1TrueDBGrid.ValueItem("CAN","Canada")) C1.Win.C1TrueDBGrid.ValueItem("UK","United Kingdom")) C1.Win.C1TrueDBGrid.ValueItem("USA","United States")) C1.Win.C1TrueDBGrid.ValueItem("JPN","Japan")) C1.Win.C1TrueDBGrid.ValueItem("AUS","Australia")) Me.C1TrueDBGrid1.Columns("Country").ValueItems.Translate = True C# コードの書き方 C# C1.Win.C1TrueDBGrid.ValueItemCollection v = this.c1TrueDBGrid1.Columns["Country"].ValueItems.Values; v.Add(new v.Add(new v.Add(new v.Add(new v.Add(new C1.Win.C1TrueDBGrid.ValueItem("CAN","Canada")); C1.Win.C1TrueDBGrid.ValueItem("UK","United Kingdom")); C1.Win.C1TrueDBGrid.ValueItem("USA","United States")); C1.Win.C1TrueDBGrid.ValueItem("JPN","Japan")); C1.Win.C1TrueDBGrid.ValueItem("AUS","Australia")); this.c1TrueDBGrid1.Columns["Country"].ValueItems.Translate = true; テキストから画像への変換を指定する テキストからテキストへの変換の指定と同じ方法で、テキストから画像への変換を行うことができます。ValueItems エディタ エディタ内 で、DisplayValue 列に文字列を入力する代わりに、省略符 省略符ボタンを使用して、データ変換に使用されるビットマップを選択で きます。ビットマップの選択を取り消すには、DisplayValueプロパティボックス内のテキストを削除し、別のビットマップを選択 するか、テキストを入力します。 120 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ValueItems オブジェクトのTranslateプロパティを True に設定する必要があることに注意してください。ビットマップの高さに よっては、Visual Studio のプロパティウィンドウでRowHeight プロパティの値を増やす必要があります。その場合は、グリッド のStyle プロパティの VerticalAlignmentメンバも Center に変更する必要があります。これにより、ビットマップ(および他の 列のテキストデータ)は、グリッドセルの上部ではなく、上下の中央に置かれます。 プログラムが実行されると、Value 列のアイテムと一致する Country フィールドの値は、対応する DisplayValue の画像とし て表示されます。 テキスト間の変換と同様に、基礎データベースには影響がありません。データ値の表現だけが異なります。コードで同様の結 果を得るには、次のようにします。 Visual Basic コードの書き方 Visual Basic Dim item As C1.Win.C1TrueDBGrid.ValueItem = New C1.Win.C1TrueDBGrid.ValueItem() With Me.C1TrueDBGrid1.Columns("Country").ValueItems.Values Item.Value = "CAN" Item.DisplayValue = System.Drawing.Image.FromFile("canada.bmp") .Add(Item) Item = New C1.Win.C1TrueDBGrid.ValueItem() Item.Value = "UK" 121 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Item.DisplayValue = System.Drawing.Image.FromFile("uk.bmp") .Add(Item) Item = New C1.Win.C1TrueDBGrid.ValueItem() Item.Value = "USA" Item.DisplayValue = System.Drawing.Image.FromFile("usa.bmp") .Add(Item) Item = New C1.Win.C1TrueDBGrid.ValueItem() Item.Value = "JPN" Item.DisplayValue = System.Drawing.Image.FromFile("japan.bmp") .Add(Item) Item = New C1.Win.C1TrueDBGrid.ValueItem() Item.Value = "AUS" Item.DisplayValue = System.Drawing.Image.FromFile("australia.bmp") .Add(Item) Me.C1TrueDBGrid1.Columns("Country").ValueItems.Translate = True End With C# コードの書き方 C# C1.Win.C1TrueDBGrid.ValueItemCollection v = this.c1TrueDBGrid.Columns["Country"].ValueItems.Values; C1.Win.C1TrueDBGrid.ValueItem Item = new C1.Win.C1TrueDBGrid.ValueItem(); Item.value = "CAN"; Item.DisplayValue = System.Drawing.Image.FromFile["canada.bmp"]; v.Add[Item]; Item = new C1.Win.C1TrueDBGrid.ValueItem(); Item.value = "UK"; Item.DisplayValue = System.Drawing.Image.FromFile["uk.bmp"]; v.Add[Item]; Item = new C1.Win.C1TrueDBGrid.ValueItem(); Item.value = "USA"; Item.DisplayValue = System.Drawing.Image.FromFile["usa.bmp"]; v.Add[Item]; Item = new C1.Win.C1TrueDBGrid.ValueItem(); Item.value = "JPN"; Item.DisplayValue = System.Drawing.Image.FromFile["japan.bmp"]; v.Add[Item]; Item = new C1.Win.C1TrueDBGrid.ValueItem(); Item.value = "AUS"; Item.DisplayValue = System.Drawing.Image.FromFile["australia.bmp"]; v.Add[Item]; 122 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.c1TrueDBGrid1.Columns["Country"].ValueItems.Translate = true; セルにテキストと画像を同時に表示する 特定の列でテキスト/画像変換を実行するようにValueItemCollection オブジェクトを設定すると、Value 文字列 とDisplayValue bitmap ビットマップの両方を同じセル内に表示できます。それには、C1TrueDBGrid デザイナを使用する で ValueItems ノードの下にある AnnotatePicture プロパティを選択します。また、コードを記述する場合は、次のようにしま す。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns("Country").ValueItems.AnnotatePicture = True C# コードの書き方 C# this.c1TrueDBGrid1.Columns["Country"].ValueItems.AnnotatePicture = true; セルのテキストに対するビットマップの水平方向の配置は、列の StyleオブジェクトのHorizontalAlignment およ びForeGroundPicturePosition の各プロパティによって決定されます。これら2つのプロパティに対応する列挙体オブジェク トは、それぞれ AlignHorzEnum オブジェクトと ForegroundPicturePositionEnum オブジェクトです。次の例で は、HorizontalAlignment をAlignHorzEnum.Generalに設定しています。 Country 列は文字列フィールドを表すため、セ ルテキストは左揃えになります。ただし、ForeGroundPicturePosition プロパティが ForegroundPicturePosition.Near(デ フォルト)に設定されているため、ビットマップがセルの左端に配置され、残ったスペース内でセルテキストが左揃えに配置され ます。 また、ForeGroundPicturePosition プロパティを ForegroundPicturePositionEnum.Far に変更すると、セルテキストは通 常どおり左揃えになり、ビットマップは右揃えになります。 123 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms セルテキストをビットマップの下に配置し、両方のアイテムを中央揃えにするには、HorizontalAlignment プロパティ をAlignHorzEnum.Center に、ForeGroundPicturePosition プロパティを ForegroundPicturePositionEnum.TopofTextに設定します。 メモ メモ:HorizontalAlignment プロパティと ForeGroundPicturePosition プロパティの有効な組み合わせについて は、前景画像を表示する 前景画像を表示するを参照してください。 編集中、エディタでは、セルのテキスト部分にあるスペース全体を使用できます。ValueItemCollection オブジェクトの Presentation プロパティがコンボボックスオプションの1つに設定されている場合は、編集が完了するまで、ビットマップは変 更されません。 ここまでの例では、テキストがデータベースに格納されているままの状態で書式設定されずに表示されています。しかし、画像 と書式設定されたテキストの両方を表示することもできます。ValueItem オブジェクトが実行できる変換は1回だけなの で、ValueItems だけでこれを実現することはできません。ただし、FormatText イベントを使ってテキストを変換 し、ValueItemCollection オブジェクトを使用して、変換されたテキスト(基礎データ値ではない)を画像に関連付けることがで きます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns("Country").NumberFormat = "FormatText Event" 124 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# this.c1TrueDBGrid1.Columns["Country"].NumberFormat = "FormatText Event"; このコード例では、NumberFormat プロパティが FormatText イベントを発生する特別な値に設定されています。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_FormatText(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FormatTextEventArgs) Handles C1TrueDBGrid1.FormatText Select Case e.Value Case "CAN" e.Value = "Canada" Case "UK" e.Value = "United Kingdom" Case "USA" e.Value = "United States" Case "JPN" e.Value = "Japan" Case "AUS" e.Value = "Australia" End Select End Sub C# コードの書き方 C# private void C1TrueDBGrid1_FormatText( object sender, C1.Win.C1TrueDBGrid.FormatTextEventArgs e) { switch (e.value) { case "CAN": e.value = "Canada"; break; case "UK": e.value = "United Kingdom"; break; case "USA": e.value = "United States"; break; case "JPN": e.value = "Japan"; break; case "AUS": e.value = "Australia"; break; } 125 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms } FormatText イベントによって、データベースに格納されている国コードを表示用の実際の国名に変換するため に、ValueItemCollection オブジェクトの各 ValueItem の Value プロパティを適切に変更する必要があります。 HorizontalAlignment プロパティと ForeGroundPicturePosition プロパティを上の例と同様に設定した場合は、次のよう に、基礎データが説明テキストと画像の両方で表示されます。 メモ メモ:画像の DisplayValue は、ステータスコードや許容値の数が比較的少ないフィールドを変換するために適していま す。 ValueItemCollection オブジェクトが提供する画像表示メカニズムより一般的なメカニズムが必要な場合 は、FetchCellStyle イベントと ForeGroundPicturePosition プロパティを組み合わせて使用することによって、セルご とに任意の画像を表示できます。詳細については、前景画像を表示する 前景画像を表示するを参照してください。 ブール値をチェックボックスとして表示する ValueItems オブジェクトを使用して、ブール値をセル内にチェックボックスとして表示することもできます。ブール値のチェック ボックスを表示するために、ValueItem オブジェクトを定義する必要はありません。Presentation プロパティ をPresentationEnum.CheckBoxに設定するだけで済みます。 Translate チェックボックスを選択しなくても、自動データ変換が有効になります。また、CycleOnClick チェックボックスを選択 しなくても、エンドユーザーがセルをクリックすると、セルの値が切り替えられます。次の図に、典型的なチェックボックスを示し ます。 126 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms メモ メモ:チェックボックスに別のビットマップを使用する場合は、C1DataColumn の Values プロパティを使用して、2つの状 態を表す ValueItem オブジェクトをそれぞれ定義します。Presentation プロパティをPresentationEnum.Normalに 設定し、Translate プロパティと CycleOnClick プロパティを True に設定します。 許容値をラジオボタンとして表示する 列の許容値が比較的少ない場合は、これらをラジオボタンで表示することがよくあります。それには、設計時に、 C1TrueDBGrid デザイナを使用する で列のValueItemsノードに移動し、Presentation プロパティを PresentationEnum.RadioButtonに設定します。また、コードを記述する場合は、次のようにします。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns("Country").ValueItems.Presentation = PresentationEnum.RadioButton C# コードの書き方 C# this.c1TrueDBGrid1.Columns["Country"].ValueItems.Presentation = PresentationEnum.RadioButton; 必要に応じて、列スタイルの Width プロパティとグリッドのRowHeight プロパティを調整して、すべてのアイテムが表示され るようにします。 127 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 特定のセルで基礎データが有効な値と一致しない場合、そのセルでは、どのラジオボタンも選択されません。ただし、そのよう な場合に、デフォルトのValueItem オブジェクトを提供して、それを代わりに選択することができます。 上の例では、最後の ValueItem のValue プロパティは空ですが、DisplayValue は Other に設定されています。これによ り、どのアイテムにも一致しない Country フィールドの値は、グリッドに Other として表示されます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns("Country").ValueItems.DefaultItem = 5 C# コードの書き方 C# this.c1TrueDBGrid1.Columns["Country"].ValueItems.DefaultItem = 5; 上のコード例で、5は、0から始まるデフォルトアイテムのインデックスです。 CellTips の状況依存ヘルプ Windows アプリケーションの中には、ユーザーがマウスでツールバーのボタンをしばらくポイントしたままにすると、ツール チップウィンドウにそのボタンに関連するコマンド名が表示されるものが数多くあります。 TrueDBGrid for WinForms の CellTips プロパティを使用すると、ユーザーに同様のヘルプ情報を表示できます。 CellTips は、マウスポインタが停止しているときに、グリッドにポップアップテキストウィンドウを表示するかどうかを指定しま す。デフォルトでは、このプロパティは CellTipEnum.NoCellTipsに設定されており、セルチップは表示されません。 CellTips プロパティが CellTipEnum.Anchored または CellTipEnum.Floatingのいずれかに設定されており、グリッドに フォーカスがあり、マウスポインタがグリッドセル、レコードセレクタ、列のヘッダ、列のフッタ、スプリットのヘッダ、またはグリッ ドのキャプション上で停止すると、FetchCellTips イベントが発生します。このイベントは、ポインタがスクロールバー上にある 場合は発生しません。 CellTipEnum.Anchored に設定すると、セルチップウィンドウはセルの左端または右端に表示されます。セルチップウィンド 128 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ウは左端に表示することをお勧めします。ただし、できるだけ多くのテキストを表示するために、必要に応じて右端に表示する こともできます。 CellTipEnum.Floating に設定すると、セルチップウィンドウはポインタの下に表示されます(表示できる場合)。 FetchCellTipsイベントのハンドラを提供していない場合は、ポインタをグリッドセル上に合わせると、デフォルトでは、セルのコ ンテンツ(256 文字まで)を含むテキストボックスが表示されます。これにより、セルにテキスト全体が収まっていない場合でも、 ユーザーはセルの内容を読むことができます。また、FetchCellTipsイベントをプログラムすれば、デフォルトのセルテキスト表 示を上書きして、ユーザーに状況依存ヘルプを提供することもできます。 FetchCellTipsイベントは、表示されていない列のコンテンツを表示するためによく使用されます。これにより、ポイントされてい る行に関する追加情報を提供できます。次に例を示します。 Visual Basic コードの書き方 Visual Basic ' 通常の宣言 Dim DescCol As C1.Win.C1TrueDBGrid.C1DataColumn Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' DescCol = Me.C1TrueDBGrid1.Columns("Country") Me.C1TrueDBGrid1.CellTips = C1.Win.C1TrueDBGrid.CellTipEnum.Floating End Sub Private Sub C1TrueDBGrid1_FetchCellTips(ByVal sender As System.Object, ByVal e As C1.Win.C1TrueDBGrid.FetchCellTipsEventArgs) Handles C1TrueDBGrid1.FetchCellTips e.CellTip = DescCol.CellText(e.Row) End Sub C# コードの書き方 129 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# //通常の宣言 C1.Win.C1TrueDBGrid.C1DataColumn DescCol; private void Form1_Load(System.object sender, System.EventArgs e) { // DescCol = this.c1TrueDBGrid1.Columns["Country"]; this.c1TrueDBGrid1.CellTips = C1.Win.C1TrueDBGrid.CellTipEnum.Floating; } private void C1TrueDBGrid1_FetchCellTips(System.object sender, C1.Win.C1TrueDBGrid.FetchCellTipsEventArgs e) { // e.CellTip = DescCol.CellText(e.Row); } セルチップウィンドウが表示されるまでの時間を制御するには、CellTipsDelay プロパティを使用します。 セルチップウィンドウの幅を制御するには、CellTipsWidth プロパティを使用します。 スクロールトラッキングと スクロールトラッキングとScrollTips デフォルトでは、ScrollTrack プロパティは True に設定されており、スクロールバーのスクロールボックスをドラッグすると、グ リッドが垂直方向にスクロールします。このプロパティが False に設定されている場合は、スクロールボックスを放すまで、グ リッドはスクロールしません。 ScrollTips プロパティが True に設定されている場合は、スクロールバーのスクロールボックスをドラッグする と、FetchScrollTips イベントが発生します。このイベントを使用して、レコード全体に対するスクロールバーの位置をレコード 単位で追跡できます。また、このイベントを使用して、現在のレコードまたはレコードセットに関する有益な情報をユーザーに表 示できます。ScrollTrack プロパティとScrollTips プロパティを同時に使用すると、大きな DataSet をスクロールする際に、 ユーザーにビジュアルなフィードバックを提供できます。 詳細については、チュートリアル チュートリアル22: 境界線、スクロールトラッキング、スクロールヒント 境界線、スクロールトラッキング、スクロールヒントを参照してください。 データ依存型のセルマージ 基礎グリッドデータをソートした場合に、ソートされた列内で隣接する同じ値のセルをグループ化することによって、データを読 みやすく表示できます。C1DisplayColumn オブジェクトのMerge プロパティは、このようなデータセルをグループ化して、単 一の編集可能なセルを形成するかどうかを制御します。デフォルトでは、このプロパティの値は False で、列内の各物理行ご とにデータ値が表示されます(データ値がある場合)。 130 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms [会社名]フィールドを基準にしてソートされている次のグリッドを例に説明します。 実行時に 会社名 列でデータ依存型のセルマージを有効にすると、コンテンツに基づいてセルがグループ化されます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Country").Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns["Country"].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free; この文を実行すると、次のように表示されます。現在のセルが [会社名]列内にある場合、マーキーは同じ値を持つすべての 行にまたがりMarqueeStyle プロパティの設定に関係なく、外見は点線の四角形になります。ただし、他の列のマーキーの動 作には影響しません。 設計時のレイアウトを指定する場合、C1DisplayColumnCollection エディタ エディタで目的の C1DisplayColumn オブジェクトの Merge プロパティを設定することによって、同様の効果を得ることができます。このプロパティには SplitCollection エディ タで DisplayColumns プロパティの右の省略記号をクリックしてアクセスできます。 131 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Merge プロパティは Free または Restricted に設定できます。Free に設定すると隣接する行の類似値がマージさ れ、Restricted に設定すると、前列でマージされている範囲内で、隣接する行の類似値がマージされます。Free および Restricted の設定の違いは、同じコンテンツ内のセルを常にマージするか(Free)、左に隣接するセルだけを結合するかで す。次の例にこの違いを示します。 マージなし(通常のスプレッドシートビュー) Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.None Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.None Me.C1TrueDBGrid1.Splits(0).DisplayColumns(2).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.None Me.C1TrueDBGrid1.Splits(0).DisplayColumns(3).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.None = = = = C# コードの書き方 132 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.None; this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.None; this.c1TrueDBGrid1.Splits[0].DisplayColumns[2].Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.None; this.c1TrueDBGrid1.Splits[0].DisplayColumns[3].Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.None = = = = Free マージ Visual Basic コードの書き方 Visual Basic ' フリーマージ Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free Me.C1TrueDBGrid1.Splits(0).DisplayColumns(2).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free Me.C1TrueDBGrid1.Splits(0).DisplayColumns(3).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free = = = = ' すべての列の垂直方向の配置を Center に設定 Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1).Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center Me.C1TrueDBGrid1.Splits(0).DisplayColumns(2).Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center Me.C1TrueDBGrid1.Splits(0).DisplayColumns(3).Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center = = = = C# コードの書き方 C# // フリーマージ this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Merge = 133 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free; this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free; this.c1TrueDBGrid1.Splits[0].DisplayColumns[2].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free; this.c1TrueDBGrid1.Splits[0].DisplayColumns[3].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free; // すべての列の垂直方向の配置を Center に設定 this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center; this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center; this.c1TrueDBGrid1.Splits[0].DisplayColumns[2].Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center; this.c1TrueDBGrid1.Splits[0].DisplayColumns[3].Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center; = = = = Restricted マージ Visual Basic コードの書き方 Visual Basic ' 制限付きマージ Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.Restricted Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.Restricted Me.C1TrueDBGrid1.Splits(0).DisplayColumns(2).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.Restricted Me.C1TrueDBGrid1.Splits(0).DisplayColumns(3).Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.None = = = = ' すべての列の垂直方向の配置を Center に設定 Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1).Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center Me.C1TrueDBGrid1.Splits(0).DisplayColumns(2).Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center Me.C1TrueDBGrid1.Splits(0).DisplayColumns(3).Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center 134 = = = = Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C#コードの書き方 C# // 制限付きマージ this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.Restricted; this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.Restricted; this.c1TrueDBGrid1.Splits[0].DisplayColumns[2].Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.Restricted; this.c1TrueDBGrid1.Splits[0].DisplayColumns[3].Merge C1.Win.C1TrueDBGrid.ColumnMergeEnum.None; = = = = // すべての列の垂直方向の配置を Center に設定 this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center; this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center; this.c1TrueDBGrid1.Splits[0].DisplayColumns[2].Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center; this.c1TrueDBGrid1.Splits[0].DisplayColumns[3].Style.VerticalAlignment C1.Win.C1TrueDBGrid.AlignVertEnum.Center; = = = = 列の Merge プロパティが Free または Restricted に設定されている場合は、すべての行に一意の値が含まれている場合で も、すべてのデータセルを編集できません。例外は、AddNew 行だけです。ただし、一度新しい行が基底のデータベースに追 加されると、マージされた列内ではそのデータも編集できなくなります。 メモ メモ: 結合されたセルに表示するものは、テキストに限定されません。 テキストから画像への変換を指定する テキストから画像への変換を指定するで説明した ように、ValueItems オブジェクトを挿入することによって、ビットマップを表示することもできます。画像をグリッドの要素 画像をグリッドの要素 に適用する に適用するの項では、Style オブジェクトを使ってセル内にグラフィックをより柔軟に表示する方法について説明していま す。 マージされたセルを書式設定する 列の Style オブジェクトの HorizontalAlignment および VerticalAlignment プロパティを使用して、次の図のように、マー ジされたセルのデータを中央に配置します。 SplitsCollection エディタ エディタでは、Merge プロパティと同じツリー レベルにある Style プロパティノードを拡張して、これらのプロ パティにアクセスできます。または、次のコードを使用します。 Visual Basic コードの書き方 135 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic With Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Country").Style .HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Center .VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center End With C# コードの書き方 C# C1.Win.C1TrueDBGrid.Style s; s = this.c1TrueDBGrid1.Splits[0].DisplayColumns["Country"].Style; s.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Center; s.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center; 列のグループ化 この機能は、ユーザーがツリー構造を動的に設定できるように提供されています。グループモードでは、「グループ化領域 グループ化領域」が グリッドの上部に追加されます。そのため、直感的なインタフェースを使用して、列のグループを指定できます。コードでは、 GroupedColumns コレクションからこのコレクションにアクセスします。このコレクションは、グループ化領域に移動された C1DataColumn オブジェクトで構成されており、C1DataColumnCollection に似ています。 グループ化領域は、DataView をDataViewEnum.GroupByに設定している場合に作成されます。 AllowColMove を True に設定すると、グリッドで、1つ以上の列をこの領域に移動できます。それには、列を選択し、そのヘッダをグループ化領域にド ラッグします。このアクションを実行時にコード内で実行するには、GroupedColumnCollection の Add メソッドを呼び出しま す。列がグループ化領域に追加されると、最初にグリッドの色が変わり、グリッドの左側にノードが追加され、それまでインデッ クス0の列があった場所にグループ化された列の値が表示されます。同様に、最後のグループ化列をグループ化領域から削 除すると、ノードおよびツリー表示が通常のグリッドに戻ります。GroupedColumnCollection 展開アイコンをクリックすると、グリッドが展開され、次のグループ化列のデータが表示されます。別のグループ化列がある場 合は、この列の横にも展開アイコンが表示されます。各グループ化列に加えて、ソートされた別のレベルの情報もツリー表示 に追加されます。 GroupColumns コレクションの最後の列にある展開アイコンをクリックすると、残りの列にあるデータが、次 のような Normal スタイルのグリッドに表示されます。 グループ化領域をコード内で操作するには、GroupColumns の ID を使用して、グループ化領域のコレクションにアクセスし ます。DisplayColumns と同様に、GroupedColumns では、Add、Item、 RemoveAt 各メソッドと Count プロパティがサ ポートされています。ただし、GroupedColumns は、既存のグリッド列のプレースホルダとして機能するため、Insert メソッド および RemoveAt メソッドの動作は異なります。 Insert メソッドを使用すると、既存の列がグループ化領域に移動されますが、新しい列はグリッドに作成されません。同様 136 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms に、RemoveAt メソッドを使用すると、列がグループ化領域から削除され、グリッド内の元の位置に戻りますが、その列が完全 に削除されることはありません。 グループ化領域に説明テキストを追加するには、GroupByCaption プロパティを使用します。このテキストは、グループ化領 域に列がない場合に表示されます。 詳細については、チュートリアル チュートリアル17: グループ化表示 グループ化表示を参照してください。 GroupIntervalEnum 列挙体による列のグループ化 GroupIntervalEnum 列挙体では、日付、月、年、アルファベット、日付値(Outlook スタイルのグループ化)に基づいてデータ 行をグループ化したり、データをソートする方法をカスタマイズできます。デフォルトの設定は「Default」で、値によって行をグ ループ化します。以下の項で述べるサンプルでは、これらの設定を使用してグループ化する方法について説明します。 Year で行をグループ化 このトピックでは、C1TrueDBGridのGroupIntervalEnum.Year メンバを使用する方法を説明します。 以下の手順を実行します。 1. 新しい .NET プロジェクトを開始します。 2. Visual Studio のツールボックスに移動し、C1TrueDBGrid コントロールをフォームに追加します。 3. C1TrueDBGrid のスマートタグをクリックし、[C1TrueDBGrid タスク タスク]メニューを開き、[データソースの選択 データソースの選択]ボックス のドロップダウン矢印をクリックして、[プロジェクトデータソースの追加 プロジェクトデータソースの追加]を選択します。 4. データソース構成ウィザード]で、NWind.mdb への接続を選択するか、このデータベースへの新しい接続を作成しま す。 5. ウィザードの[データベースオブジェクトの選択 データベースオブジェクトの選択]ページで、[社員 社員]テーブル内のすべてのフィールドを選択し、[データ データ セット名 セット名]ボックスに「社員 社員」と入力して、ウィザードを終了します。 6. Visual Studio で、次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.EmployeesTableAdapter.Fill(Me.Employees._Employees) C#コードの書き方 C# this.employeesTableAdapter.Fill(this.Employees._Employees); 7. DataView プロパティを DataViewEnum.GroupByに設定します。 デザイナの場合 [C1TrueDBGrid タスク] タスク]メニューで、[データレイアウト] 、[データレイアウト]のドロップダウンから GroupBy を選択します 137 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy C# コードの書き方 C# this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy; 8. [C1TrueDBGrid タスク]メニューから[デザイナ]を選択し、[C1TrueDBGrid デザイナ]を開きます。 9. 右ペインにある HireDate 列をクリックして選択します。 この列はツールバーのドロップダウンリストから HireDate をクリックしても選択できます。 10. Interval プロパティをGroupIntervalEnum.Yearに設定します。. デザイナの場合 138 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms [C1TrueDBGrid デザイナ デザイナ]の左ペインで、Interval プロパティを指定して Year に設定します。 コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic ' HireDate 列の GroupInfo.Interval を Year に設定します。 Me.C1TrueDBGrid1.Columns("HireDate").GroupInfo.Interval = C1.Win.C1TrueDBGrid.GroupIntervalEnum.Year C# コードの書き方 C# // HireDate 列の GroupInfo.Interval を Year に設定します。 this.c1TrueDBGrid1.Columns["HireDate"].GroupInfo.Interval = C1.Win.C1TrueDBGrid.GroupIntervalEnum.Year; 11. 最後に、HireDate 列によってグループ化した後この列を表示状態にするには、ColumnVisibleプロパティを True に 設定します。 デザイナの場合 [C1TrueDBGrid デザイナ]の左ペインで、ColumnVisible プロパティを指定して True に設定します。 139 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic ' グループ化中の HireDate 列を表示状態にします。 Me.C1TrueDBGrid1.Columns("HireDate").GroupInfo.ColumnVisible = True C# コードの書き方 C# // グループ化中の HireDate 列を表示状態にします。 this.c1TrueDBGrid1.Columns["HireDate"].GroupInfo.ColumnVisible = true; この例では、HireDate 列が年別にグループ化されます。 値の先頭文字で行をグループ化 このトピックでは、C1TrueDBGrid のGroupIntervalEnum.Alphabetical メンバを使用する方法を説明します。 以下の手順を実行します。 1. 新しい .NET プロジェクトを開始します。 140 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 2. ツールボックスを開き、C1TrueDBGrid コントロールをフォームに追加します。 3. [C1TrueDBGrid タスク]メニューを開き、[データソースの選択]ボックスのドロップダウン矢印をクリックして、[プロジェ クトデータソースの追加]をクリックします。 4. アダプタの[データソース構成ウィザード]で、NWind.mdb への接続を選択するか、このデータベースへの新しい接続 を作成します。 5. ウィザードの[データベースオブジェクトの選択]ページで、[商品]テーブル内のすべてのフィールドを選択し、[データ セット名]ボックスに「商品」と入力して、ウィザードを終了します。 6. Visual Studio で、次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.ProductsTableAdapter.Fill(Me.Products._Products) C# コードの書き方 C# this.productsTableAdapter.Fill(this.Products._Products); 7. DataView プロパティを DataViewEnum.GroupBy. に設定します。 デザイナの場合 [C1TrueDBGrid タスク]メニューで、[データレイアウト]のドロップダウンから GroupBy を選択します。 コードの場合 次のコードを Form_Load イベントに追加します。 141 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy C# コードの書き方 C# this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy; 8. C1TrueDBGrid タスク]メニューから[デザイナ]を選択し、[C1TrueDBGrid デザイナ]を開きます。 9. 右ペインにある ProductName 列をクリックして選択します。 この列はツールバーのドロップダウンリストから ProductName をクリックしても選択できます 10. Interval プロパティを Alphabetical に設定します。 デザイナの場合 [C1TrueDBGrid デザイナ]の左ペインで、Interval プロパティを指定して Alphabetical に設定します。 コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic ' ProductName 列の GroupInfo.Interval を Alphabetical に設定します。 Me.C1TrueDBGrid1.Columns("ProductName").GroupInfo.Interval = 142 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1.Win.C1TrueDBGrid.GroupIntervalEnum.Alphabetical C# コードの書き方 C# // ProductName 列の GroupInfo.Interval を Alphabetical に設定します。 this.c1TrueDBGrid1.Columns["ProductName"].GroupInfo.Interval = C1.Win.C1TrueDBGrid.GroupIntervalEnum.Alphabetical; 11. 最後に、ProductName 列によってグループ化した後この列を表示状態にするには、ColumnVisible ColumnVisible プロパティを True に設定します。 デザイナの場合 [C1TrueDBGrid デザイナ]の左ペインで、ColumnVisible プロパティを指定して True に設定します。 コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic ' グループ化中の ProductName 列を表示状態にします。 Me.C1TrueDBGrid1.Columns("ProductName").GroupInfo.ColumnVisible = True C# コードの書き方 C# // グループ化中の ProductName 列を表示状態にします。 this.c1TrueDBGrid1.Columns["ProductName"].GroupInfo.ColumnVisible = true; この例では、ProductName 列は商品名の最初の文字別にグループ化されます。 143 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Date Value で行をグループ化( で行をグループ化(Outlook スタイル) このトピックでは、 、C1TrueDBGrid の GroupIntervalEnum.DateSpan メンバを使用する方法を説明します。 注意 注意:この例では Nwind.mdb データベースは変更されました。フィールド HireDate が社員テーブルに追加され、最新 の日付が入力されました。 以下の手順を実行します。 1. 新しい .NET プロジェクトを開始します。 2. ツールボックスを開き、C1TrueDBGrid コントロールをフォームに追加します。 3. C1TrueDBGrid タスク メニューを開き、[データソースの選択]ボックスのドロップダウン矢印をクリックして、[プロジェ クトデータソースの追加]をクリックします。 4. アダプタのデータソース構成ウィザード データソース構成ウィザードで、NWind.mdb への接続を選択するか、このデータベースへの新しい接続を 作成します。 5. ウィザードの[データベースオブジェクトの選択 データベースオブジェクトの選択]ページで、[社員 社員]テーブル内のすべてのフィールドを選択し、[データ データ セット名 セット名]ボックスに「社員」と入力して、ウィザードを終了します。 6. Visual Studio で、次のコードをForm_Loadイベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.EmployeesTableAdapter.Fill(Me.Employees._Employees) C# コードの書き方 C# this.employeesTableAdapter.Fill(this.Employees._Employees); 7. DataViewプロパティをDataViewEnum.GroupBy に設定します。 デザイナの場合 C1TrueDBGrid タスク タスクメニューで、[データレイアウト データレイアウト]のドロップダウンリストから GroupBy を選択します。 144 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コードの場合 次のコードを Form_Loadイベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy C#コードの書き方 C# this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy; 8. C1TrueDBGrid タスク タスクメニューから[デザイナ デザイナ]を選択し、[C1TrueDBGrid デザイナ デザイナ]を開きます。 9. 右ペインにある HireDate 列をクリックして選択します。 この列はツールバーのドロップダウンリストから HireDate をクリックしても選択できます。 10. Intervalプロパティを GroupIntervalEnum.DateSpanに設定します。 145 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms デザイナの場合 C1TrueDBGrid デザイナ デザイナの左ペインで、Interval プロパティを指定して DateSpan に設定します。 コードの場合 次のコードをForm_Loadイベントに追加します。 Visual Basic コードの書き方 Visual Basic ' グリッドの GroupInfo.Interval を DateSpan に設定します。 Me.C1TrueDBGrid1.Columns("NextMeeting").GroupInfo.Interval = C1.Win.C1TrueDBGrid.GroupIntervalEnum.DateSpan C#コードの書き方 C# // グリッドの GroupInfo.Interval を DateSpan に設定します。 this.c1TrueDBGrid1.Columns["NextMeeting"].GroupInfo.Interval = C1.Win.C1TrueDBGrid.GroupIntervalEnum.DateSpan; 11. 最後に、HireDate 列によってグループ化した後この列を表示状態にするには、ColumnVisibleプロパティを True に 設定します。 デザイナの場合 C1TrueDBGrid デザイナ デザイナの左ペインで、ColumnVisible プロパティを指定して True に設定します。 146 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic 'グループ化中の HireDate 列を表示状態にします。 Me.C1TrueDBGrid1.Columns("NextMeeting").GroupInfo.ColumnVisible = True C#コードの書き方 C# // グループ化中の HireDate 列を表示状態にします。 this.c1TrueDBGrid1.Columns["NextMeeting"].GroupInfo.ColumnVisible = true; この例では、HireDate 列が日付値別にソートされます。 147 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms カスタム設定で行をグループ化 このトピックでは、C1TrueDBGrid の GroupIntervalEnum.Custom メンバを使用する方法を説明します。 以下の手順を実行します。 1. 新しい .NET プロジェクトを開始します。 2. ツールボックスを開き、 C1TrueDBGrid コントロールをフォームに追加します。 3. C1TrueDBGrid タスク タスクメニューを開き、[データソースの選択 データソースの選択]ボックスのドロップダウン矢印をクリックして、[プロジェク プロジェク トデータソースの追加 トデータソースの追加]をクリックします。 4. アダプタの[データソース構成ウィザード データソース構成ウィザード]で、NWind.mdb への接続を選択するか、このデータベースへの新しい接続 を作成します。 5. ウィザードの[データベースオブジェクトの選択 データベースオブジェクトの選択]ページで、[商品]テーブル内のすべてのフィールドを選択し、[データ データ セット名 セット名]ボックスに「商品 商品」と入力して、ウィザードを終了します。 6. 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.ProductsTableAdapter.Fill(Me.Products._Products) C# コードの書き方 C# this.productsTableAdapter.Fill(this.Products._Products); 7. DataView プロパティをDataViewEnum.GroupByに設定します デザイナの場合 C1TrueDBGrid タスク タスクメニューで、[データレイアウト データレイアウト]のドロップダウンから GroupBy を選択します。 148 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy C# コードの書き方 C# this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy; 8. C1TrueDBGrid タスク タスクメニューから[デザイナ デザイナ]を選択し、[C1TrueDBGrid デザイナ]を開きます。 9. 右ペインにある UnitPrice 列をクリックして選択します。 この列はツールバーのドロップダウンリストから UnitPrice をクリックしても選択できます。 10. Interval プロパティを GroupIntervalEnum.Customに設定します。 デザイナの場合 149 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid デザイナ デザイナの左ペインで、Interval プロパティを指定して custom に設定します。 コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic ' グリッドの GroupInfo.Interval を Custom に設定します。 Me.C1TrueDBGrid1.Columns("UnitPrice").GroupInfo.Interval = C1.Win.C1TrueDBGrid.GroupIntervalEnum.Custom C# コードの書き方 C# // グリッドの GroupInfo.Interval を Custom に設定します。 this.c1TrueDBGrid1.Columns["UnitPrice"].GroupInfo.Interval = C1.Win.C1TrueDBGrid.GroupIntervalEnum.Custom; 11. UnitPrice 列の NumberFormat プロパティを Currency に設定します。 デザイナの場合 [C1TrueDBGrid デザイナ デザイナ]の左ペインで、NumberFormat プロパティを指定して Currency に設定します。 150 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic ' UnitPrice 列を通貨表示に設定します。 Me.C1TrueDBGrid1.Columns("UnitPrice").NumberFormat = "Currency" C# コードの書き方 C# // UnitPrice 列を通貨表示に設定します。 this.c1TrueDBGrid1.Columns["UnitPrice"].NumberFormat = "Currency"; / 12. 最後に、UnitPrice 列によってグループ化した後この列を表示状態にするには、ColumnVisible プロパティを True に 設定します。 デザイナの場合 [C1TrueDBGrid デザイナ デザイナ]の左ペインで、ColumnVisible プロパティを指定して True に設定します。 151 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic ' グループ化中の UnitPrice 列を表示状態にします。 Me.C1TrueDBGrid1.Columns("UnitPrice").GroupInfo.ColumnVisible = True C# コードの書き方 C# // グループ化中の UnitPrice 列を表示状態にします。 this.c1TrueDBGrid1.Columns["UnitPrice"].GroupInfo.ColumnVisible = true; 13. 次のコードをGroupInterval イベントに追加します Visual Basic コードの書き方 Visual Basic ' 現在のグリッドセルから値を少数として取得します。 Dim p As Decimal = CType(Me.C1TrueDBGrid1(e.Row, e.Col.DataColumn.DataField), Decimal) ' カスタムグループ値を割り当てます. If p > 0 And p < 10 Then e.Value = "$0 - $9.99" ElseIf p >= 10 And p < 20 Then e.Value = "$10.00 - $19.99" ElseIf p >= 20 And p < 40 Then e.Value = "$20.00 - $39.99" ElseIf p >= 40 And p < 60 Then e.Value = "$40.00 - $59.99" ElseIf p >= 60 Then e.Value = "$60 And Greater" 152 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms End If C# コードの書き方 C# // 現在のグリッドセルから値を少数として取得します。 decimal p = ((decimal)this.c1TrueDBGrid1(e.Row,e.Col.DataColumn.DataField)); // カスタムグループ値を割り当てます. If (p > 0 && p < 10) { e.Value = "$0 - $9.99"; } else if (p >= 10 && p < 20) { e.Value = "$10.00 - $19.99"; } else if (p >= 20 && p < 40) { e.Value = "$20.00 – $39.99"; } else if (p >= 40 && p < 60) { e.Value = "$40.00 - $59.99"; } else if (p >= 60) { e.Value – "$60 and Greater"; } この例では、UnitPrice 列がカスタム設定でソートされます。 153 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms グループ化された行の展開/折りたたみ グループ化されたすべての行を一度に展開/折りたたむには、ExpandGroupRow メソッドと CollapseGroupRow メソッドを 使用します。このトピックでは、ボタンをフォームに追加し、ExpandGroupRow メソッドと CollapseGroupRow メソッドを使用 してグループ化されたグリッドを展開/折りたたみます。 次の手順を実行します。 1. .NET プロジェクトを開始します。 2. ツールボックスを開き、フォームに SplitContainer を追加します。 3. SplitContainer1 のスマートタグを選択して[SplitContainer タスク タスク]メニューを開き、[左右分割の方向 左右分割の方向]を選択しま す。 4. SplitContainer 下部パネルの SplitContainer1.Panel2 を選択し、ツールボックスに移動して Button1 コントロール と Button2 コントロールをパネルに追加します。 5. フォーム上の各ボタンのサイズを変更し、デザイナまたはコードから各ボタンの Text プロパティを設定します。 デザイナの場合 [プロパティ]ウィンドウで次のプロパティを設定します。 Button1 を選択し、[プロパティ プロパティ]ウィンドウで Text プロパティを「展開 展開」に設定します。 Button2 を選択し、[プロパティ プロパティ]ウィンドウで Text プロパティを「折りたたみ 折りたたみ」に設定します。 コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.Button1.Text = "Expand" Me.Button2.Text = "Collapse" C#コードの書き方 C# this.button1.Text = "Expand"; this.button2.Text = "Collapse"; 6. SplitContainer の一番上のパネルの SplitContainer1.Panel1 を選択し、ツールボックスに移動して、 C1TrueDBGrid コントロールをパネルに追加します。 7. C1TrueDBGrid タスク タスクメニューを開いて、[親コンテナにドッキングする 親コンテナにドッキングする]を選択します。 8. C1TrueDBGrid タスク タスクメニューで[データソースの選択 データソースの選択]ボックスのドロップダウン矢印をクリックし、[プロジェクトデータ プロジェクトデータ ソースの追加 ソースの追加]をクリックします。 9. アダプタのデータソース構成ウィザード データソース構成ウィザードで、NWind.mdbへの接続を選択するか、NWind.mdb への新しい接続を作 成します。 10. ウィザードのデータベースオブジェクトの選択ページで Products テーブルのすべてのフィールドを選択するか、[デー タセット名]ボックスへ「Products」と入力してウィザードを終了します。 Visual Studio により次のコードが Form_Load イベントに追加されます。 Visual Basic コードの書き方 Visual Basic Me.ProductsTableAdapter.Fill(Me.Products._Products) C# コードの書き方 154 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# this.productsTableAdapter.Fill(this.products._Products); 11. DataView プロパティをデザイナまたはコードから DataViewEnum.GroupBy に設定します。 デザイナの場合 [C1TrueDBGrid タスク] タスク]メニューで、[データレイアウト] データレイアウト]ドロップダウンから「「GroupBy」」を選択します。 コードの場合 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy C# コードの書き方 C# this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy; 12. 次の Button_Click イベントをコードエディタに追加し、ExpandGroupRow メソッドと CollapseGroupRow メソッドを 追加します。 Visual Basic コードの書き方 Visual Basic Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.C1TrueDBGrid1.ExpandGroupRow(-1, True) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.C1TrueDBGrid1.CollapseGroupRow(-1) End Sub C# コードの書き方 C# private void button1_Click(object sender, EventArgs e) { this.c1TrueDBGrid1.ExpandGroupRow(-1, true); } private void button2_Click(object sender, EventArgs e) { this.c1TrueDBGrid1.CollapseGroupRow(-1); } アプリケーションを実行して確認します。 1. 列ヘッダを GroupBy 領域にドラッグしてグリッドをグループ化します。 155 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 2. 展開>ボタンを選択し、すべてのグループ化された行とサブグループが展開されていることを確認します。 3. 縮小 縮小>ボタンを選択して、グループ化されたすべての行が折りたたまれていることを確認します。 データの表示 C1TrueDBGrid の DataView プロパティを使用して、階層化データ表示、階層化データのドロップダウン表示、フォームデー タの表示、転置データの表示、複数ライン表示などいくつかのビューでデータを表示できます。プロパティウィンドウ、コードま たは、[C1TrueDBGrid タスク タスク]メニューの[データレイアウト]オプションを選択することで、DataView を変更することができま す。 156 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 次のトピックでは C1TrueDBGrid で設定可能な各データビューを説明します。 階層化データの表示 TrueDBGrid for WinForms は、階層化されたデータを表示できます。一般に、階層化データは、複数のリレーショナルテー ブルに格納されているデータを参照します。リレーショナルテーブルでは、マスターテーブル(親テーブル)がキーフィールドに よって詳細テーブル(子テーブル)にリンクされます。データを階層表示すると、最初にマスターデータが表示され、ユーザー は、クリックするだけで、同じグリッド内に関連する詳細データを表示できます。 グリッドをマスター/詳細データソースに連結する場合は、水平テーブル領域(バンド)を使って階層化データの関連グループ を表示します。バンドは、データそのものではなく、階層 DataSet を仮想的に表現したものです。バンドは、階層レコードセット 内の各レベルごとに作成され、テーブル全体または選択された少数のフィールドだけを入れることができます。実行時、ユー ザーは、ツリー表示に似たインタフェースを使用して、バンドを展開したり、折りたたむことができます。 この機能を使用するには、DataView プロパティをDataViewEnum.Hierarchicalに設定する必要があります。また、グリッド コントロールを階層化された DataSet に連結する必要があります。その1つの方法として、DataSource プロパティを使用しま す。 次の図に、2つのテーブルの関係を例示します。この図は、.NET xsd ファイルエディタ画面の例です。ここでは、Composer テーブルと Opus テーブルが関連付けられています。どちらのテーブルにも Last フィールドがあり、このフィールドが両方の テーブルの主キーになっています。また、Composer テーブルと Opus テーブルの Last フィールドはどちらも同じものです。そ こで、このフィールドに基づいて2つのテーブルを連結すると、これらのテーブルによる階層化 DataSet を作成できます。 バンドとグリッドの階層表示を使用することによって、この階層化 DataSet をグリッドに表示できます。3つの手順を踏むだけ で、上の DataSet を C1TrueDBGrid に表示できます。次にその手順を示します。 1. まず、グリッドのDataSource プロパティを階層化 DataSet に設定する必要があります。この例では、DataSet の名前 は dsMasterDetail1 です。 2. 次に、グリッドのDataMember プロパティを DataSet の親テーブルに設定する必要があります。これにより、グリッド 157 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms に最初に表示するテーブルを設定できます。この例では、親テーブルは Composer です。 3. 最後に、グリッドを階層表示に切り替えます。DataView プロパティを DataViewEnum.Hierarchical に設定すると、 グリッドに上のデータセットがバンド構造で表示されます。 実行時、グリッドには読み取り専用のデータが表示されます。次の図は、グリッドの表示例です。最初にマスターレコードセット (Composer)のデータが表示され、詳細レコードセットバンドのフィールドが右側に表示されます。ただし、詳細レコードセット のフィールドには、最初はデータが含まれていません。レコードの左端の展開アイコン( + )が、階層化データがあることを示し ています。 ユーザーが展開アイコンをクリックすると、アイコンは折りたたみアイコン( - )に変わり、横のバンド(Orders)が展開して、ク リックした行の詳細レコードが表示されます。 メモ メモ:C1TrueDBGrid DataView プロパティがデフォルト値のDataViewEnum.Normalに設定されている場合、グリッド にはフラットファイルだけが表示され、階層表示はサポートされません。データソースが階層化されたDataSetであって も、グリッドに表示されるのは、マスターテーブルのデータだけです。 DataView プロパティは設計時に設定する必要があります。実行時には変更できません。 階層表示のグリッドを操作するために、次のメソッドが用意されています。 メソッド 説明 GetBand 指定された列インデックスに対応するバンドを返す。 CollapseBand 指定されたバンドのすべての行を折りたたむ。 ExpandBand 指定されたバンドのすべての行を展開する。 RowExpanded 指定されたバンド内で現在の行が展開されている場合 は、True を返す。 マスター/詳細データソース内のレコードセットのレベル数が事前にわからない場合は、コード内で Bands プロパティを調べ ます。利用できるバンドの数は、0から -1 までです。 アプリケーションで次のイベントを使用すると、ユーザーによって開始された階層表示操作に応答できます。 イベント 説明 Collapse ユーザーがバンドを折りたたむと発生する。 Expand ユーザーがバンドを展開すると発生する。 階層化データのドロップダウン表示 TrueDBGrid for WinForms では、データソース間の親子関係を表示する際に、マスターテーブル内からまったく新しい C1TrueDBGrid を開き、そこに子のデータレコードを表示できます。ChildGrid プロパティを設定して2つのグリッドコントロー 158 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ルを接続し、数行のコードを記述するだけで、完全に編集可能な子データのドロップダウンを作成できます。このドロップダウン は、クリックするだけでマスターテーブル内に表示されます。 階層化されたデータセットがすでに設定されている場合は、C1TrueDBGrid1 の ChildGrid プロパティのテキストボックスに C1TrueDBGrid2 と入力することで、親子関係を作成できます。 次に、C1TrueDBGrid2 の SplitCollection エディタ エディタを開き、ExtendRightColumn プロパティを True に変更します。 C1TrueDBGrid2 は非表示になり、各行の左端のセルに展開アイコン( + )が表示されます。次の例のマスターテーブルに は、作曲家のリストとその主要な情報が含まれています。右にスクロールしても、展開アイコンは常に左端のセルに表示され ます。 展開アイコンの1つを左クリックすると、ドロップダウンに子テーブルが表示されます。この例のドロップダウンには、展開した作 曲家の作品リストが表示されます。 この例からもわかるように、簡単な操作でマスターグリッドに子グリッドを結び付けて、階層化されたデータをわかりやすく表示 できます。 フォームデータの表示 159 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 一度に1レコードずつデータを表示する場合は、DataView プロパティをDataViewEnum.Formに設定します。設計時または 実行時のどちらかでこのプロパティを設定すると、次の図に示すように、編集可能なフォームにデータを表示できます。 データ列領域またはキャプション列領域の幅を調節する場合は、ViewColumnWidth プロパティと ViewCaptionWidth プ ロパティを変更して、適切な列間隔に設定します。 転置データの表示 DataView プロパティのDataViewEnum.Inverted オプションは、データの各行を列に転置します。つまり、左端の列が最初 の行になり、2番目の列が2番目の行になります。この表示を使用すると、数多くの列があるテーブルを表示する際に、画面を 最大限に利用できます。DataView プロパティを DataViewEnum.Inverted に設定すると、次の図のように、グリッドが転置 されて表示されます。 データ列領域またはキャプション列領域の幅を調節する場合は、ViewColumnWidth プロパティと ViewCaptionWidth プ ロパティを変更して、適切な列間隔に設定します。 データの複数ライン表示 通常、レコードは、グリッドの1つの行に表示されます。グリッドの幅が小さく、レコード内のすべての列を表示できない場合は、 自動的に水平スクロールバーが表示され、表示領域の内外に列をスクロールできるようになります。まず、次の2つの違いを 理解してください。 グリッドの1ラインは、グリッドに表示されるセルの一つの物理行です。ラインと、セル内部のテキスト行を混同しないで ください。RowHeight プロパティと WrapText プロパティの設定によっては、セル内のデータが複数行のテキストで表 示される場合があります。 グリッドの1行は、1つのレコードの表示に使用されます。行には、複数のライン(複数の物理行 複数の物理行)が含まれる場合があ ります。 グリッドの DataView プロパティを DataViewEnum.MultipleLines に設定すると、使用できるグリッド領域内にデータセット 内のデータフィールドをすべて表示できます。つまり、データセット内のフィールドがグリッド領域内に入りきらない場合は、1つ のレコードに複数のラインが表示されます。この機能を使用すると、次の図のようにレコードのすべての列(フィールド)をグリッ ドの幅に一度に表示できるため、エンドユーザーが水平方向にスクロールする必要がなくなります。 160 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 作成された列のレイアウトに満足できない場合は、設計時または実行時に列の幅や順番を変えてレイアウトを調整できます。 列の幅を変更して大きくすると、そのライン内の他の列の幅がその分狭くなります。前バージョンのグリッドとは異なり、列は、 サイズ変更されても次のラインに折り返されません。 複数ライン表示で列の順番を変更するには、列ヘッダを新しい位置までクリック&ドラッグします。列を配置する場所を示す赤 い矢印が表示されます。列をドロップすると、それに応じて列の配置が変更されます。 メモ:設計時に、HScrollBar および VScrollBar の各スタイルプロパティが ScrollBarStyleEnum.Automatic に設定さ れており、DataView プロパティが MultipleLines に設定されている場合は、表示するデータがなくても、垂直スクロー ルバーが表示されます。これは、設計時に、スクロールバーの幅を計算に入れながら列を調整できるようにするためで す。 複数ラインモードについて 行に関連する現行のプロパティ、メソッド、およびイベントは、これまでのレコード、行、およびラインの定義にも適合しています (後で説明する2つの例外を除く)。次に例を示します。 VisibleRows プロパティは、可視のラインではなく、グリッドに表示されている可視の行またはレコードの数を返しま す。1行に2つのラインがあり、VisibleRows プロパティの値が5の場合、グリッドには10のラインが表示されています。 RowTop メソッドは、引数として0から VisibleRows --1 までの範囲の行数を受け取ります。1行に2つのラインがある 場合、RowTop ( 2 )は、3番目の表示行(5番目のライン)の上の位置を返します。 RowResize イベントは、実行時にユーザーが行のサイズを変更すると発生します。実際、レコードセレクタ列に、行区 切り境界線だけが表示されます。つまり、ユーザーがサイズ変更できるのは行だけで、ラインではありません。 行に関連するその他のプロパティ、メソッド、およびイベントも、同様に解釈されますが、次の2つは例外です。 1. 第1の例外は RowHeight プロパティです。RowHeight プロパティは、行の高さではなく、セルまたはラインの高さを 返します。このプロパティを変更すると、ユーザーの既存のコードが壊れるため、このプロパティは変更されていませ ん。 2. 第2の例外は、例外というより制限です。現在、行とラインの分割線は同じです。RowDivider オブジェクトの Style プ ロパティを変更すると、行およびラインの分割線がすべて同じスタイルに変更されます。つまり、行とラインに異なる分 割線を設定することはできません。 複数ラインの固定モード DataView プロパティを DataViewEnum.MultipleLines に設定すると、水平方向にスクロールしなくてもグリッドの幅の中 161 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms にレコードのすべての列(フィールド)を同時に表示できます。水平方向のスクロールバーを表示するなど、複数行のデータ ビューをより詳細に制御するには、DataView プロパティをDataViewEnum.MultipleLinesFixed に設定します。 DataViewEnum.MultipleLinesFixed データビューは DataViewEnum.MultipleLines データビューによく似ていますが、 サブ行の数は一度設定したら変更されません。サブ行の数は、コードまたはC1TrueDBGrid タスク タスクメニューから LinesPerRow プロパティを使用して設定できます。 この DataView での行の幅はグリッドの幅に拘束されません。列幅の合計がグリッドのクライアント領域の幅より大きいと、水 平方向のスクロールバーが表示されます。 左端の列もマージできます。Merge プロパティを設定すると、左端の列を行の高さまで延長できます。たとえば次の画像で は、ProductID列が行の高さまで伸びています。 注意 注意:マージのプロパティは、グリッド内の左端の列に対してのみ適用できます。 オーナー描画セル 複雑なセルごとのカスタマイズの実行が必要な場合、OwnerDrawCell イベントのハンドラを記述して、セルのコンテンツをレ 162 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ンダリングできます。このイベントはOwnerDraw プロパティが True に設定されたセルのコンテンツを表示するために必要に 応じて発生します。 上記のようにオーナー描画セルを作成するには、以下を実行します。 1. デザイナまたはコードで、First 列の OwnerDraw プロパティを True に設定します。 デザイナの場合 C1TrueDBGrid タスク タスクメニューからデザイナ デザイナを選択し、C1TrueDBGrid デザイナ デザイナを開きます。 グリッドの右ペインにある First 列をクリックして選択します。 •この列はツールバーのドロップダウンリストから First をクリックしても選択できます。 左ペインで、表示列 表示列タブをクリックします。 OwnerDraw プロパティを True に設定します。 OKをクリックして、エディタを閉じます。 コードの場合 次のコードを Form_Load イベントに追加します。 163 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns("First").OwnerDraw = True C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns["First"].OwnerDraw = true; 2. フォームの全般的な宣言内で RECT 構造体を宣言します。 Visual Basic コードの書き方 Visual Basic Public Structure RECT Dim Left As Long Dim Top As Long Dim Right As Long Dim Bottom As Long End Structure C# コードの書き方 C# public struct RECT{ long Left; long Top; long Right; long Bottom; } 3. 次のように、OwnerDrawCell イベントを実装します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_OwnerDrawCell(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.OwnerDrawCellEventArgs) Handles C1TrueDBGrid1.OwnerDrawCell If e.Col = 0 Then ' 青色から赤色へのグラデーションブラシを作成します。 Dim pt1, pt2 As Point pt1 = New Point(e.CellRect.X, e.CellRect.Y) pt2 = New Point(e.CellRect.Right, e.CellRect.Y) Dim linGrBrush As System.Drawing.Drawing2D.LinearGradientBrush linGrBrush = New System.Drawing.Drawing2D.LinearGradientBrush(pt1, pt2, Color.Blue, Color.Red) Dim rt As RectangleF rt = New RectangleF(e.CellRect.X, e.CellRect.Y, e.CellRect.Width, e.CellRect.Height) 164 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ' セル矩形をグラデーションで塗りつぶします。 e.Graphics.FillRectangle(linGrBrush, e.CellRect) Dim whiteBR As Brush whiteBR = New SolidBrush(Color.White) Dim dispCol As C1.Win.C1TrueDBGrid.C1DisplayColumn dispCol = Me.C1TrueDBGrid1.Splits(0).DisplayColumns(e.Col) ' テキストを水平に中央揃えにします。 Dim sfmt As New StringFormat() sfmt.Alignment = StringAlignment.Center ' テキストを描画します。 e.Graphics.DrawString(dispCol.DataColumn.CellText(e.Row), dispCol.Style.Font, whiteBR, rt, sfmt) whiteBR.Dispose() ' グリッドにイベントが処理されたことを知らせます。 e.Handled = True End If End Sub C# コードの書き方 C# private void C1TrueDBGrid1_OwnerDrawCell(object sender, C1.Win.C1TrueDBGrid.OwnerDrawCellEventArgs e) { if ( e.Col = 0 ) { // 青色から赤色へのグラデーションブラシを作成します。 Point pt1, pt2; pt1 = new Point[e.CellRect.X, e.CellRect.Y]; pt2 = new Point[e.CellRect.Right, e.CellRect.Y]; System.Drawing.Drawing2D.LinearGradientBrush linGrBrush; linGrBrush = new System.Drawing.Drawing2D.LinearGradientBrush(pt1, pt2, Color.Blue, Color.Red); RectangleF rt; rt = new RectangleF(e.CellRect.X, e.CellRect.Y, e.CellRect.Width, e.CellRect.Height); // セル矩形をグラデーションで塗りつぶします。 e.Graphics.FillRectangle(linGrBrush, e.CellRect); Brush whiteBR; whiteBR = new SolidBrush(Color.White); C1.Win.C1TrueDBGrid.C1DisplayColumn dispCol; dispCol = this.c1TrueDBGrid1.Splits[0].DisplayColumns[e.Col]; // テキストを水平に中央揃えにします。 StringFormat sfmt = new StringFormat(); 165 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms sfmt.Alignment = StringAlignment.Center; // テキストを描画します。 e.Graphics.DrawString(dispCol.DataColumn.CellText[e.Row], dispCol.Style.Font, whiteBR, rt, sfmt); whiteBR.Dispose(); // グリッドにイベントが処理されたことを知らせます。 e.Handled = true; } } この例には注意すべきいくつかの要点があります。 Handled プロパティを True に設定した場合、グリッドではセルの背景が入力されず、セルテキストまたはグラフィック スも表示されません。そのため、表示するデータがない場合でも各自でセル全体の入力を行います。 ここで例示したような比較的単純な例でも、かなりの量のコーディングが必要となるため、可能ならばオーナー描画セ ルの代わりに、背景ビットマップの使用を検討してください。 DataSet 内のデータのフィルタ処理 特定のフィールドに表示されるアイテムの数を制限するように、基礎レコードセットをフィルタするとします。C1TrueDBGrid で は、2つの簡単な手順でこれを実行できます。FilterBar プロパティとAllowFilter プロパティを使用し、適切なフィルタテキスト を適切に入力するだけで、ほとんど手間もなくフィールドエントリの数を減らすことができます。C1TrueDBGrid コントロールの FilterBar プロパティを設定すると、グリッドの最初のデータ行のすぐ上に、灰色の分割線で区切られた空の行が表示されま す。 次に、グリッドにフィルタを実装するために、AllowFilter プロパティを True に設定します。これにより、グリッドにフィルタ処理 を実装できます。FilterBar プロパティと AllowFilter プロパティの両方を True に設定すると、グリッドにフィルタバーが表示さ れ、DataSet が自動的に処理されます。 手作業によるデータのフィルタリング フィルタ処理を自分で行う場合は、AllowFilter プロパティを False のままにして、グリッドの自動フィルタを実装しません。フィ ルタを作成するには、FilterChange イベントを使用して、手作業でデータをソートする必要があります。このイベントは、ユー ザーがフィルタバーの状態を変更すると発生します。 このイベントでは、ユーザーが入力した文字に基づいてデータセットをフィルタするハンドラを作成する必要があります。たとえ ば、ユーザーがフィルタバーのセルに "B" と入力した場合は、値が文字 B で始まる列アイテムだけに基礎データセットを制限 する必要があります。ユーザーがフィルタの文字を増やして "BR" にした場合は、BR で始まる値だけに列アイテムを減らす必 166 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 要があります。 フィルタバーに入力促進文字列を追加する フィルタバーに入力促進文字列を追加し、デフォルトテキストとともに簡単に表示できます。この入力促進文字列を使ってテキ ストのフィルタリングやデフォルト値を追加するための指示を表示し、特定のフィルタバーのセルに入力できる値をユーザーに 理解してもらうことなどできます。フィルタバーにテキストを表示するには、FilterWatermark プロパティに文字列を設定する だけです。 たとえば次のコードで、最初のフィルタバーのセルの FilterWatermark にFilter Meを設定します。 Visual Basic コードの書き方 Visual Basic ' 最初の列の C1DataColumn.FilterWatermark プロパティを設定します。 Me.C1TrueDBGrid1.Columns(0).FilterWatermark = "Filter Me" C# コードの書き方 C# // 最初の列の C1DataColumn.FilterWatermark プロパティを設定します。 this.c1TrueDBGrid1.Columns[0].FilterWatermark = "Filter Me"; 入力促進文字列のあるフィルタバーのセルの背景色が変わったのが分かります。 次のコードでは、FilterWatermark は各列のキャプションのテキスト値に設定されます。 Visual Basic コードの書き方 Visual Basic 167 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Dim colcount As Integer colcount = 0 While C1TrueDBGrid1.Columns.Count > colcount '各列の C1DataColumn.FilterWatermark プロパティを各列のキャプションに設定します。 C1TrueDBGrid1.Columns(colcount).FilterWatermark = C1TrueDBGrid1.Columns(colcount).Caption colcount = colcount + 1 End While C# コードの書き方 C# int colcount; colcount = 0; while (c1TrueDBGrid1.Columns.Count > colcount) { // 各列の C1DataColumn.FilterWatermark プロパティを各列のキャプションに設定します。 this.c1TrueDBGrid1.Columns[colcount].FilterWatermark = c1TrueDBGrid1.Columns[colcount].Caption; colcount = colcount + 1; } グリッドは、次のようになります。 テキストがフィルタリングされると、入力促進文字列は見えなくなるのが分かります。 FilterWatermark のスタイルの外観を変更するには、FilterWatermarkStyle プロパティを使用します。スタイルについての 詳細は、スタイルの使用方法 スタイルの使用方法を参照してください。 168 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 複数の条件によるグリッドのフィルタリング 実行時に、複数のフィルタ条件を使用してグリッドをフィルタできるようになりました。たとえば、文字 A または文字 B で始まる 項目だけがグリッドに表示されるグリッドをフィルタできます(フィルタをどちらか1つの条件に限る必要はありません)。必要な 手順は、FilterMultiSelect プロパティを True に設定し、テキストをフィルタバーに表示するだけです。 たとえば以下のコードでは、最初のフィルタバーセルのFilterMultiSelect プロパティが True に設定されます。 Visual Basic コードの書き方 Visual Basic ' フィルタバーを表示します。 Me.C1TrueDBGrid1.FilterBar = True ' 最初の列を複数の項目でフィルタできるようにします。 Me.C1TrueDBGrid1.Columns(0).FilterMultiSelect = True C# コードの書き方 C# // フィルタバーを表示します。 this.c1TrueDBGrid1.FilterBar = true; //最初の列を複数の項目でフィルタできるようにします。 this.c1TrueDBGrid1.Columns[0].FilterMultiSelect = true; アプリケーションを実行すると、最初のセルを複数の条件でフィルタできることがわかります。たとえば、フィルタバーに「a,b」と 入力して、文字 A と文字 B で始まる項目が表示されることを確認します。FilterSeparator プロパティを設定し、別個のフィル タ項目に使用する文字をカスタマイズできます。 フィルタドロップダウンリストの追加 フィルタバーに加え、フィルタバーにフィルタドロップダウンリストを組み込むこともできます。ドロップダウンリストには、その列 にあるすべての項目が一覧表示されるので、ユーザーは値を入力することなく、列をフィルタする項目を簡単に選択できます。 たとえば以下のコードでは、2番目のフィルタバーセルの FilterDropDown プロパティが True に設定されます。 Visual Basic コードの書き方 Visual Basic ' フィルタバーを表示します。 Me.C1TrueDBGrid1.FilterBar = True ' 最初の列を複数の項目でフィルタできるようにします。 Me.C1TrueDBGrid1.Columns(1).FilterDropDown = True ' 最初の列を複数の項目でフィルタできるようにします。 Me.C1TrueDBGrid1.Columns(1).FilterMultiSelect = True C# コードの書き方 C# // フィルタバーを表示します。 this.c1TrueDBGrid1.FilterBar = true; // 最初の列を複数の項目でフィルタできるようにします。 this.c1TrueDBGrid1.Columns[1].FilterDropDown // 最初の列を複数の項目でフィルタできるようにします。 169 = true; Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.c1TrueDBGrid1.Columns[1].FilterMultiSelect = true; アプリケーションを実行すると、フィルタドロップダウンリストを選択して、列をフィルタする項目を指定できることがわかります。 チェックボックスをクリックして、表示する項目を指定します。チェックされた項目が表示され、チェックボックスがクリアされた項 目は表示されません。フィルタ条件を適用するには、フィルタバーの適用 適用ボタンをクリックします。フィルタをクリアするには、ク ク リア リアボタンをクリックします。ドロップダウンリストを閉じるには、閉じる 閉じるボタンをクリックします。 条件付きフィルタリング TrueDBGrid for WinForms では、FlexGrid for WinForms スタイルのフィルタリングのような柔軟な条件付きフィルタリン グが使用可能になりました。 FilterBar プロパティを False、FilterDropdown プロパティを True に設定すれば、C1TrueDBGrid コントロールは列で新し いフィルタを使用できるようになります。 Visual Basic コードの書き方 Visual Basic ' フィルタバーを表示しません。 Me.C1TrueDBGrid1.FilterBar = False ' 最初の列を複数の項目でフィルタできるようにします。 Me.C1TrueDBGrid1.Columns(1).FilterDropDown = True 170 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# // フィルタバーを表示しません。 this.c1TrueDBGrid1.FilterBar = false; // 最初の列を複数の項目でフィルタできるようにします。 this.c1TrueDBGrid1.Columns[1].FilterDropDown = true; データフィルタリング機能は C1FlexGrid で使用されるパターンに従います。ユーザーが列ヘッダの上にマウスポインタを置く と、グリッドはヘッダー上にフィルタアイコンを表示します。アイコンをクリックするとフィルタエディタが起動します。ここで、表示 するデータを指定します。すべての列にはフィルタが設けられ、行は表示のためにすべてのフィルタを通過する必要がありま す。 組み込みフィルタには、ユーザーが表示用に特定の値を選択できる値フィルタとユーザーが「指定の値より大きい」、「指定の 値で始まる」、「指定の値を含む」といった演算子を使用して最大2つの条件を指定できる条件フィルタがあります。このタイプ のフィルタは、数値または日付/時刻値など、「連続する」値を含む列のフィルタリングに適しています。 フィルタが適用された列には、マウスポインタを置かなくてもヘッダー上にフィルタアイコンが表示されます。 171 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms カスタムフィルタ コードでFilterDefinition プロパティを使用し、独自のフィルタ方法を作成して、カスタムフィルタを保存/ロードできます。 次のように、xml ファイルから FilterDefinition プロパティを読み込んで、いくつかある定義済みフィルタの1つを適用できま す Visual Basic コードの書き方 Visual Basic Private Sub ReadFilter(name As String) c1TrueDBGrid1.Splits(0).FilterDefinition = System.IO.File.ReadAllText(name & ".xml") End Sub C# コードの書き方 C# void ReadFilter(string name) { c1TrueDBGrid1.Splits[0].FilterDefinition = System.IO.File.ReadAllText(name + ".xml"); } その後、カスタムフィルタをグリッドに適用し、次のようにカスタムとして保存できます。 Visual Basic コードの書き方 Visual Basic Private Sub SaveCustomFilter() System.IO.File.WriteAllText("custom.xml", Me.c1TrueDBGrid1.Splits(0).FilterDefinition) End Sub C# コードの書き方 C# 172 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms void SaveCustomFilter() { System.IO.File.WriteAllText("custom.xml", this.c1TrueDBGrid1.Splits[0].FilterDefinition); } メモ: この FilterDefinition プロパティを使用した完全なサンプルについては、Studio for Winforms と共にインス トールされた FilterDefinitionTdbg サンプルを参照してください。 173 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms スプリットの使用方法 TrueDBGrid for WinForms のスプリットは、Microsoft Excel や Microsoft Word などの製品のウィンドウ分割機能に似 ています。スプリットを使用すると、複数の水平ペインや垂直ペインにデータを表示できます。これらのペイン、つまりスプリット では、データをそれぞれ異なる色やフォントで表示できます。また、複数のスプリットを一体としてスクロールすることも、個別に スクロールすることもできます。それぞれ異なる列セットを表示することも、同じ列セットを表示することもできます。スプリットを 使用して、いくつかの列または行をスクロールできないようにすることもできます。他のグリッド製品とは異なり、TrueDBGrid for WinForms の固定(スクロールしない)列または行は、グリッドの左端に置く必要がありません。グリッドの右端やグリッド 内部の任意の場所に置くことができます。グリッド内に固定列または固定行のグループを複数置くこともできます。スプリットを 使用すると、アプリケーションのユーザーにデータをかぎりなく多様な方法で表示できます。 TrueDBGrid for WinForms を使用するときは、必ず1つのスプリットを使用しています。グリッドには、常に少なくとも1つの 水平スプリットが含まれていますが、意図的にスプリットを使用するのでないかぎり、スプリットの存在を無視できるようにスプ リットのプロパティにはデフォルト値が設定されています。したがって、グリッド内に複数のスプリットを作成して操作する必要が ない場合は、この章を省略してもかまいません。 スプリットを作成して操作するには、Split オブジェクトとSplitCollection オブジェクトを使用します。スプリットごとに個別の列 を表示または非表示にできるため、各 Split オブジェクトが独自に C1DisplayColumnCollection という列のコレクションを保 持しています。これにより、各スプリットとスプリットに含まれる列の外見を完全に制御できます。 スプリットとそのプロパティを参照する 最初、 C1TrueDBGrid オブジェクトには、スプリットが1つ含まれています。他のスプリットを作成した場合は、次のように、グ リッドの SplitIndex プロパティを使って現在のスプリット(フォーカスを受け取ったスプリット)を取得または設定できます。 Visual Basic コードの書き方 Visual Basic ' 現在のスプリットの 0 から始まるインデックスを読み取ります Dim idx as Integer = Me.C1TrueDBGrid1.SplitIndex ' Variable% と等しいインデックスを持つスプリットにフォーカスを設定します Me.C1TrueDBGrid1.SplitIndex = idx C# コードの書き方 C# // 現在のスプリットの 0 から始まるインデックスを読み取ります int idx = this.c1TrueDBGrid1.SplitIndex; // Variable% と等しいインデックスを持つスプリットにフォーカスを設定します this.c1TrueDBGrid1.SplitIndex = idx; グリッド内の各スプリットには、同じデータソースが異なる外見で表示されます。また、これらのスプリットは、個別のグリッドの ように動作します。プロパティをカスタマイズしないでスプリットを作成すると、水平スプリットの場合はすぐ左のスプリット、垂直 スプリットの場合はすぐ上のスプリットの設定が継承されます。スプリットがひとつしかなければ、水平、垂直方向のいずれの 場合でも既存のスプリットが複製されます。 RecordSelectors および MarqueeStyleのように、一部のプロパティは、C1TrueDBGrid オブジェクトと Split オブジェクトの 両方でサポートされることに注意してください。グリッドとスプリットに共通するプロパティには、次の3つの規則が適用されま す。 1. Split オブジェクトのプロパティを設定または取得する場合は、特定のスプリットにアクセスする。同じグリッド内の他の スプリットは影響を受けない。 174 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 2. C1TrueDBGrid オブジェクトのプロパティを取得する場合は、現在のスプリットの同じプロパティにアクセスする。 3. C1TrueDBGrid オブジェクトのプロパティを設定する場合は、すべてのスプリットの同じプロパティを設定する。 グリッドに水平スプリットが2つあるとして、コード内でのこれらの規則の意味を考えてみます。現在のスプリットのインデックス が1であるとします。使用されているマーキーのスタイルを判定する場合、次の文はどれも同じです。 Visual Basic コードの書き方 Visual Basic marquee = Me.C1TrueDBGrid1.MarqueeStyle marquee = Me.C1TrueDBGrid1.Splits(1).MarqueeStyle marquee = Me.C1TrueDBGrid1.Splits(Me.C1TrueDBGrid1.SplitIndex).MarqueeStyle C# コードの書き方 C# marquee = this.c1TrueDBGrid1.MarqueeStyle; marquee = this.c1TrueDBGrid1.Splits[1].MarqueeStyle; marquee = this.c1TrueDBGrid1.Splits[this.csss1TrueDBGrid1.SplitIndex].MarqueeStyle; グリッド内のすべてのスプリットで、マーキーのスタイルを実線のセル境界線に変更するには、次の文を使用します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.MarqueeStyle = MarqueeEnum.SolidCellBorder C# コードの書き方 C# this.c1TrueDBGrid1.MarqueeStyle = MarqueeEnum.SolidCellBorder; この文は、次の文と同じです。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).MarqueeStyle = MarqueeEnum.SolidCellBorder Me.C1TrueDBGrid1.Splits(1).MarqueeStyle = MarqueeEnum.SolidCellBorder C# コードの書き方 C# this.c1TrueDBGrid1.Splits(0).MarqueeStyle = MarqueeEnum.SolidCellBorder; this.c1TrueDBGrid1.Splits(1).MarqueeStyle = MarqueeEnum.SolidCellBorder; 同様に、各スプリットのマーキーのスタイルを異なる値に設定するには、次の文を使用します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).MarqueeStyle = MarqueeEnum.NoMarquee Me.C1TrueDBGrid1.Splits(1).MarqueeStyle = MarqueeEnum.FloatingEditor 175 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# this.c1TrueDBGrid1.Splits(0).MarqueeStyle = MarqueeEnum.NoMarquee; this.c1TrueDBGrid1.Splits(1).MarqueeStyle = MarqueeEnum.FloatingEditor; これらの規則は、C1TrueDBGrid オブジェクトと、それに関連する Split オブジェクトにだけ適用されます。他に同様の関係に あるオブジェクトはありません。 C1TrueDBGrid と共通のスプリットのプロパティ 次のプロパティは、Split オブジェクトと C1TrueDBGridオブジェクトの両方でサポートされており、前の項で説明した規則に 従っています。 プロパティ 説明 AllowColMove 対話式の列の移動を有効にする。 AllowColSelect 対話式の列の移動を有効にする。 AllowRowSelect 対話式の列の移動を有効にする。 AllowRowSizing 対話式の行のサイズ変更を有効にする AlternatingRowStyle スプリットに偶数/奇数行スタイルを適用するかどうかを制御する。 CaptionStyle スプリットのキャプションのスタイルを制御する。 CurrentCellVisible 現在のセルの変更ステータスを返すまたは設定する。 ExtendRightColumn スプリットの最後の列を拡張するかどうかを返すまたは設定する。 FetchRowStyles FetchRowStyle イベントを発生させるかどうかを制御する。 FirstRow 最初の表示行のブックマークを指定する。 LeftCol 左端の表示列を返す。 MarqueeStyle スプリットのマーキースタイルを返すまたは設定する。 RecordSelectors 左境界に選択パネルを表示または非表示にする。 メモ メモ:Caption プロパティは両方のオブジェクトでサポートされていますが、このリストに含まれていません。グリッドとス プリットは個別にキャプションバーを保持しているため、グリッドの Caption プロパティを設定しても、各スプリットのキャ プションに同じ文字列は適用されません。 TrueDBGrid にないスプリットだけのプロパティ 次のプロパティは Split オブジェクトではサポートされていますが、C1TrueDBGrid ではサポートされていません。したがって、 グリッド全体に値を適用するには、各スプリットの値を明示的に設定する必要があります。 プロパティ 説明 AllowFocus スプリット内のセルにフォーカスの受け取りを許可す る。 HorizontalScrollGroup 水平スクロールバーを制御する。 176 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Locked スプリットでデータ入力を禁止する場合は True 。 SplitSize SizeMode に基づいてスプリットの幅を返すまたは 設定する。 SplitSizeMode スプリットがスケーラブルか、固定サイズかを制御す る。 VerticalScrollGroup 垂直スクロールバーを制御する。 スプリットのマトリックス表記 グリッドに水平スプリットと垂直スプリットの両方が含まれる場合は、これを2次元のスプリットマトリックスと呼びます。マトリック ス内のスプリットオブジェクトのプロパティを参照およびアクセスするには、2次元マトリックス表記を使用します。スプリットマト リックス内の特定のスプリットのインデックスは、スプリットの行と列をコンマ( , )で区切って表されます。たとえば、3番目の水 平スプリット(行)の2番目の垂直スプリット(列)にアクセスするには、次のようにします。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits.Item(2,1).Style.ForeColor = System.Drawing.Color.Blue C# コードの書き方 C# this.c1TrueDBGrid1.Splits[2,1].Style.ForeColor = System.Drawing.Color.Blue; メモ メモ:この例で、Item プロパティが使用されていることに注意してください。スプリットのマトリックス表記を通してスプリッ トにアクセスする場合は、Item プロパティを明示的に指定する必要があります。1次元構造のグリッド内のスプリットに アクセスする場合、Item プロパティは暗黙になり、省略されます。 たとえば、水平スプリットだけがあるグリッドで、2番目のスプリットにアクセスするには、次のようにします。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(1).Style.ForeColor = System.Drawing.Color.Blue C# コードの書き方 C# this.c1TrueDBGrid1.Splits(1).Style.ForeColor = System.Drawing.Color.Blue; スプリットの作成および移動 実行時にスプリットを作成および移動するには、RemoveHorizontalSplit, InsertHorizontalSplit, RemoveVerticalSplit, RemoveHorizontalSplit の各メソッドを使用する必要があります。次に示すように、これらのメソッドでは、0から始まるスプ リットのインデックスを指定します。 Visual Basic コードの書き方 Visual Basic 177 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Dim S As C1TrueDBGrid.Split ' インデックス 7 のスプリットを作成します Me.C1TrueDBGrid1.InsertVerticalSplit(7) ' インデックス 5 のスプリットを削除します Me.C1TrueDBGrid1.RemoveVerticalSplit(5) C# コードの書き方 C# C1TrueDBGrid.Split S; // インデックス 7 のスプリットを作成します this.c1TrueDBGrid1.InsertVerticalSplit(7); // インデックス 5 のスプリットを削除します this.c1TrueDBGrid1.RemoveVerticalSplit(5); グリッド内のスプリットの数を参照するには、次のように、SplitCollection の Count プロパティを使用します。 Visual Basic コードの書き方 Visual Basic ' 変数に C1TrueDBGrid1 内のスプリットの数を設定します variable = Me.C1TrueDBGrid1.Splits.Count C# コードの書き方 C# // 変数に C1TrueDBGrid1 内のスプリットの数を設定します variable = this.c1TrueDBGrid1.Splits.Count; 次の例のように、Count プロパティを使用して、すべてのスプリットを反復処理することもできます。 Visual Basic コードの書き方 Visual Basic For n = 0 To Me.C1TrueDBGrid1.Splits.Count - 1 Debug.WriteLine (Me.C1TrueDBGrid1.Splits(n).Caption) Next n C# コードの書き方 C# for (n = 0 ; n < this.c1TrueDBGrid1.Splits.Count; n++) { Console.WriteLine (this.c1TrueDBGrid1.Splits[n].Caption); } For Each...Next ループを使用すると、このコードを効率よく記述できます。 Visual Basic コードの書き方 178 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic Dim S As C1TrueDBGrid.Split For Each S In Me.C1TrueDBGrid1.Splits Debug.WriteLine (S.Caption) Next C# コードの書き方 C# C1TrueDBGrid.Split S; foreach (S In this.c1TrueDBGrid1.Splits) { Console.WriteLine (S); } 新しい Split オブジェクトは、コレクション内の最後のオブジェクトからプロパティをすべて継承します。 スプリット内の列を使用する TrueDBGrid for WinForms コントロール内の各スプリットは、個別に列のコレクションを保持しています。 C1DisplayColumnCollection オブジェクトは、スプリット内部の列のスプリット固有の表示プロパティへのアクセスを提供しま す。C1DisplayColumnCollection のスプリット固有のプロパティを使用すると、きわめて柔軟に個別のスプリットの外見と動 作を制御できます。グリッドは1つのデータソースに接続されているため、スプリットは、同じデータを異なる方法で表現してい るだけです。したがって、各スプリットの C1DisplayColumnCollection には同数の列があり、それらの列は同じデータフィー ルドに連結されています。 ただし、C1DisplayColumn オブジェクトの他のプロパティ(Visible,など)の値は、スプリットごとに異なります 。これらのプロパ ティは、スプリット固有であると呼ばれます。たとえば、デフォルトでは、実行時に作成された列は表示されません。次のコード は、列を2番目のスプリットに表示しています。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(1).DisplayColumns("LastName").Visible = True C# コードの書き方 C# this.c1TrueDBGrid1.Splits(1).DisplayColumns("LastName").Visible = true; Visible はスプリット固有のプロパティなので、LastName 列は、他のスプリットでは表示されないままです。 スプリットをサイズ変更およびスケーリングする TrueDBGrid for WinForms では、個別のスプリットのサイズとスケーリングを完全に制御できます。グリッドの正確な幅や高 さを設定したり、列数や行数を固定したり、他のスプリットに対する比率でサイズを調整することができます。C1TrueDBGrid をはじめて使用する場合でも、概要を覚えるだけでさまざまな方法でスプリットを使用できます。 実行時、Split オブジェクトの実際のサイズは、その SplitSize プロパティと SplitSizeMode プロパティによって決まりま す。SplitSizeMode プロパティは測定の単位を指定します。SplitSize プロパティは単位数を指定します。C1TrueDBGrid は スプリットの3つのサイズ変更モードをサポートしており、これは、SplitSizeMode プロパティの設定によって決定されます。 179 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms プロパティ 説明 SizeModeEnum.Scalable 他のスプリットに対して相対的に幅を指定す る。 SizeModeEnum.Exact コンテナの座標で固定幅を指定する。 SizeModeEnum.NumberofColumns 固定列数を指定する。 スケーラブルなスプリットでは、SplitSize プロパティの値を使用して、スプリットが占めるスペースの割合が決定されます。そ の割合は、スケーラブルなスプリットの SplitSize 値を他のすべてのスケーラブルなスプリットの SplitSize 値の合計で割って 求められます。つまり、それぞれのスケーラブルなスプリットの SplitSize プロパティを分子、スケーラブルなスプリットのサイ ズ合計を分母と考えることができます。スケーラブルなスプリットは、スケーラブルでないスプリットに割り当てられたスペース の残りのスペースを分け合います。デフォルトでは、すべてのスプリットがスケーラブルなので、グリッド表示領域全体を分け 合います。グリッドに1つしかスプリットがない場合、SplitSizeMode は、常に Scalable です。 固定幅のスプリットでは、SplitSize プロパティの値を使用して、コンテナの座標における固定幅が指定されます。固定幅のス プリットでは、グリッドの水平境界内に収まらない部分は切り捨てられます。グリッドに1つしかスプリットがない場合、このモー ドは適用できません。 固定列数のスプリットでは、SplitSize プロパティを使用して、スプリット内に常に表示される列数が正確に指定されます。この スプリットでは、(コードまたはユーザーの操作によって)表示列がサイズ変更されたり、スプリット内の列が水平にスクロール されて表示列の幅が変化した場合に、グリッド全体が自動的に再設定されます。このモードは、主に水平方向にスクロールさ れない固定列を作成するために使用されますが、他にもさまざまな目的で使用できます。グリッドに1つしかスプリットがない場 合、このモードは適用できません。 グリッドにスプリットが1つしかない(デフォルト)場合、スプリットはグリッドの幅全体に広がり、SplitSizeMode プロパティは常 に Scalable に、SplitSize プロパティは常に 1 になります。スプリットが1つしかない場合は、これらのプロパティを設定しても 何も効果はありません。複数のスプリットがあるときに、1つを除いてすべてを削除すると、残ったスプリットの SplitSizeMode プロパティおよび SplitSize プロパティは、それぞれ自動的に 0 および 1 に戻ります。 デフォルトでは、新しく作成したスプリットの SplitSizeMode プロパティは SizeModeEnum.Scalableに、SplitSize プロパティ は1に設定されます。たとえば、次のコードで2つのスプリットを追加して作成するとします。: Visual Basic コードの書き方 Visual Basic ' 左にスプリットを作成します Me.C1TrueDBGrid1.InsertHorizontalSplit(0) ' 別のスプリットを作成します Me.C1TrueDBGrid1.InsertHorizontalSplit(0) C# コードの書き方 C# // 左にスプリットを作成します別のスプリットを作成します this.c1TrueDBGrid1.InsertHorizontalSplit(0); // 別のスプリットを作成します this.c1TrueDBGrid1.InsertHorizontalSplit(0); The resulting grid display will appear as follows: これらのグリッドは、次のように表示されます。 180 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 各スプリットがグリッド領域のそれぞれ1/3ずつを占めることがわかります。これは、3つのスケーラブルなスプリットがあり、そ れぞれの SplitSize が1だからです。次のように、スプリットのサイズをそれぞれ1、2、および3に変更するとします。 Visual Basic コードの書き方 Visual Basic ' 相対サイズを 1 に変更します Me.C1TrueDBGrid1.Splits(0).SplitSize = 1 ' 相対サイズを 2 に変更します Me.C1TrueDBGrid1.Splits(1).SplitSize = 2 ' 相対サイズを 3 に変更します Me.C1TrueDBGrid1.Splits(2).SplitSize = 3 C# コードの書き方 C# // 相対サイズを 1 に変更します this.c1TrueDBGrid1.Splits[0].SplitSize = 1; // 相対サイズを 2 に変更します this.c1TrueDBGrid1.Splits[1].SplitSize = 2; // 相対サイズを 3 に変更します this.c1TrueDBGrid1.Splits[2].SplitSize = 3; これらのグリッドは、次のように表示されます。 181 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms スプリットのサイズの合計が6(1+2+3)なので、各スプリットのサイズは、その SplitSize プロパティの値を分子、6を分母と する分数の割合になります。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).SplitSizeMode = C1.Win.C1TrueDBGrid.SizeModeEnum.Scalable Me.C1TrueDBGrid1.Splits(0).SplitSize = 1 Me.C1TrueDBGrid1.Splits(1).SplitSizeMode = C1.Win.C1TrueDBGrid.SizeModeEnum.Exact Me.C1TrueDBGrid1.Splits(1).SplitSize = 250 Me.C1TrueDBGrid1.Splits(2).SplitSizeMode = C1.Win.C1TrueDBGrid.SizeModeEnum.Scalable Me.C1TrueDBGrid1.Splits(2).SplitSize = 2 C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].SplitSizeMode = C1.Win.C1TrueDBGrid.SizeModeEnum.Scalable; this.c1TrueDBGrid1.Splits[0].SplitSize = 1; this.c1TrueDBGrid1.Splits[1].SplitSizeMode = C1.Win.C1TrueDBGrid.SizeModeEnum.Exact; this.c1TrueDBGrid1.Splits[1].SplitSize = 250; this.c1TrueDBGrid1.Splits[2].SplitSizeMode = C1.Win.C1TrueDBGrid.SizeModeEnum.Scalable; this.c1TrueDBGrid1.Splits[2].SplitSize = 2; ユーザーの操作を通してスプリットを作成およびサイズ変更する コードを使用すると、スプリットを作成したり、サイズ変更することができます。ただし、スプリットを対話式に作成およびサイズ 182 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 変更する機能をユーザーに提供するには、スプリットのAllowHorizontalSplit プロパティまたは AllowVerticalSplit プロ パティを True に設定します。デフォルトでは、どちらのプロパティも False に設定されており、ユーザーはスプリットを作成した り、サイズ変更することができません。 次の図は、これらのプロパティを False に設定した場合のグリッドの例です。水平スクロールバーの左端や垂直スクロール バーの上端にスプリットボックスがないことに注意してください。 垂直スプリット 次の例では、スプリットの AllowVerticalSplit プロパティを True に設定しています。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.AllowVerticalSplit = True C# コードの書き方 C# this.c1TrueDBGrid1.AllowVerticalSplit = true; これにより、垂直スクロールバーの上端にスプリットボックスが表示されます。ユーザーは、このスプリットボックスを使用して、 実行時に新しいスプリットを作成できます。 水平スプリット 183 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 次の例では、スプリットの AllowHorizontalSplit プロパティを True に設定しています。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.AllowHorizontalSplit = True C# コードの書き方 C# this.c1TrueDBGrid1.AllowHorizontalSplit = true; これにより、水平スクロールバーの左端にスプリットボックスが表示されます。ユーザーは、このスプリットボックスを使用して、 実行時に新しいスプリットを作成できます。 新しいスプリットは、元のスプリットからプロパティを継承します。どちらのスプリットの SplitSizeMode プロパティも、元のスプ リットの SplitSizeMode に関係なく、自動的に 0 - Scalable に設定されます。両方のスプリットの SplitSize プロパティは、そ れらのスプリットのサイズの比率に正しく設定されます。SplitSize プロパティの値は、やや大きくなる場合があります。これ は、ユーザーがポインタを任意の位置にドラッグするのに対して、C1TrueDBGrid がスプリットの合計サイズとして最小公倍 数を選択する必要があるためです。 ユーザーが2つのスプリットの間にあるスプリットボックスをポイントすると、ポインタが水平方向の矢印付の2本の垂直線に変 わります。このポインタを左右にドラッグすると、スプリットの相対的なサイズを調整できます。 まとめ コードを使用して、スプリットを作成したり、サイズ変更することができる。ただし、実行時にスプリットを対話式に作成およびサ イズ変更する機能をユーザーに提供するには、AllowHorizontalSplit プロパティおよび AllowVerticalSplit プロパティを設 定する必要がある。 2つのスプリットの相対的なサイズを変更できるのは、両方のスプリットの AllowVerticalSizing プロパティまたは AllowHorizontalSizing プロパティが True の場合だけである。ユーザーがサイズの変更を完了すると、2つのスプリットの 合計サイズは変わらないが、両方のスプリットの SplitSizeMode プロパティが、以前の設定に関係なく、自動的に Scalable に設定される。2つのスプリットの SplitSize プロパティは、それらの新しいサイズの比率を反映するように設定される。 垂直方向のスクロールとスプリットグループ デフォルトでは、グリッドにはスプリットインデックス0の水平スプリットが1つだけあります。また、その HScrollBar および VScrollBar の各スタイルプロパティは、ScrollBarStyleEnum.Automaticに設定されています。つまり、列の幅および有効な データ行の数に応じて、必要時に水平スクロールバーや垂直スクロールバーが表示されます。デフォルトのスプリットの 184 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms HorizontalScrollGroup プロパティと VerticalScrollGroup プロパティは1に設定されています。同じスクロールグループプ ロパティの設定を持つスプリットは、垂直方向または水平方向に一緒にスクロールします。新しく作成されたスプリットは、スク ロールバーの状態とスクロールグループプロパティの両方を親スプリットから継承します。同じ HorizontalScrollGroup また は VerticalScrollGroup に属するすべてのスプリットで、HScrollBar または VScrollBar のスタイルプロパティが ScrollBarStyleEnum.Automatic に設定されている場合、垂直スクロールバーはスクロールグループの右端のスプリットだ けに、水平スクロールバーはスクロールグループの下端のスプリットだけに表示されます。この1つのスクロールバーを操作す ると、同じスクロールグループ内のすべてのスプリットが同時にスクロールされます。 たとえば、次のコードで2つのスプリットを追加して作成するとします。 Visual Basic コードの書き方 Visual Basic ' 左にスプリットを作成します Me.C1TrueDBGrid1.InsertHorizontalSplit(0) ' 別のスプリットを作成します Me.C1TrueDBGrid1.InsertHorizontalSplit(0) C# コードの書き方 C# // 左にスプリットを作成します this.c1TrueDBGrid1.InsertHorizontalSplit(0); // 別のスプリットを作成します this.c1TrueDBGrid1.InsertHorizontalSplit(0); これらのグリッドは、次のように表示されます。 これら3つのスプリットは、すべて同じ HScrollBar 設定と VScrollBar 設定を持ち、VerticalScrollGroup は1に設定されて います。ただし、垂直スクロールバーは、右端のスプリットに1つだけ表示されます。このスクロールバーを操作すると、3つの スプリットがすべて同時にスクロールされます。 垂直スプリットも同様に動作します。グリッドに2つの垂直スプリットを追加すると、すべてのスプリットの HorizontalScrollGroup 設定が1になります。これで、グリッドの下端に水平スクロールバーが1つだけ表示され、このスク ロールバーをスクロールすると、3つのスプリットが同時にスクロールされます 185 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms スプリットのスクロールグループプロパティの1つを変更すると、独立してスクロールする複数のスプリットグループを作成でき ます。上の例で、中央のスプリットの HorizontalScrollGroup プロパティを2に設定すると、新しいスクロールグループが作成 されます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits.Item(0,1).HorizontalScrollGroup = 2 C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0,1].HorizontalScrollGroup = 2; この文を実行すると、中央のスプリットをスクロールしても、他のスプリットは動きません。次の図のようになります。 中央のスプリットに水平スクロールバーがあることがわかります。HorizontalScrollGroup プロパティが2であるのは中央の スプリットだけなので、このスクロールバーは、中央のスプリットだけに作用します。下のスプリットにある水平スクロールバー は、下と上のスプリットだけを制御するようになります。中央のスプリットには影響を及ぼしません。 この機能は、2つの独立したスプリットグループを作成する場合によく使用されます。これにより、各スプリットをスクロールして 異なる行セットを表示し、異なるレコードのフィールド値同士を比較できます。 水平スクロールと固定列 186 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms スクロールは各スプリットごとに独立しています。1つ以上の列を水平方向または垂直方向にスクロールしないように設定し て、常に表示することもできます。C1TrueDBGrid では、スプリットのプロパティをいくつか設定するだけで、簡単にこれを実現 できます。グリッド内の列をいくつでも(グリッドの中央にある列でも)、どちらの方向にも、スクロールしないように設定できま す。 たとえば、グリッドに水平スプリットが3つあるとします。次のコードは、中央のスプリットの列0と列1を「固定」します。 Visual Basic コードの書き方 Visual Basic ' 列 0 と 1 を除いて、Splits(1) 内のすべての列を非表示にします Dim Cols As C1TrueDBGrid.C1DisplayColumnCollection Dim C As C1TrueDBGrid.C1DisplayColumn Cols = Me.C1TrueDBGrid1.Splits(1).DisplayColumns For Each C In Cols C.Visible = False Next C Cols(0).Visible = True Cols(1).Visible = True ' ちょうど 2 つの列を表示するように Splits(1) を設定し、サイズ変更を無効にします With Me.C1TrueDBGrid1.Splits(1) .SplitSizeMode = SizeModeEnum.NumberOfColumns .SplitSize = 2 .AllowHorizontalSizing = False End With C# コードの書き方 C# // 列 0 と 1 を除いて、Splits(1) 内のすべての列を非表示にします C1TrueDBGrid.C1DisplayColumnCollection Cols; C1TrueDBGrid.C1DisplayColumn C; Cols = this.c1TrueDBGrid1.Splits[1].DisplayColumns foreach (C In Cols) { C.Visible = false; } Cols(0).Visible = true; Cols(1).Visible = true; //ちょうど 2 つの列を表示するように Splits(1) を設定し、サイズ変更を無効にします this.c1TrueDBGrid1.Splits[1].SplitSizeMode = SizeModeEnum.NumberOfColumns; this.c1TrueDBGrid1.Splits[1].SplitSize = 2; this.c1TrueDBGrid1.Splits[1].AllowHorizontalSizing = false; 1つのスプリットで列0と列1をスクロールしないように設定した場合、その他のスプリットでは、それらの列を非表示にするの が普通です。 Visual Basic コードの書き方 Visual Basic 187 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 'スプリット 0 と 2 の列 0 と 1 を非表示にします Dim Cols As C1TrueDBGrid.C1DisplayColumnCollection Cols = Me.C1TrueDBGrid1.Splits(0).DisplayColumns Cols(0).Visible = False Cols(1).Visible = False Cols = Me.C1TrueDBGrid1.Splits(2).DisplayColumns Cols(0)Visible = False Cols(1)Visible = False C# コードの書き方 C# // スプリット 0 と 2 の列 0 と 1 を非表示にします C1TrueDBGrid.C1DisplayColumnCollection Cols; Cols = this.c1TrueDBGrid1.Splits[0].DisplayColumns; Cols[0].Visible = false; Cols[1].Visible = false; Cols = this.c1TrueDBGrid1.Splits[2].DisplayColumns; Cols[0]Visible = false; Cols[1]Visible = false; 複数のスプリットにまたがる移動 複数のスプリットにまたがる移動は、グリッドの TabAcrossSplits プロパティと各スプリットの AllowFocus プロパティによって 制御されます。複数のスプリットにまたがる移動については、グリッド内の移動と一緒に説明します。詳細について は、TabAcrossSplits AllowFocus 実行時の操作 実行時の操作を参照してください。 188 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms スタイルの使用方法 TrueDBGrid for WinForms は、グリッドの外見を簡単にカスタマイズできるように、Microsoft Word や Microsoft Excel と同様のスタイルモデルを使用しています。Style オブジェクトは、フォント、色、画像、および書式設定情報を組み合わせたも ので、次に示すプロパティで構成されます。 プロパティ 説明 BackColor 背景色を制御します。 BackgroundImage スタイルの背景画像を返すまたは設定します。 BackgroundPictureDrawMode スタイルの背景画像の表示方法を制御します。 Font テキストのタイプフェイス、サイズなどの特性を指定します。 ForeColor 前景色を制御します。 ForegroundImage スタイルの前景画像を返すまたは設定します。 ForeGroundPicturePosition スタイルの前景画像の配置方法を制御します。 HorizontalAlignment セルテキストの配置を指定します。 Locked True の場合は、セル内編集が許可されません。 Trimming 文字列をトリミングする方法を指定します。 VerticalAlignment 垂直方向のテキストの配置を指定します。 WrapText True の場合は、セルテキストを折り返します。 組み込みの名前付きスタイル グリッドを作成すると、最初に一連の組み込みの名前付きスタイルが指定されます。これらのスタイルによって、さまざまなグ リッドの表示方法が制御されます。たとえば、Heading スタイルは、列のヘッダの表示に使用される属性を決定します。設計 時には、GridStyleCollection エディタ エディタで組み込みの名前付きスタイルを変更することで、グリッド全体の外見を変更できま す。実行時には、GridStyleCollection を使用して、同じ名前付きスタイルのセットにアクセスできます。すべてのグリッドは、 最初に 13 個の組み込みスタイルを持っています。これらのスタイルは、次のグリッド要素の表示方法を制御します。 要素 説明 Caption グリッドとスプリットのキャプションバー Editor グリッド内のセルエディタ EvenRow 偶数行にあるデータセル Filter Bar フィルタバー列にあるデータ Footer 列のフッタ Group グリッドのグループ化領域にあるグループ列 Heading 列のヘッダ 189 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms HighlightRow 強調表示されている行にあるデータセル Inactive 列のヘッダ(他の列にフォーカスがある場合) Normal 選択も強調表示もされていない行にあるデータセル OddRow 奇数行にあるデータセル Record Selector レコードセレクタ列のデータ Selected 選択されている行にあるデータセル 選択されている行 選択されている行とは、コードまたはユーザーの操作によって SelectedRowCollectionにブックマークが追加されている行で す。強調表示されている行 強調表示されている行とは、 MarqueeStyle プロパティが MarqueeEnum.HighlightRow また はMarqueeEnum.HighlightRowRaiseCellに設定されている現在の行です。 EvenRow スタイルおよび OddRow スタイルは、AlternatingRows プロパティが True に設定されている場合にだけ使用で きます。 名前付きスタイルのデフォルト値 Microsoft Word と同様に、C1TrueDBGrid の Style オブジェクトも、別のスタイルの属性を継承したり、親スタイルとして参 照されます。新しく作成されたグリッドでは、Normal スタイルがすべての名前付きスタイルの親スタイルになります。このスタ イルのデフォルトのプロパティを次に示します。 プロパティ 設定 Alpha 255 BackColor System.Drawing.Color.White BackColor2 System.Drawing.Color.White BackgroundImage None BackgroundPictureDrawMode BackgroundPictureDrawModeEnum.Stretch Font Microsoft Sans Serif, 8.25pt ForeColor System.Drawing.Color.Black ForegroundImage None ForeGroundPicturePosition ForegroundPicturePositionEnum.LeftOfText GammaCorrection False GradientMode None HorizontalAlignment AlignHorzEnum.General Locked False Padding 0, 0, 0, 0 Trimming Character VerticalAlignment AlignVertEnum.Top WrapText False Heading スタイルと Footing スタイルも同様に定義されます。これらのスタイルは Normal を継承しており、次のプロパティ を上書きしています。 190 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms プロパティ 設定 BackColor System.Drawing.SystemColors.Control ForeColor System.Drawing.Color.Black VerticalAlignment AlignVertEnum.Center Heading スタイルは、次のプロパティも上書きしています。Footing スタイルは、このプロパティを上書きしていません。 プロパティ 設定 WrapText True Selected スタイルも Normal を継承し、次に示す2つのカラープロパティを上書きしています。 プロパティ 設定 BackColor System.Drawing.SystemColors.Highlight ForeColor System.Drawing.SystemColors.HighlightText HighlightRow スタイルも同様です。このスタイルは、デフォルトの Normal スタイルの設定とは逆の色を使用します。 プロパティ 設定 BackColor System.Drawing.SystemColors.Text ForeColor System.Drawing.SystemColors.HighlightText EvenRow、OddRow、FilterBar の各スタイルは Normal を継承しますが、EvenRow スタイルには上書きされるプロパティ があります。 プロパティ 設定 BackColor System.Drawing.Color.Aqua Normal を直接継承しないスタイルは、Caption と RecordSelector だけです。これらは Heading を継承します。グリッドと スプリットのキャプションがデフォルトで中央揃えされるのは、Caption スタイルの次のプロパティがカスタマイズされているた めです。 プロパティ 設定 HorizontalAlignment AlignHorzEnum.Center 名前付きスタイルの継承 名前付きスタイルが継承されるしくみについて確認します。グリッドをフォームに配置し、グリッドのCaption プロパティとデフォ ルトの列を設定します。デフォルトの列の FooterText プロパティを設定し、グリッドのColumnFootersプロパティを True に 設定すると、グリッドは次のように表示されます。 191 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms GridStyleCollection エディタ エディタで、Normal ノードを展開し、Font プロパティを選択してBoldボックスを ON にします。列ヘッ ダ、列フッタ、グリッドのキャプションのすべてが太字になります。これは、すべての組み込みスタイルが Normal スタイルまた は Normal の子スタイルを継承するためです。 次に、Heading ノードを展開し、ForeColor プロパティを選択します。カラータブのWebを選択し、次にNavyを選択します。列 ヘッダとグリッドのキャプションバーの両方のテキストが白色になります。これは、Caption スタイルが Heading スタイルから 色のプロパティを継承するためです。列フッタは変化しません。これは、Footer スタイルが、Heading ではなく、Normal を継 承しているためです。 最後に、Caption ノードを展開し、BackColor プロパティを選択します。カラータブのWebを選択し、次にAliceBuleを選択し ます。列ヘッダの背景色が変化しないこと、および Caption スタイルが引き続き親スタイルの Heading からテキストの色を 継承していることがわかります。 192 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 名前付きスタイルを変更する グリッド全体の外見は、設計時に .NET のコレクションエディタを使用して、GridStyleCollectionを変更することによって変更 できます。たとえば、すべての列ヘッダでキャプションのテキストを中央揃えにするには、組み込みの Heading スタイルの HorizontalAlignment プロパティをAlignHorzEnum.Center に変更します。 次の文は、コードを使って同じ結果を得ています。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Styles("Heading").HorizontalAlignment = AlignHorzEnum.Center C# コードの書き方 C# this.c1TrueDBGrid1.Styles["Heading"].HorizontalAlignment = AlignHorzEnum.Center; ただし、必ずしも GridStyleCollection エディタ エディタを使用したり、GridStyleCollection の名前付きメンバをコード内で操作する 必要はありません。グリッドおよびそのコンポーネントオブジェクトは、Style オブジェクトを返すさまざまなプロパティを公開して います。次の項で説明するように、これらのオブジェクトを直接操作することによって、グリッドの外見を調整できます。詳細に ついては、GridStyleCollection エディタを使用する エディタを使用するを参照してください。 スタイルプロパティを使用する ドキュメント内の段落ごとの外見を包括的に指定する Microsoft Word のドキュメントテンプレートと同様 に、GridStyleCollection オブジェクトの名前付きメンバは、C1TrueDBGrid コントロールまたは C1TrueDBDropDown コン トロールの包括的な表示テンプレートを提供します。ただし、個別の Split オブジェクトまたは C1DisplayColumn オブジェクト の外見をカスタマイズするには、適切な Style オブジェクトのプロパティを変更する必要があります。 プロパティ 説明 CaptionStyle オブジェクトのキャプションのスタイルを制御します。 EditorStyle オブジェクトのエディタのスタイルを制御します。 EvenRowStyle 偶数行の行スタイルを制御します。 FilterBarStyle フィルタバーでの列のスタイルを制御します。 FooterStyle オブジェクトのフッタのスタイルを制御します。 HeadingStyle オブジェクトのヘッダのスタイルを制御します。 HighlightRowStyle マーキーが Highlight Row に設定されている場合に、マーキースタイル を制御します。 InactiveStyle オブジェクトのアクティブでないヘッダのスタイルを制御します。 OddRowStyle 奇数行の行スタイルを制御します。 RecordSelectorStyle オブジェクトのレコードセレクタのスタイルを制御します。 SelectedStyle オブジェクトの選択されている行および列のスタイルを制御します。 Style オブジェクトの通常のスタイルを制御します。 193 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms スタイルプロパティを直接変更する グリッドコンポーネントの外見は、適切なスタイルプロパティのメンバを変更することによってカスタマイズできます。たとえば、 グリッドのキャプションのテキストを太字にするには、CaptionStyle プロパティに関連付けられている Font オブジェクトを変 更します。設計時に太字を設定するには、Visual Studio のプロパティウィンドウで CaptionStyle ツリーノードを展開し、次に Font を展開してBoldボックスを ON にします。このプロパティの外をクリックして終了すると、変更がグリッドに適用されます。 ここで、GridStyleCollection エディタ エディタに切り替えると、組み込みの Caption スタイルが変更されていないことに気付きます。 これは、次の2つの文が等しくないことを意味します。 Visual Basic コードの書き方 Visual Basic Dim myfont As New Font(Me.C1TrueDBGrid1.Font, FontStyle.Bold) Me.C1TrueDBGrid1.CaptionStyle.Font = myfont Me.C1TrueDBGrid1.Styles("Caption").Font = myfont C# コードの書き方 C# Font myfont = new Font(this.c1TrueDBGrid1.Font, FontStyle.Bold); this.c1TrueDBGrid1.CaptionStyle.Font = myfont; this.c1TrueDBGrid1.Styles["Caption"].Font = myfont; 最初の文は、Caption という名前のスタイルを変更せずに、グリッドのキャプションバーのフォントをカスタマイズしています。2 番目の文は、Caption という名前のスタイルを変更しており、このスタイルがグリッドのキャプションバーの表示に影響するか どうかは、CaptionStyle プロパティの Font メンバがカスタマイズされていたかどうかで決まります。 名前付きスタイルと無名スタイル 設計時にスタイルのプロパティを設定する際は、グリッドのプロパティによって公開される名前付きスタイルと無名スタイルの 違いを理解することが大切です。 名前付きスタイルは、グリッド、スプリット、および列の外見を管理するテンプレートを提供します。設計時に GridStyleCollection エディタを使用して、名前付きスタイルを作成、変更、および削除できます。実行時に は、GridStyleCollection を使用して、同じ名前付きStyle オブジェクトのセットを表すことができます。 しかし、無名スタイルは、GridStyleCollection のメンバではありません。無名スタイルは、名前付きスタイルを特別に定義し なくても、個別のスプリットまたは列の外見を簡単に直接定義できるように提供されています。 名前付きスタイルと無名スタイルの違いを明らかにするために、Microsoft Word を例に考えてみます。デフォルトの標準スタ イルに基づく複数の段落で構成されている Microsoft Word ドキュメントがあるとします。段落の1つは引用文で、インデントし て斜体で表示する必要があります。このドキュメントがさらに大きな文書の一部で、引用文も複数含まれている場合は、引用 文用のスタイルを特別に定義し、引用文を含むすべての段落にそのスタイルを適用することには意味があります。しかし、こ のドキュメントが草稿であったり、更新する予定がない場合は、1つの段落のためにスタイルを定義するのは無駄です。引用 文自体にインデントと斜体を適用する方が便利です。 このように段落の属性を直接指定することは、無名スタイルを返すプロパティのメンバを設定することに似ています。たとえ ば、特定のグリッド列内でセルのデータを垂直方向に中央揃えにする場合、C1DisplayColumnCollection エディタ エディタで列の Style プロパティのVerticalAlignment メンバを変更します。 194 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 無名スタイルの変更方法は、名前付きスタイルの変更方法とまったく同じです。まず、プロパティツリーで目的の Style オブ ジェクトのノードを展開し、次にそのオブジェクトのプロパティを1つ以上選択して編集します。 無名スタイルの継承 名前付きスタイルが他のスタイルからフォント、色、および書式設定の特性を継承できるのと同様に、Split オブジェクトの無名 スタイルも、C1TrueDBGrid コントロールに含まれているそれらの特性を継承できます。同様に、C1DisplayColumn オブジェ クトの無名スタイルも、Split コントロールに含まれているそれらの特性を継承できます。C1TrueDBDropDown コントロール にはスプリットのコレクションが含まれていないため、その C1DisplayColumn オブジェクトの無名スタイルは、コントロール自 体から値を継承できます。 グリッドを作成すると、その Style プロパティは、最初に組み込み Normal スタイルの属性をすべて継承します。この Normal スタイルは、すべてのデータセルの外見を制御します。Normal スタイルを変更すると、その変更がすべてのスプリットに適用 され、さらに各スプリット内の列に適用されます。ただし、Split オブジェクトまたは C1DisplayColumn オブジェクト内のデータ セルの外見をすべて変更するには、その無名 Style プロパティのメンバを変更します。 次のグリッドのレイアウトについて考えてみます。このグリッドでは、組み込みスタイルのデフォルト値をすべて使用していま す。また、同じスプリットが2つ含まれています。 この後のすべての例で、このレイアウトを開始点として使用しています。違いを明確にするために、これらの例ではコードを使 用して、スタイルのプロパティとグリッドの表示における関連性を説明します。ただし、GridStyleCollection エディタ エディタを使用し ても、設計時に同じ操作を実行できます。 195 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 例 1: すべての組み込みスタイルのデフォルト値が有効なので、列は自分を含んでいるスプリットを継承し、スプリットはグリッド全体 を継承します。したがって、この文はデータセルに影響するだけではなく、ヘッダ、フッタ、およびキャプションバーのすべてに影 響します。この文には、GridStyleCollection エディタ エディタを使って Normal スタイルを直接変更する場合と同じビジュアルな効果 があります。ただし、組み込み Normal スタイル自体は変更されません。 Visual Basic コードの書き方 Visual Basic Dim myfont As Font myfont = New Font (Me.C1TrueDBGrid1.Styles("Normal").Font, FontStyle.Bold) Me.C1TrueDBGrid1.Styles("Normal").Font = myfont C# コードの書き方 C# Font myfont; myfont = new Font (this.c1TrueDBGrid1.Styles["Normal"].Font, FontStyle.Bold); this.c1TrueDBGrid1.Styles["Normal"].Font = myfont; 例 2: この例では、最初のスプリットにあるデータセルだけが影響を受けます。これは、スプリットのキャプション、列のヘッダ、および 列のフッタがそれぞれ組み込みスタイルの Caption、Heading、および Footing からフォントを継承するためです。 Visual Basic コードの書き方 196 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic Dim myfont As Font myfont = New Font (Me.C1TrueDBGrid1.Splits(0).Style.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).Style.Font = myfont C# コードの書き方 C# Font myfont; myfont = new Font (this.c1TrueDBGrid1.Splits[0].Style.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].Style.Font = myfont; 例 3: この例では、前の例を拡張して、最初のスプリットにあるすべての要素を太字でレンダリングしています。Style プロパティに加 えて、 CaptionStyle, HeadingStyle, FooterStyle の各プロパティを設定する必要があります。 Visual Basic コードの書き方 Visual Basic Dim Dim Dim Dim myfont As Font myfont1 As Font myfont2 As Font myfont3 As Font myfont = New Font (Me.C1TrueDBGrid1.Splits(0).Style.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).Style.Font = myfont myfont1 = New Font (Me.C1TrueDBGrid1.Splits(0).CaptionStyle.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).CaptionStyle.Font = myfont1 myfont2 = New Font (Me.C1TrueDBGrid1.Splits(0).HeadingStyle.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).HeadingStyle.Font = myfont2 myfont3 = New Font (Me.C1TrueDBGrid1.Splits(0).FooterStyle.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).FooterStyle.Font = myfont3 197 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# Font Font Font Font myfont; myfont1; myfont2; myfont3; myfont = new Font (this.c1TrueDBGrid1.Splits[0].Style.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].Style.Font = myfont; myfont1 = new Font (this.c1TrueDBGrid1.Splits[0].CaptionStyle.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].CaptionStyle.Font = myfont1; myfont2 = new Font (this.c1TrueDBGrid1.Splits[0].HeadingStyle.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].HeadingStyle.Font = myfont2; myfont3 = new Font (this.c1TrueDBGrid1.Splits[0].FooterStyle.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].FooterStyle.Font = myfont3; 例 4: この例では、最初のスプリットの最初の列にあるデータセルだけが影響を受けます。これは、列のヘッダおよび列のフッタがそ れぞれ組み込みスタイルの Heading および Footing からフォントを継承するためです。 Visual Basic コードの書き方 Visual Basic Dim myfont As Font myfont = New Font (Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.Font = myfont C# コードの書き方 C# Font myfont; myfont = new Font (this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.Font, 198 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.Font = myfont; 例 5: この例では、前の例を拡張して、最初のスプリットの最初の列にあるすべての要素を太字でレンダリングしています。Style プ ロパティに加えて HeadingStyle および FooterStyle の各プロパティを設定する必要があります。 Visual Basic コードの書き方 Visual Basic Dim myfont As Font Dim myfont1 As Font Dim myfont2 As Font myfont = New Font (Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.Font = myfont myfont1 = New Font (Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).HeadingStyle.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).HeadingStyle.Font = myfont1 myfont2 = New Font (Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).FooterStyle.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).FooterStyle.Font = myfont2 C# コードの書き方 C# Font myfont; Font myfont1; Font myfont2; myfont = new Font (this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.Font = myfont; 199 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms myfont1 = new Font (this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].HeadingStyle.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].HeadingStyle.Font = myfont1; myfont2 = new Font (this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].FooterStyle.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].FooterStyle.Font = myfont2; 例 6: 最初の例では、グリッドの StyleプロパティのFont メンバを設定し、キャプションバー、列のヘッダ、および列のフッタを含むグ リッド全体の外見を変更しました。ただし、BackColorおよび ForeColor の各プロパティについては、この変更が適用されませ ん。組み込みの Caption、Heading、および Footing の各スタイルによって、これらのプロパティの両方が上書きされるた め、グリッドのデータセルの背景だけが濃い灰色で表示されます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Style.BackColor = System.Drawing.Color.Lavender C# コードの書き方 C# this.c1TrueDBGrid1.Style.BackColor = System.Drawing.Color.Lavender; 例 7: この例では、最初のスプリットにあるデータセルだけが影響を受けます。これは、スプリットのキャプション、列のヘッダ、および 列のフッタがそれぞれ組み込みスタイルの Caption、Heading、および Footing から背景色を継承するためです。 200 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).Style.BackColor = System.Drawing.Color.Lavender C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].Style.BackColor = System.Drawing.Color.Lavender; 例 8: この例では、最初のスプリットの最初の列にあるデータセルだけが影響を受けます。これは、列のヘッダおよび列のフッタがそ れぞれ組み込みスタイルの Heading および Footing から背景色を継承するためです。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.BackColor = System.Drawing.Color.Lavender C# コードの書き方 C# 201 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.c1TrueDBGrid1.Splits[0].DisplayColumnsp[0].Style.BackColor = System.Drawing.Color.Lavender; 例 9: C1DisplayColumnオブジェクトの HorizontalAlignment プロパティを設定すると、そのデータセルだけではなく、そのヘッダ とフッタにも影響します。これは、組み込みの Heading スタイルおよび Footing スタイルの HorizontalAlignment プロパ ティのデフォルトの設定によります。このプロパティは Normal から継承され、AlignHorzEnum.General に設定されます。 データセルの一般設定では、基礎データ型によって、セルのテキストの左揃え、中央揃え、または右揃えが決定されます。一 方、列のヘッダおよびフッタの一般設定では、列のデータセルの配置に従います。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Center C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Center; 例 10 10: この例では、列のヘッダおよびフッタにおける通常の配置と特定の配置の相違点を示しています。 HeadingStyle (または FooterStyle)プロパティの HorizontalAlignment メンバが AlignHorzEnum.General に設定されていない場合、ヘッダ(ま たはフッタ)はデータセルに関係なく配置されます。) 202 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic コードの書き方 Visual Basic With Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0) .HeadingStyle.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Near .FooterStyle.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Far .Style.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Center End With C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].HeadingStyle.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Near; this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].FooterStyle.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Far; this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Center; セルにスタイルを適用する TrueDBGrid for WinForms では、次の3つの方法を使用して、個別のセルの表示方法を制御できます。 制御方法 説明 ステータスに基づ いて グリッドの各セルには、その特性(現在の行、変更された行、選択した行 の一部、強調表示されている行の一部などの組み合わせ)を識別する セルのステータスがあります。AddCellStyle メソッドを使用して、セルの ステータス値の組み合わせに適用できるスタイルの属性を設定できま す。 コンテンツに基づい 正規表現と呼ばれるパターンを指定し、そのパターンを使ってセルのコ て ンテンツに対するパターンマッチングを実行できます。コンテンツが AddRegexCellStyle メソッドで指定されたパターンに一致する と、C1TrueDBGrid は、事前に選択されたスタイルの属性を自動的にセ ルに適用します。 独自の条件に基づ FetchCellStyle (または FetchRowStyle)イベントを使用すると、セル いて (または行)が表示されるたびに、セルの色やフォントを指定できます。 203 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 設計時に定義した Style オブジェクトを AddCellStyle メソッドおよび AddRegexCellStyle メソッドの引数として使用できま す。また、一時スタイルをコード内で作成して、特定の属性または複数の属性に使用できます。 FetchCellStyle イベントおよび FetchRowStyle イベントは、一時 Style オブジェクトを最後のパラメータとして渡します。その プロパティを設定することで、他のイベントパラメータで指定されたセルの外見を制御できます。 このバージョンの C1TrueDBGrid では、セル単位でフォントおよび色を指定するには、コードを記述する必要があります。た だし、設計時にスタイルを作成すると、最小限のコードを記述するだけで済みます。設計時に名前付きスタイルを作成する方 法については、GridStyleCollection エディタを使用する エディタを使用するを参照してください。 セルステータス値を指定する C1TrueDBGrid では、セルの性質を示すための 16 個のセルステータス値が認識され、コード内で使用されます。セルステー タス値は、異なる4つの条件を組み合わせて作成されます。これらの条件は、フラグ属性を持つ列挙体です。つまり、Or 演算 子で組み合わせることができます。 条件 解説 Current Cell このセルは、Bookmark, Col, および SplitIndex の各プロパティで指定され る現在のセル。常に1つのセルだけがこのステータスを持つことができる。フ ローティングエディタの MarqueeStyle プロパティ設定が有効な場合、この条 件は無視される。 Marquee Row このセルは、強調表示されている行マーキーの一部。MarqueeStyle プロパ ティで現在の行全体の強調表示が指定されている場合、現在の行に表示さ れているすべてのセルにも、この追加条件が設定される。 Updated Cell セルのコンテンツは変更されているが、その変更がデータソースに書き込ま れていない。また、Text または Value の各プロパティを含むコードを使って セルのコンテンツを変更した場合にも、この条件が設定される。 Selected Row このセルは、ユーザーが選択した行の一部またはコード内で選択した行の一 部。SelectedRowCollection には、選択されている各行へのブックマークが 含まれる。 True DBGrid for WinForms では、これらのセル条件に対応する次の定数が定義されています。 定数 説明 CellStyleFlag.CurrentCell 現在のセルに適用される。 CellStyleFlag.MarqueeRow 強調表示された行マーキー内のセルに適用される。 CellStyleFlag.UpdatedCell 変更されたセルに適用される。 CellStyleFlag.SelectedRow 選択された行内のセルに適用される。 次の定数も定義されています。上の定数と組み合わせては使用しません。 定数 説明 CellStyleFlag.AllCells すべてのセルに適用される。 CellStyleFlag.NormalCell ステータス条件がないセルに適用される。 ステータスに関係なくすべてのセルを参照するには、AllCells を使用します。上に説明した基本的なセル条件をいずれも持た ないセルだけを参照するには、NormalCell を使用します。 204 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ステータスに基づいてセルのスタイルを適用する C1TrueDBGrid の各セルには、その特性(現在の行、変更された行、選択した行の一部、強調表示されている行の一部など の組み合わせ)を識別するステータス値があります。AddCellStyle メソッドを使用して、セルのステータス値の組み合わせに 適用できるスタイルの属性を設定できます。AddCellStyle メソッドは、C1TrueDBGrid, C1TrueDBDropDown, Split, C1DisplayColumnの各オブジェクトによってサポートされています。このメソッドを使用して、特定の条件を適用するセルの範 囲を制御できます。 各ステータスの一意の組み合わせに、そのステータスのセルに使用する色、フォント、画像の各属性を設定できます。セルの ステータスが変わると、C1TrueDBGrid は、そのセルにオーバーライドされるスタイルのプロパティが定義されているかどうか を確認し、セルが表示されるときにこれらの属性を適用します。次の例のように、Style オブジェクトを使用して、セルの色と フォントを指定します。; Visual Basic コードの書き方 Visual Basic Dim S As New C1.Win.C1TrueDBGrid.Style() Dim myfont As Font myfont = New Font(S.Font, FontStyle.Bold) S.Font = myfont S.ForeColor = System.Drawing.Color.Red Me.C1TrueDBGrid1.AddCellStyle (C1.Win.C1TrueDBGrid.CellStyleFlag.CurrentCell, S) C# コードの書き方 C# C1TrueDBGrid.Style Font myfont; S = new C1.Win.C1TrueDBGrid.Style(); myfont = new Font(S.Font, FontStyle.Bold); S.Font = myfont; S.ForeColor = System.Drawing.Color.Red; this.c1TrueDBGrid1.AddCellStyle(C1.Win.C1TrueDBGrid.CellStyleFlag.CurrentCell, S); ここでは、新しい一時スタイルオブジェクトが作成され、オーバーライドされた色とフォント(テキストを赤および太字で表示す る)をグリッド全体の現在のセルに適用します。スタイルオブジェクトのBackColor プロパティは明示的に設定されていないた め、現在のセルの背景色は変更されません。 また、次のように、設計時に定義したスタイルをAddCellStyle メソッドの引数として使用することもできます。 Visual Basic コードの書き方 205 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic Dim S As C1.Win.C1TrueDBGrid.Style S = Me.C1TrueDBGrid1.Styles("RedBold") Me.C1TrueDBGrid1.AddCellStyle(C1.Win.C1TrueDBGrid.CellStyleFlag.CurrentCell, S) C# コードの書き方 C# C1.Win.C1TrueDBGrid.Style S; S = this.c1TrueDBGrid1.Styles("RedBold") this.c1TrueDBGrid1.AddCellStyle(C1.Win.C1TrueDBGrid.CellStyleFlag.CurrentCell, S); メモ メモ:現在のセルのステータスは、 MarqueeStyle プロパティがMarqueeEnum.FloatingEditorに設定されていない場 合にだけ有効です。フローティングエディタマーキーでは、コントロールパネルで設定されたシステムの強調表示の色が 使用されます。 このメソッドを使用すると、セルの条件を柔軟に制御および決定できますが、多くの場合は追加のコードを記述する必要があり ます。 AddCellStyle を呼び出すと、すぐにスタイルが適用されます。また、グリッド全体の特性に使用したり、対話式のスタイルの適 用に使用することもできます。 コンテンツに基づいてセルのスタイルを適用する セルの表示コンテンツに従って自動的にセルに色とフォントを適用するように、C1TrueDBGrid に指示できます。それには、正 規表現と呼ばれるパターンを指定します。グリッドは、この正規表現を各セルに表示されている値と比較しま す。AddRegexCellStyle メソッドを使用すると、1つの正規表現を一連のスタイル属性と関連付け、それらの属性をセルのス テータス値の任意の組み合わせに適用できます。 AddRegexCellStyle メソッドは、C1TrueDBGrid, C1TrueDBDropDown, Split, C1DisplayColumn の各オブジェクトによってサポートされています。このメソッドを使用して、特定の条件を適用するセ ルの範囲を制御できます。 AddRegexCellStyle メソッドは、AddCellStyle メソッドに似ていますが、正規表現文字列に対応する引数が必要です。 AddCellStyle と同様に、一時スタイルまたは名前付きスタイルのいずれかを使用できます。次の例では、一時スタイルを使 用して、最初の列で Windows という文字列を含むすべてのセルを太字で表示しています。 Visual Basic コードの書き方 Visual Basic Dim S As New C1.Win.C1TrueDBGrid.Style() Dim myfont As Font 206 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms myfont = New Font(S.Font, FontStyle.Bold) S.Font = myfont Me.C1TrueDBGrid1.AddRegexCellStyle (C1.Win.C1TrueDBGrid.CellStyleFlag.AllCells, S, "Computer") C# コードの書き方 C# C1TrueDBGrid.Style Font myfont; S = new C1.Win.C1TrueDBGrid.Style(); myfont = new Font(S.Font, FontStyle.Bold); S.Font = myfont; this.c1TrueDBGrid1.AddRegexCellStyle (C1.Win.C1TrueDBGrid.CellStyleFlag.AllCells, S, "Computer"); この機能を使用して、特定のパターンに一致するセルを特殊なフォントまたは色で表示する「ビジュアルなクエリ」を実装できま す。 独自の条件に基づいてセルのスタイルを適用する 正規表現が目的の書式設定の表現に適さない場合は、FetchCellStyle イベントを使用して、フォントおよび色をセル単位でカ スタマイズできます。このイベントは、列の FetchStyle プロパティが True に設定されている場合にだけ発生します。 たとえば、ある範囲内の値に、コード内で色を指定するとします。次のコードは、数値データを含むある列の FetchStyle プロ パティが True であることを前提としています。このコードは、FetchCellStyle イベントを処理し、1000 より大きな値を青色で表 示します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_FetchCellStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs) Handles C1TrueDBGrid1.FetchCellSTyle Dim N As Integer N = Val(Me.C1TrueDBGrid1(e.Row, e.Col) If N > 1000 Then e.CellStyle.ForeColor = System.Drawing.Color.Blue End If End Sub 207 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# private void c1TrueDBGrid1_FetchCellStyle( object sender, C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs e) { int N; N = (int) this.c1TrueDBGrid1[e.Row, e.Col]; if ( N > 1000 ) { e.CellStyle.ForeColor = System.Drawing.Color.Blue; } } Split, Row, Colの各引数で、グリッドに表示するセルを指定します。CellStyle引数によって、書式設定の情報がアプリケー ションからグリッドに伝達されます。CellStyle 引数は Style オブジェクトなので、次のように、セルのフォントの特性を FetchCellStyle イベントで変更することもできます。 Visual Basic コードの書き方 Visual Basic If N > 1000 Then e.CellStyle.Font.Italic = True Dim myfont As Font myfont = New Font (e.CellStyle.Font, FontStyle.Italic) If N > 1000 Then e.CellStyle.Font = myfont C# コードの書き方 C# if ( N > 1000 ) { e.CellStyle.Font.Italic = true } Font myfont; myfont = new Font (e.CellStyle.Font, FontStyle.Italic); if ( N > 1000 ) { e.CellStyle.Font = myfont; } if ( N > 1000 ) e.CellStyle.Font = myfont;また、FetchCellStyle イベントを使用して、他のセルの値や他のコントロールによっ て、書式設定をセルに適用することもできます。たとえば、次のように設定するとします。 列1-列2の値が負の場合は、列4のセルにあるテキストを赤色で表示する。 M列7のセルにあるテキストがテキストボックスのコンテンツと一致する場合は、そのテキストを太字で表示する。 この場合は、列4および列7の FetchStyle プロパティを True に設定し、FetchCellStyle イベントを次のように処理します。 Visual Basic コードの書き方 Visual Basic 208 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Private Sub C1TrueDBGrid1_FetchCellStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs) Handles C1TrueDBGrid1.FetchCellStyle Select Case e.Col Case 4 Dim Col1 As Long, Col2 As Long Col1 = CLng(Me.C1TrueDBGrid1(e.Row, 1)) Col2 = CLng(Me.C1TrueDBGrid1(e.Row, 2)) If Col1 - Col2 < 0 Then CellStyle.ForeColor = System.Drawing.Color.Red Case 7 Dim S As String S = Me.C1TrueDBGrid1(e.Row, 7).ToString() If S = TextBox1.Text Then Dim myfont = New Font(CellStyle.Font, FontStyle.Bold) CellStyle.Font = myfont End If Case Else Debug.WriteLine ("FetchCellStyle not handled: " & e.Col) End Select End Sub C# コードの書き方 C# private void c1TrueDBGrid1_FetchCellStyle( object sender, C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs e) { switch (e.Col) { case 4: long Col1, long Col2; Col1 = (long)this.c1TrueDBGrid1[e.Row, 1]; Col2 = (long)this.c1TrueDBGrid1[e.Row, 2]; if ( Col1 - Col2 < 0 ) CellStyle.ForeColor = System.Drawing.Color.Red break; case 7: string S; S = this.c1TrueDBGrid1[e.Row, 7].ToString(); if ( S == TextBox1.Text ) { Font myfont = new Font(CellStyle.Font, FontStyle.Bold); CellStyle.Font = myfont; } break; default: Console.WriteLine ("FetchCellStyle not handled: " + e.Col); } } 効率を高めるには、FetchCellStyle イベントで処理する列の FetchStyle だけを True に設定する必要があります。 209 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms メモ メモ:前述の例では、CellText メソッドを使用して、コードを単純化しています。ただし、CellText メソッドおよび CellValue メソッドは、呼び出されるたびに、データセットの内部クローンを作成および破棄します。そのため、これらの メソッドは非効率的になり、FetchCellStyle イベントで使用できないことがあります。グリッドの表示サイクルのパフォー マンスを向上させるには、非連結アプリケーションを使用してみてください。非連結アプリケーションを使用すると、基礎 データソースに直接アクセスできるため、CellText または CellValue を呼び出す場合に比べて、通常、処理が高速に なります。 フォントおよび色を、セル単位ではなく行単位でカスタマイズするには、FetchRowStyle イベントを使用します。このイベント は、FetchRowStyles プロパティが True に設定されているグリッド内の列ごとに、一度だけ発生します。このイベントの構文 は次のとおりです。 Visual Basic コードの書き方 Visual Basic Private Sub TDBGrid1_FetchRowStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles C1TrueDBGrid1.FetchRowStyle C# コードの書き方 C# private void TDBGrid1_FetchRowStyle( object sender, C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs e) FetchRowStyle イベントを使って1行ごとに行の色を互い違いにすることもできますが、AlternatingRows プロパティと組み 込みの EvenRow スタイルおよび OddRow スタイルを使用すると、より簡単で効率よく同じタスクを実行できます。 セルのスタイルの評価順序 グリッド、スプリット、または列の無名スタイルに関連して、セルのスタイルが適用される順序は、次のように定義されていま す。 1. C1TrueDBGrid コントロールのStyle プロパティ。この無名スタイルのデフォルトの名前付き親は Normal。 2. Split オブジェクトの Style プロパティ。デフォルトでは、この無名スタイルは、その C1TrueDBGrid コントロールからス タイルを継承する。. 3. Split オブジェクトのEvenRowStyle プロパティおよびOddRowStyle プロパティ。デフォルトでは、これらの無名スタイ ルは、その C1TrueDBGrid コントロールからスタイルを継承し、さらにこのコントロールがデフォルトの名前付き親とし て EvenRow および OddRow を持つ。これらのプロパティは、AlternatingRows プロパティが True である場合にだ け適用される。 4. C1DisplayColumn オブジェクトの Style プロパティ。デフォルトでは、この無名スタイルは、その Split オブジェクトか らスタイルを継承する。. 5. FetchRowStyle イベント。このイベントは、グリッドまたはスプリットの FetchRowStyles プロパティが True の場合に だけ発生する。 6. Split オブジェクトのSelectedStyle プロパティ。デフォルトでは、この無名スタイルは、その C1TrueDBGrid コントロー ルからスタイルを継承し、さらにこのコントロールがデフォルトの名前付き親として Selected を持つ。このプロパティ は、選択された行(コードやユーザーの操作によって、ブックマークが SelectedRowCollection に追加されている行) にだけ適用される。 7. Split オブジェクトの;HighlightRowStyle プロパティ。デフォルトでは、この無名スタイルは、その C1TrueDBGrid コ ントロールからスタイルを継承し、さらにこのコントロールがデフォルトの名前付き親として HighlightRow を持つ。こ のプロパティは、強調表示されている行(MarqueeStyle プロパティがMarqueeEnum.HighlightRowまた はMarqueeEnum.HighlightRowRaiseCellに設定されているグリッドまたはスプリット内の現在の行)にだけ適用さ れる。 8. AddCellStyleメソッドおよび AddRegexCellStyle メソッド(呼び出された場合)。C1DisplayColumn オブジェクトレベ ルで指定されたセルのスタイルには最高レベルの優先度が設定される。次に、Split オブジェクトおよび 210 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid コントロールの各レベルで指定されたセルのスタイルが優先される。同じオブジェクトレベル内では、 コード内で追加された順番にセルのスタイルがテストされる。セルのスタイルはお互いに継承されない。一致するもの が見つかるとすぐに、テストが停止する。 9. FetchCellStyle イベント。このイベントは、C1DisplayColumn オブジェクトのFetchStyle プロパティが True の場合に だけ発生する。 このように、FetchCellStyle イベントを使用すると、常にセルのレンダリングを最終的に制御できます。 画像をグリッドの要素に適用する 旧バージョンの C1TrueDBGrid では、スタイルは、フォント、色、および配置の属性を決定するために使用されていました。こ のバージョンでは、スタイルの概念を背景画像および前景画像にまで広げています。そのため、ヘッダ、フッタ、およびキャプ ションバーを装飾したり、データセルの背景パターンを指定したり、ValueItems オブジェクトにデータを配置することなくセルに 画像データをレンダリングすることができます。次の Style オブジェクトのプロパティによって、画像の表示方法が決定されま す。 プロパティ 説明 BackgroundImage スタイルの背景画像を返すまたは設定します。 BackgroundPictureDrawMode スタイルの背景画像の表示方法を制御します。 ForegroundImage スタイルの前景画像を返すまたは設定します。 ForeGroundPicturePosition スタイルの前景画像の配置方法を制御します。 画像のプロパティの継承方法は他のスタイル属性と同じなので、この章の前の項で説明したテクニックを画像にも使用できま す。つまり、次のいずれかの方法を使用して、画像をグリッドの要素に付加できます。 設計時または実行時に、組み込みの名前付きスタイルのBackgroundImage プロパティまたは ForegroundImage プロパティを設定する。 設計時または実行時に、無名スタイルの BackgroundImage プロパティまたは ForegroundImage プロパティを設 定する。 AddCellStyle メソッドまたは AddRegexCellStyle メソッドを呼び出す。 FetchCellStyle イベントまたは FetchRowStyle イベントのハンドラを記述する。 背景画像を表示する 背景画像を使用して、キャプションバー、列ヘッダ、列フッタなどの静的なグリッド要素をカスタマイズできます。たとえば、次の コードは、グリッドの CaptionStyleプロパティから返されるStyleオブジェクトの BackgroundImage メンバに、グラデーション カラーで塗りつぶされたビットマップを適用しています。 Visual Basic コードの書き方 Visual Basic With Me.C1TrueDBGrid1.CaptionStyle .BackgroundImage = System.Drawing.Image.FromFile("c:\bubbles.bmp") .BackgroundPictureDrawMode = C1.Win.C1TrueDBGrid.BackgroundPictureDrawModeEnum.Tile .ForeColor = System.Drawing.Color.White .Font = New Font(.Font, FontStyle.Bold) End With C# コードの書き方 211 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# this.c1TrueDBGrid1.CaptionStyle.BackgroundImage = System.Drawing.Image.FromFile(@"c:\bubbles.bmp"); this.c1TrueDBGrid.BackgroundPictureDrawMode = C1.Win.C1TrueDBGrid.BackgroundPictureDrawModeEnum.Tile; this.c1TrueDBGrid1.CaptionStyle.ForeColor = System.Drawing.Color.White; this.c1TrueDBGrid1.CaptionStyle.Font = new Font(this.c1TrueDBGrid1.CaptionStyle.Font, FontStyle.Bold); また、このコードは、キャプションのテキストの色を変え、テキストを太字にして、次のように表示します。 ;設計時に同じ効果を得るには、GridStyleCollection エディタ エディタで組み込みの Caption スタイルを編集するか、Visual Studio のプロパティウィンドウで CaptionStyle プロパティを編集します。 デフォルトでは、背景画像は、関連付けられたグリッド要素内の中央に配置されます。背景のビットマップの高さによっては、 領域全体が塗りつぶされるように BackgroundPictureDrawMode プロパティの値を調節する必要があります。このプロパ ティでは、次の図に示すように、画像を中央に配置する、タイル表示する、領域全体に合わせて引き伸ばして表示する、のい ずれかを指定できます。 データセル内で背景画像を使用して、おもしろい視覚効果を得ることができます。たとえば、次のパターンは、隣接する行で繰 り返し表示するように作成されています。 レコードセレクタ列、データ行間の分割線、および列ヘッダの分割線を非表示にしたうえ、上のパターンを使用して、次のような 212 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 表示を作成できます。 ここでは、次のコード例に示すように、空の非連結列を左側に挿入してバインダーのリングを表示しています。 Visual Basic コードの書き方 Visual Basic ' グリッドの外観をフラットにし、レコード セレクタ、行分割線、スクロール バーを削除します With Me.C1TrueDBGrid1 .InactiveStyle.ForeColor = System.Drawing.Color.White .RecordSelectors = False .RowDivider.Style = LineStyleEnum.None .RowHeight = 16 .HScrollBar.Style = ScrollBarStyleEnum.None .VScrolBar.Style = ScrollBarStyleEnum.None .MarqueeStyle = MarqueeEnum.NoMarquee End With ' デフォルト スプリット内のデータ セルで使用される背景パターンを設定します(標準のスタイルには影響しない) With Me.C1TrueDBGrid1.Splits(0).Style .BackgroundImage = System.Drawing.Image.FromFile("paper.bmp") .BackgroundPictureDrawMode = BackgroundPictureDrawModeEnum.Tile End With ' バインダ リングを保持する空のアンバウンド列を左に作成します。分割線を削除し、Style オブジェクト のBackroundBitmap プロパティを設定します Dim col as New C1TrueDBGrid.C1DataColumn() Me.C1TrueDBGrid.Columns.InsertAt(0, col) Dim C As C1TrueDBGrid.C1DisplayColumn C = Me.C1TrueDBGrid1.Splits(0).DisplayColumns(col) With C .Width = 48 .Visible = True .Style.BackgroundImage = System.Drawing.Image.FromFile("rings.bmp") .HeaderDivider = False .ColumnDivider.Style = LineStyleEnum.None End With 213 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ' アンバウンド列を表示領域にスクロールします Me.C1TrueDBGrid1.Col = 0 'Title 列をサイズ変更し、ヘッダー分割線を削除します Set C = Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Title") With C .Width = 380 .HeaderDivider = False End With ' バインダ リング ビットマップの小さな角を列ヘッダの背景に使用し、フォントとテキストの色をそれぞれ調整します Dim myfont As Font With Me.C1TrueDBGrid1.HeadingStyle .BackgroundImage = System.Drawing.Image.FromFile("corner.bmp") .BackgroundPictureDrawMode = BackgroundPictureDrawModeEnum.Tile myfont = New Font(.Font, 10, FontStyle.Bold) .Font = myfont .ForeColor = System.Drawing.Color.White End With C# コードの書き方 C# // グリッドの外観をフラットにし、レコード セレクタ、行分割線、スクロール バーを削除します this.c1TrueDBGrid1.InactiveStyle.ForeColor = System.Drawing.Color.White; this.c1TrueDBGrid1.RecordSelectors = false; this.c1TrueDBGrid1.RowDivider.Style = LineStyleEnum.None; this.c1TrueDBGrid1.RowHeight = 16; this.c1TrueDBGrid1.HScrollBar.Style = ScrollBarStyleEnum.None; this.c1TrueDBGrid1.VScrolBar.Style = ScrollBarStyleEnum.None; this.c1TrueDBGrid1.MarqueeStyle = MarqueeEnum.NoMarquee; // デフォルト スプリット内のデータ セルで使用される背景パターンを設定します(標準のスタイルには影響しない) this.c1TrueDBGrid1.Splits[0].Style.BackgroundImage = System.Drawing.Image.FromFile("paper.bmp"); this.c1TrueDBGrid1.Splits[0].Style.BackgroundPictureDrawMode = BackgroundPictureDrawModeEnum.Tile; // バインダ リングを保持する空のアンバウンド列を左に作成します。分割線を削除し、Style オブジェクト のBackroundBitmap プロパティを設定します C1TrueDBGrid.C1DataColumn col = new C1TrueDBGrid.C1DataColumn(); this.C1TrueDBGrid.Columns.InsertAt(0, col); C1TrueDBGrid.C1DisplayColumn C = this.c1TrueDBGrid1.Splits[0].DisplayColumns[col]; C.Width = 48; C.Visible = true; C.Style.BackgroundImage = System.Drawing.Image.FromFile["rings.bmp"]; C.HeaderDivider = false; C.ColumnDivider.Style = LineStyleEnum.None; // アンバウンド列を表示領域にスクロールします this.c1TrueDBGrid1.Col = 0; 214 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms // Title 列をサイズ変更し、ヘッダー分割線を削除します C = this.c1TrueDBGrid1.Splits[0].DisplayColumns["Title"]; C.Width = 380; C.HeaderDivider = false; // バインダ リング ビットマップの小さな角を列ヘッダの背景に使用し、フォントとテキストの色をそれぞれ調整します Font myfont; this.c1TrueDBGrid1.HeadingStyle.BackgroundImage = System.Drawing.Image.FromFile("corner.bmp"); this.c1TrueDBGrid1.HeadingStyle.BackgroundPictureDrawMode = BackgroundPictureDrawModeEnum.Tile; myfont = new Font(.Font, 10, FontStyle.Bold); this.c1TrueDBGrid1.HeadingStyle.Font = myfont; this.c1TrueDBGrid1.HeadingStyle.ForeColor = System.Drawing.Color.White; 前景画像を表示する 前景画像を使用して、キャプションバー、列ヘッダ、列フッタなどの静的なグリッド要素に視覚効果を追加できます。前景画像 は、 Styleの ForegroundImageプロパティによって指定します。前景画像は、テキストの横やテキストの代わりとして表示で きますが、テキストに重ねて表示することはできません。前景画像の位置の例については、以下を参照してください。 前景画像のForeGroundPicturePosition プロパティは、セルテキストに対する相対位置で前景画像の配置を指定します。次 に、プロパティの値とその表示例を示します。 215 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms セルの編集テクニック この章では、TrueDBGrid for WinForms でセルを編集する操作をカスタマイズする方法について説明します。テキスト入力 フィールドでは、グリッドの編集イベントにコードを記述したり、入力マスクテンプレートを指定したり、長い文字列の入力に使用 するドロップダウンテキストエディタを表示することができます。ユーザーにオプションのリストを表示するに は、ValueItemCollection オブジェクト、C1TrueDBDropDown コントロールのほか、任意の組み込みコントロールまたは サードパーティのコントロールを使用できます。 セルの編集時動作 TrueDBGrid for WinForms には、セル内編集をカスタマイズおよび制御するためのさまざまな機能が用意されています。グ リッドのデフォルトの編集時動作は、MarqueeStyle プロパティの設定に基づいて決定されます。マーキースタイルとしてフ ローティングエディタが使用された場合は、編集時動作が他のマーキースタイルと異なります。以下の項で は、C1TrueDBGrid の編集時動作の概要と、フローティングエディタを使用する場合の例外について説明します。 MarqueeStyle プロパティの詳細については、現在の行またはセルを強調表示する 現在の行またはセルを強調表示するを参照してください。 セルの編集を開始する セルには表示モードと編集モードがあり、EditActive プロパティによってモードを設定または取得できます。EditActive プロ パティを True に設定すると、現在のセルを編集モードにできます。また、False に設定すると、編集を終了できます。ユーザー は、現在のセルをクリックするか、F2キーを押すと、編集モードに移行できます。MarqueeStyleプロパティ がFloatingEditor以外の場合、編集モードに移行するとセルの値が全選択された状態になります。点滅するテキストカーソル (カレット カレット)が、セルをクリックした場合はテキストの先頭に、F2キーを使用した場合はテキストの末尾に表示されます。セルが 編集モードになると、BeforeColEdit イベントが発生します。セルが編集モードの場合、EditActive プロパティは True です。 フローティングエディタは動作が異なります。編集モードに入るには、セルテキスト内の任意の文字の位置をクリックして、テキ ストを挿入する位置を指定します。F2キーを押すと、点滅するカーソルがセルの末尾に表示されます。ユーザーがセルテキス トを変更するまで、BeforeColEdit イベントは発生せず、EditActive プロパティは False です。 色とワードラップ 編集モードでは、セルの色は、EditorStyle スタイルオブジェクトの ForeColor プロパティと BackColor プロパティによって決 定されます。編集中のテキストは、列のスタイルのWrapText プロパティの設定に関係なく、折り返して表示されます。テキス トが長すぎてセルに収まらない場合は、自動的に組み込みのドロップダウン編集コントロールが表示されます。詳細について は、テキストを使用する テキストを使用するを参照してください。 フローティングエディタにおける相違点:編集モードでは、テキストが強調表示されなくなり、セルの色が通常のセルの色と同じ になります。編集中のテキストは、列のスタイルの WrapText プロパティが True の場合にだけ折り返されます。組み込みの ドロップダウン編集コントロールは使用できません。 変更ステータスを判定する 編集中は、グリッドの DataChanged プロパティを調べて、現在の行にユーザーが何らかの変更を行ったかどうかを判定でき ます。 グリッドの DataChanged プロパティを False に設定すると、編集を終了して現在の行に対する変更をすべて破棄し、現在の 行の表示をデータソースに基づいて更新できます。 現在の行のレコードセレクタ列に表示されるアイコンは、グリッドの DataChanged プロパティの状態を反映しま す。DataChanged が False の場合、レコードセレクタ列には三角形の矢印が表示されます。DataChanged が True の場合 は、鉛筆アイコンが表示されます。 216 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms セルのコンテンツを決定する 編集中は、列のText プロパティと Value プロパティに、変更されている行でユーザーが現在目にしているテキストが含まれま す。ユーザーがキーを押すたびに Change イベントが発生し、ユーザーが現在のセルを変更したことがアプリケーションに伝 えられます。ただし、Change イベントは、ユーザーが処理を完了したことを示すのではなく、1つの変更が行われ、グリッドは まだ編集モードであることを示します。 Change イベントは、セルのコンテンツがコードによって変更されたときなど、グリッドが編集モードでない場合には発生しませ ん。 セルの編集を終了する 編集操作を完了するには、次のいずれかを行います。 Enterキーを押す。 Escキーを押す。 矢印キー、Tabキー、またはマウスで他のセルに移動する。 フォーム上の他のコントロールにフォーカスを設定する。 編集イベントを処理する 以下の項では、イベントに応答することによって、TrueDBGrid for WinForms のデフォルトの編集時動作を変更する方法に ついて説明します。 標準キー操作イベント C1TrueDBGrid は、.NET 環境に含まれる標準キー操作イベントをサポートしています。 イベント 説明 KeyDown キーを押すと、KeyDown が発生します。 KeyPress ANSI キーを押すと、KeyPress が発生します。 KeyUp キーを放すと、KeyUp が発生します。 KeyDown イベントと KeyUp イベントは、ファンクションキー(Alt、Shiftなど)やテンキーを含むすべてのキーをトラップしま す。KeyPress イベントは、文字、数字、句読点、記号、および編集キー(Tab、Enter、Backspaceなど)だけをトラップします。 他の通常の .NET コントロールの場合と同様に、これらのイベントを使用して、ユーザー入力を制限したり、変更することができ ます。たとえば、次の KeyPress イベントハンドラでは、英数字以外の文字を入力できないようにしています。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles C1TrueDBGrid1.KeyPress ' 文字でも数字でもない場合は、ユーザーのキー入力をキャンセルします If Not e.KeyChar.IsLetterOrDigit(e.KeyChar) Then e.Handled = True End If End Sub 217 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# private void C1trueDBGrid1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { // 文字でも数字でもない場合は、ユーザーのキー入力をキャンセルします if (! e.Keychar.IsLetterOrDigit(e.KeyChar]) { e.Handled = true ; } } このような .NET のネイティブなイベントの詳細については、MSDN または .NET のヘルプを参照してください。 列の編集イベント C1TrueDBGrid では、次のイベントを使用して、セルのすべての編集処理を制御できます。編集が正しく実行された場合は、次 の順序でイベントが発生します。 イベント 説明 BeforeColEdit 列のデータを編集しようとすると起動します。 ColEdit 現在のセルが編集モードになると起動します。 AfterColEdit 列のデータの編集を完了すると起動します。 BeforeColEdit イベントを使用して、セルごとに編集を可能にしたり、最初に入力された値をデフォルト値に変換することができ ます。 ColEdit イベントは、セルが編集モードになったことを示し、AfterColEdit イベントは、編集モードが終了したことを示します。こ れら2つのイベントを次のように使用して、編集中にフィードバックを提供できます。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_ColEdit(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.ColEventArgs) Handles C1TrueDBGrid1.ColEdit Select Case e.Columns.DataColumn.Caption Case "Code" Me.Label1.Text = "Enter 4-digit company code" Case "Description" Me.Label1.Text = "Enter full company name" End Select End Sub Private Sub C1TrueDBGrid1_AfterColEdit (ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.ColEventArgs) Handles C1TrueDBGrid1.AfterColEdit ' 編集の指示をクリアします Me.Label1.Text = "" End Sub 218 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# private void C1trueDBGrid1_ColEdit(object sender, C1.Win.C1TrueDBGrid.ColEventArgs e) { switch(e.Columns.DataColumn.Caption) { Case "Code": this.Label1.Text = "Enter 4-digit company code"; break; Case "Description"; this.Label1.Text = "Enter full company name"; break; } } private void C1TrueDBGrid1_AfterColEdit(object sender, C1.Win.C1TrueDBGrid.ColEventArgs e) } // 編集の指示をクリアします this.Label1.Text = ""; } セルのコンテンツを一度のキー操作で変更する BeforeColEdit イベントを使用してTrueDBGrid for WindowsForms コントロールの編集操作をカスタマイズすることができ ます。BeforeColEdit は、他の編集イベントより前に発生するため、編集を開始する前に、事実上どのような操作を行うことも できます。たとえば、編集の要求をキャンセルして、組み込みテキストエディタの代わりに独自のドロップダウンリストボックスを 表示できます。 C1TrueDBGrid コントロールでは、次の4つの方法で編集モードに入ることができます。 1. 2. 3. 4. 5. EditActive 現在のセルをクリックすると、現在のセルにあるコンテンツの編集が開始される。 F2 キーを押しても、現在のセルにあるコンテンツの編集が開始される。 入力を開始すると、その文字がセルのコンテンツになり、編集が開始される。 コード内で EditActive プロパティを設定して、強制的に編集を開始する。 1、2、および3の方法では BeforeColEdit イベントが発生しますが、4の方法ではこのイベントが発生しません。TrueDBGrid for WindowsForms では、コードからの要求をキャンセルすることはないとしています。 ユーザーの編集要求でマウスとキーボードのどちらが使用されたかを判別できます。そのために、BeforeColEdit イベントの 引数の1つに KeyChar があります。この引数は、ユーザーがセルをクリックして編集を開始すると0に、文字を入力すると ASCII 文字の1つに設定されます。 BeforeColEdit が発生したとき、ASCII 文字はまだ現在のセルに置かれていません。そのため、BeforeColEdit で編集をキャ ンセルすると、ASCII キーは破棄されます。これは便利なテクニックです。 Done という名前のブール値フィールドがあり、その表示書式として NumberFormat プロパティを Yes/No に設定していると します。この場合に、ユーザーが Y キーまたは N キーを押すと、編集モードに入るのではなく、ただちにセルのコンテンツを変 更するとします。BeforeColEdit で次のコードを使用すると、これらの動作を実行できます。 Visual Basic コードの書き方 Visual Basic 219 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Private Sub C1TrueDBGrid1_BeforeColEdit(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.BeforeColEditEventArgs) Handles C1TrueDBGrid1.BeforeColEdit With Me.C1TrueDBGrid1.Columns(e.ColIndex) ' これが「Done」列でないか、ユーザーがマウスでクリックした場合は、そのまま続行します If .DataField <> "Done" Or e.KeyChar = Chr(0) Then Exit Sub ' 通常の編集をキャンセルし、KeyAscii に基づく適切な結果をフィールドに設定します。無効な文字が入力 された場合は、ビープ音を鳴らします。 e.Cancel = True Select Case UCase(e.KeyChar) Case "Y" .Value = -1 Case "N" .Value = 0 Case Else Beep() End Select End With End Sub C# コードの書き方 C# private void C1TrueDBGrid1_BeforeColEdit( object sender, C1.Win.C1TrueDBGrid.BeforeColEditEventArgs e) { C1.Win.C1DataColumn col = e.Column.DataColumn; // これが「Done」列でないか、ユーザーがマウスでクリックした場合は、そのまま続行します if (col.DataField != "Done" || e.KeyChar == 0 ) return; // 通常の編集をキャンセルし、KeyAscii に基づく適切な結果をフィールドに設定します。無効な文字が入力され た場合は、ビープ音を鳴らします。 e.Cancel = true; switch (e.KeyChar. .ToUpper()) { case "Y"; Col.Value = -1; break; case "N"; Col.Value = 0; default:; Beep(); } } KeyAscii が0の場合はイベントハンドラが終了します。したがって、マウスを使って編集することもできます。 テキストを使用する 220 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms この項では、テキスト編集に関するプロパティについて簡単に説明します。 データ入力フィールドのサイズを制限する DataWidth オブジェクトの C1DataColumn プロパティを使用すると、ユーザーが入力できる文字数を制限できます。このプ ロパティを0に設定すると、制限がなくなります。 長いフィールドにドロップダウン編集コントロールを提供する 長すぎてセルに収まらないセルテキストを編集しようとすると、自動的に複数行ドロップダウンテキストエディタがアクティブに なります。編集中、ドロップダウン編集コントロールには、列のスタイルのWrapText プロパティの設定に関係なく、文字が折り 返して表示されます。ドロップダウンテキストエディタを無効にして、常にセルの境界内で編集するには、グリッド のEditDropDown プロパティを False に設定します(デフォルトは True )。グリッドのMarqueeStyle プロパティが 6 -MarqueeEnum.FloatingEditor に設定されている場合は、ドロップダウンテキストエディタを使用できません。次のコード は、Comments 列にあるセルデータを変更するために、グリッドに組み込まれている列ボタン機能を使用して、ドロップダウン 編集コントロールをアクティブにします。 Visual Basic Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With Me.C1TrueDBGrid1 .MarqueeStyle = MarqueeEnum.SolidCellBorder .Splits(0).DisplayColumns("Comments").Button = True ' True がデフォルトなので、なくても同じです .EditDropDown = True End With End Sub Private Sub C1TrueDBGrid1_ButtonClick(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.ColEventArgs) Handles C1TrueDBGrid1.ButtonClick ' セルを編集モードにします Me.C1TrueDBGrid1.EditActive = True End Sub C# private void Form1_Load(System.object sender, System.EventArgs e) { C1TrueDBGrid1.MarqueeStyle = MarqueeEnum.SolidCellBorder; C1TrueDBGrid1.Splits[0].DisplayColumns["Comments"].Button = true; // True がデフォルトなので、なくても同じです C1TrueDBGrid1.EditDropDown = true; } private void C1TrueDBGrid1_ButtonClick(object sender, C1.Win.C1TrueDBGrid.ColEventArgs e) { // セルを編集モードにします this.c1TrueDBGrid1.EditActive = true; 221 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms } 現在のセルが Comments 列にある場合は、現在のセルまたは組み込みボタンをクリックして、編集を開始できます。 テキストを選択して置き換える TrueDBGrid for WinForms は、多くの ActiveX コントロールや .NET コントロールで提供されている次の標準のテキスト選 択プロパティをサポートしています。 プロパティ 説明 SelectionLength 選択されているテキストの長さを返すまたは設定する。 SelectionStart 選択されているテキストの開始点を返すまたは設定する。 SelectedText 選択されているテキストを返すまたは設定する。 メモ メモ:これらのプロパティは、グリッドが編集モードの場合、つまり, EditActive プロパティが True の場合にだけ有効で す。 入力マスク NumberFormat プロパティを使用して、列データの表示形式を制御できます。書式設定された列をユーザーが編集する場 合、編集中は、一貫した書式設定を維持できると便利です。TrueDBGrid for WinForms には EditMask プロパティが用意 されており、NumberFormat プロパティとも連携して、一貫したデータ入力を提供します。 列の入力マスクを指定する C1DataColumn オブジェクトの EditMask列の入力マスクを指定するプロパティは、エンドユーザーのデータ入力に対する入 力マスクテンプレートを指定します。入力マスク文字列は、入力する必要がある文字、または入力時にはスキップされるリテラ ル文字を表す特殊文字で構成されます。次に、有効なテンプレート文字を示します。 EditMask は、以下の記号で構成される文字列である必要があります。 1. ワイルドカード 0 数字 9 数字またはスペース # 数字または記号 L 英字 ? 英字またはスペース A 英字または数字 a 英字、数字、またはスペース & 任意の文字 2. ローカライズされた文字 222 . ローカライズされた小数点 , ローカライズされた 1000 単位の区切り記号 : ローカライズされた時刻の区切り記号 / ローカライズされた日付の区切り記号 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 3. コマンド文字 \ この記号の後の文字はリテラル文字として扱われる。 > 英字を大文字に変換する。 < 英字を小文字に変換する。 サンプルコード Visual Basic 'ユーザーが電話番号(地域番号はオプション)と州名(大文字)を入力できるようにマスクを設定します Me.C1TrueDBGrid1.Columns(0).EditMask = "(###) 000-0000 St\ate\: >LL" C# // ユーザーが電話番号(地域番号はオプション)と州名(大文字)を入力できるようにマスクを設定します this.c1TrueDBGrid1.Columns[0].EditMask = "(###) 000-0000 St\\ate\\: >LL"; 書式設定用の入力マスクを使用する EditMask プロパティがデータ入力に対する入力マスクの指定に使用されているのに対して、NumberFormat プロパティは、 グリッドセルのデータの表示形式の指定に使用されます。列に NumberFormat プロパティが指定されていない場合は、 キャッシュされているテキストが単にそのまま(リテラルなしで)グリッドに表示されます。NumberFormat プロパティが指定さ れている場合は、キャッシュされているテキストが表示フォーマッタに送信されます。 入力形式と表示形式は同じであることが多いため、NumberFormat プロパティには Edit Mask オプションが用意されていま す。このオプションを選択すると、EditMask プロパティの設定がデータの入力と表示の両方に使用されます。ただし、入力形 式と表示形式が同じである必要はなく、EditMask プロパティと異なる NumberFormat オプションを選択することもできます。 マスクされた入力の更新方法を制御する 通常、EditMaskプロパティが設定されている列にあるセルの編集をユーザーが完了すると、TrueDBGrid が変更されたセル テキストをキャッシュしますが、入力マスクテンプレート内のリテラル文字は、変更されたセルテキストから事前に取り去られま す。この動作を変更するには、EditMaskUpdateプロパティを使用します。 デフォルトでは、EditMaskUpdate プロパティは False になっています。この設定では、変更されたセルテキストがデータベー スに更新される際に、セル内に表示されている書式設定されたテキストではなく、キャッシュにあるテキスト(リテラルなし)が送 られます。このデフォルトの動作を変更するには、EditMaskUpdate プロパティを True に設定します。これにより、キャッシュ 内のテキストは、EditMask プロパティに従って書式設定されてから、データベースに更新されます。 したがって、EditMaskUpdate プロパティを設定して、適切なデータがデータベースに送られて更新されるようにすることが重 要です。 セル内ボタン TrueDBGrid for WinForms は、現在のセルまたは指定された列内のすべてのセルで使用できるさまざまなセル内ボタンの オプションをサポートしています。セル内ボタンを使用して、複数の選択肢があることを示したり、セルのコンテンツに関連付け られたコマンドを実行したり、編集用の任意のコントロールやフォームを表示することができます。 セル内ボタンを有効にする 223 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1DisplayColumn オブジェクトのセル内ボタンを有効にするには、次のように、コード内でオブジェクトのButton プロパティ を True に設定します。 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Button = True C# this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Button = true; また、列の DropDown プロパティが C1TrueDBDropDownコントロールの名前に設定されているか、関連付けられている ValueItemCollection オブジェクトのPresentation プロパティがコンボボックスオプションの1つに設定されている場合 も、Button プロパティが有効になります。 次の図に示すように、デフォルトでは、セル内ボタンは現在のセルにだけ表示されます。 ただし、列のButtonAlways プロパティを True に設定すると、セル内ボタンをすべての行に表示できます。 セルをコマンドボタンとしてレンダリングする C1DisplayColumn オブジェクト内の現在のセルを編集できないコマンドボタンとしてレンダリングするには、次のようなコード を使用して、ButtonText プロパティを True に設定します。 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).ButtonText = True C# this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].ButtonText = true; この列内のセルがフォーカスを受け取ると、そのセルは、Windows の標準のコマンドボタンとしてレンダリングされます。ま た、セルのテキストがキャプションとして使用されます。セルのテキストが自動的に中央に配置されることはありません。ここで 224 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms は、列の水平方向および垂直方向の配置設定が使用されます。 Button プロパティと ButtonText プロパティの両方が True の場合は、ButtonText プロパティの設定が優先されます。 デフォルトのセル内ボタンと同様に、列のButtonAlways プロパティを True に設定して、すべてのセルをコマンドボタンとして 表示できます。ただし、現在のセルには、フォーカス四角形が描画されます。 セル内ボタンのクリックを検出する ButtonClick イベントは、ユーザーがセル内ボタンをクリックしたときに、コード内で応答できるようにするために用意されてい ます。構文は次のとおりです。 Visual Basic Private Sub C1TrueDBGrid1_ButtonClick(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.ColEventArgs) Handles C1TrueDBGrid1.ButtonClick C# private void C1TrueDBGrid1_ButtonClick( object sender, C1.Win.C1TrueDBGrid.ColEventArgs e) セル内ボタンは、Button プロパティまたは ButtonText プロパティによって有効にされているかどうかに関係なく、クリックさ れると必ずこのイベントを発生します。ButtonClick イベントの例については、テキストを使用する テキストを使用するを参照してください。 セル内ボタンのビットマップをカスタマイズする デフォルトでは、C1TrueDBGrid のセル内ボタンには、下向き矢印が使用されます。 設計時に C1DisplayColumn オブジェクトのボタンのビットマップを変更するには、次のように、コード内で ButtonPicture プ ロパティを設定します。 225 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic Me.C1TrueDBGrid1.Columns(0).ButtonPicture = System.Drawing.Image.FromFile("dollar.bmp") C# this.c1TrueDBGrid1.Columns[0].ButtonPicture = System.Drawing.Image.FromFile("dollar.bmp"); グリッドは、ボタンの枠をボタンの押下状態に応じて自動的に描画します。そのため、ボタンの内側の画像だけを用意します。 背景は、薄い灰色にすることをお勧めします。 ドロップダウンコントロール TrueDBGrid for WinForms にはさまざまな種類の組み込みコントロールとプログラム構造が用意されており、事実上任意 の種類のドロップダウンセル編集インタフェースを実装できます。ValueItems オブジェクトとそれに含まれるValueItem オブ ジェクトのコレクションを使って簡単なピックリストを提供したり、C1TrueDBDropDown コントロールを使ってデータ対応の複 数列のコンボボックスを実装することができます。任意の Visual Basic コントロールまたはサードパーティのコントロールを使 用して、特殊な編集機能を実行することもできます。 組み込みコンボボックスを使用する C1DataColumn オブジェクトの ValueItems オブジェクトは、自動データ変換機能に合わせて動作する組み込みコンボボック スインタフェースをオプションで提供します。デフォルトでは、Presentation プロパティは 0 - PresentationEnum.Normalに 設定されており、通常のセル編集動作はテキストデータに対応しています。ただし、Presentation プロパティを PresentationEnum.ComboBox または PresentationEnum.SortedComboBoxのどちらかに設定した場合は、関連する 列内のセルがフォーカスを受け取ると、セル内ボタンが表示されます。セル内ボタンをクリックすると、ドロップダウンコンボボッ クスが表示されます。 ドロップダウンコンボボックスには、ValueItemCollection オブジェクトの各メンバごとに1つのアイテムが表示されます。コレ クションの Translate プロパティが True の場合は、コンボボックスのアイテムとしてDisplayValue text のテキストが使用さ れます。 False の場合は、Value のテキストが使用されます。 ドロップダウンコンボボックスは、表示されている列の幅に合わせて自動的にサイズ変更されます。コンボボックスの高さは、 226 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コレクションのアイテム数とMaxComboItems プロパティによって決定されます。アイテムの総数が MaxComboItems (デ フォルト値は5)以下の場合、アイテムはすべて表示されます。アイテムの総数が MaxComboItems を超える場合 は、MaxComboItems で指定された数のアイテムだけが表示されますが、ドロップダウンコンボボックスの右端にスクロール バーが表示され、他のアイテムを表示することができます。 組み込みコンボボックスの選択を検出する ユーザーが組み込みコンボボックスのアイテムを選択すると、ComboSelect ベントが発生します。このイベントは、編集モード を終了する前に、セルのコンテンツを決定する場合に便利です。 通常、組み込みコンボボックスに表示されるアイテムは、基礎データソースに対する許容値だけなので、ユーザーがアイテム を選択した後でセルに入力を行わないようにする必要があります。C1DisplayColumn プロパティの DropDownList を True に設定すると、結び付けられている C1TrueDBDropDown コントロールをリストボックスとしてだけ使用するように制限できま す。ドロップダウンリストに新しい値を追加したり、値を変更することは許可されないため、基礎データベースが不正な情報で 更新されることはありません。 C1TrueDBDropDown コントロールを使用する 前に説明した組み込みドロップダウンコンボボックスは、許可される値が事前にわかっており、しかも比較的少数である場合に 最も役立ちます。ValueItem オブジェクトのコレクションが大きくなると、設計時には管理が難しくなり、実行時には大量のコー ドの準備が必要になります。その上、組み込みコンボボックスは、データコントロールに連結したり、自動的にデータを挿入す ることができません。 この章の後半で説明するテクニックを使用すると、別の C1TrueDBGrid コントロールをドロップダウンとして使用するように セットアップできます。しかし、別のデータソースから一連の値を取得して表示する必要がある場合は、 C1TrueDBDropDown コントロールの方がスマートに問題を解決できます。このコントロールは、この目的のために設計され ており、設計時にセットアップを完了できます。. ドロップダウンコントロールを使用するには、設計時または実行時に、グリッド列のDropDown プロパティを C1TrueDBDropDown コントロールに設定します。実行時にその列のセル内ボタンをクリックすると、C1TrueDBDropDown コントロールがグリッドの現在のセルの下に表示されます。ドロップダウンコントロールからアイテムを選択すると、グリッドの現 在のセルが更新されます。 C1TrueDBDropDown コントロールは C1TrueDBGrid のサブセットなので、プロパティ、メソッド、およびイベントの多くを共 有します。しかし、次の2つのプロパティは、C1TrueDBDropDown コントロールに固有です。 プロパティ 説明 ValueMember このプロパティは、選択が行われたときに、関連付けられているグリッド列 の更新に使用されるドロップダウン列を指定します。 DisplayMember このプロパティは、インクリメンタルサーチに使用されるドロップダウン列の 名前を指定します。 227 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBDropDown コントロールが表示されると、DropDownOpen イベントが発生します。同様に、ユーザーが選択を行 うか、コントロールがフォーカスを失うと、DropDownClose イベントが発生します。 C1TrueDBDropDown を使ってデータを自動的に変換する 次の図のような値とそれに対応する説明テキストから成るデータを使用するグリッドドロップダウンが必要であるとします。 この場合は、意味があいまいな TypeId を表示するのではなく、理解しやすい TypeDesc をドロップダウンに表示するのが普 通です。 ValueTranslate プロパティによって、TypeId 値を TypeDesc の説明に自動的にマップできます。これにより、ユー ザーがドロップダウンにアクセスすると、TypeDesc のテキストが表示されます。 任意のドロップダウンコントロールを使用する 通常、C1TrueDBGrid のデフォルトの編集動作は、ほとんどのアプリケーションで十分な機能を果たします。しかし、必要に応 じて、この動作をカスタマイズすることもできます。便利なテクニックの1つは、ドロップダウンリスト、コンボボックス、または他 の C1TrueDBGrid コントロールを使用して、有効な値のリストから値を選択できるようにすることです。TrueDBGridでは、事実 上任意の .NET コントロールまたはサードパーティのコントロールを使用して、簡単にこれを実行できます。以下に一般的なア プローチを示します。また、実用的な例はチュートリアル チュートリアル9: 任意のドロップダウンコントロールをグリッドセルに結び付ける 任意のドロップダウンコントロールをグリッドセルに結び付けるにあ ります。 一般に、C1TrueDBGrid の標準エディタの代わりにドロップダウンリストまたはコンボボックスを表示するには、次の手順に従 います。 1. ユーザーがセルを編集するたびに、C1TrueDBGrid はBeforeColEdit イベントを発生させます。デフォルトの編集処 理を上書きするには、Cancel 引数を True に設定することで、C1TrueDBGrid のデフォルトエディタをキャンセルしま す。また、代わりの編集コントロールを表示するためのコードを BeforeColEdit に置きます。通常は、グリッドと同じ フォーム上に代わりの編集コントロールやドロップダウンを配置し、必要があるまで非表示にしておきます。 2. BeforeColEdit が発生した場合は、編集対象のセルの正確な座標を決定するために、5つのプロパティと1つのメソッ ドを使用できます。これらのプロパティは、Left (グリッドと列)、Top (グリッドと列)、CellTop (複数ライン表示の列の み)、Width (列のみ)、およびRowHeight(グリッドのみ)です。メソッドは RowTop (グリッドのみ)です。これらのプ ロパティやメソッドを使用すると、独自の編集コントロールやドロップダウンをグリッドセルの位置に基づいて配置できま す。たとえば、次のコードを使用して、ListBox コントロールをセルの右に配置し、セルの上の境界線に揃えることがで きます。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_BeforeColEdit(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.BeforeColEditEventArgs) Handles C1TrueDBGrid1.BeforeColEdit Dim r As Rectangle = Me.C1TrueDBGrid1.Splits(0).GetCellBounds(Me.C1TrueDBGrid1.Row, e.ColIndex) r = Me.C1TrueDBGrid1.RectangleToScreen(r) r = Me.RectangleToClient(r) Me.ListBox1.Left = r.Left 228 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Me.ListBox1.Top = r.Bottom End Sub C#コードの書き方 C# private void c1TrueDBGrid1_BeforeColEdit(object sender, C1.Win.C1TrueDBGrid.BeforeColEditEventArgs e) { Rectangle r = this.c1TrueDBGrid1.Splits[0].GetCellBounds(this.c1TrueDBGrid1.Row, e.ColIndex); r = this.c1TrueDBGrid1.RectangleToScreen(r); r = this.RectangleToClient(r); this.ListBox1.Left = r.Left; this.ListBox1.Top = r.Bottom; } 3. 選択された値を編集された列のText プロパティまたは Value プロパティに割り当てることによって編集処理を完了す るコードをドロップダウンまたはコンボボックスに置く必要があります。 ただし、グリッドの MarqueeStyle プロパティが 6 - MarqueeEnum.FloatingEditorの値(デフォルト)に設定されている場 合、この方法は使用できません。フローティングエディタマーキーが使用されている場合は、ユーザーがセルを変更するまで BeforeColEdit イベントが発生しません。しかし、次の項で説明するように、組み込み列ボタン機能を使ってドロップダウンを アクティブにする方法があります。 他のMarqueeStyle 設定については、現在の行またはセルを強調表示する 現在の行またはセルを強調表示するを参照してください。グリッドセルから ListBox コ ントロールをドロップダウンする例は、チュートリアル チュートリアル9: 任意のドロップダウンコントロールをグリッドセルに結び付ける 任意のドロップダウンコントロールをグリッドセルに結び付けるにありま す。 組み込み列ボタンを使用する セルからコントロールをドロップダウンする別の方法として、TrueDBGrid for WinForms の組み込み列ボタン機能を使用す る方法があります。列のButton プロパティを True に設定すると、現在のセルがその列内にある場合に、セルの右端にボタ ンが示されます。ボタンをクリックすると、グリッドのButtonClick イベントを発生します。ButtonClick イベント内のコードを使 用して、セルからコントロールをドロップダウンできます。このイベントを使用して、セル内で処理または計算を実行することもで きます。 詳細については、 セル内ボタン セル内ボタンを参照してください。 229 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms チュートリアル この章では、22のチュートリアルを紹介します。これらのチュートリアルは、読者が Visual Studio でのプログラミングに慣れて いること、DataSet について理解していること、一般的な連結コントロールの使用方法を理解していることを前提としています。 チュートリアルは、最初から手順ごとに説明されているため、TrueDBGrid for WinForms に関する予備知識は必要ありませ ん。この章で説明する手順に従えば、TrueDBGrid for WinForms のさまざまな機能を具体的に示すプロジェクトを作成 し、TrueDBGrid for WinForms の機能と使用方法について理解を深めることができます。 チュートリアルは、Access のデータベース TDBGDemo.mdb を使用します。データベースファイル TDBGDemo.mdb は C:\Program Files\Common Files\C1Studio\Data に収められています。またチュートリアルプロジェクトは製品インストール フォルダ下の次のフォルダに圧縮ファイルとして保存されています。 <User Folder>\C1TrueDBGrid\STutorials\C1TrueDBGrid_Tutorials_VB.Zip <User Folder>\C1TrueDBGrid\STutorials\C1TrueDBGrid_Tutorials_CS.Zip Visual Basic または C# でチュートリアルプロジェクトを実行し、コードを確認し、自分で変更を加えてみてください。これ が、TrueDBGrid for WinForms のすべての能力を十分に理解するための近道です。TrueDBGrid for WinForms を使用 して、強力なデータベースアプリケーションを簡単に作成できることがわかるはずです。 チュートリアルでは、データベースファイル TDBGDemo.mdb がC:\Program Files\Common Files\C1Studio\Data ディレクト リにあることを前提としています。 メモ メモ:プロジェクトおよびデータベースファイルを格納した場所によっては、データセットでTDBGDemo.mdb の参照先を 変更する必要があります。 チュートリアル チュートリアル1:C1TrueDBGrid を DataSet に連結する このチュートリアルでは、TrueDBGrid for WinForms を DataSet に連結し、完全な機能を持つデータベースブラウザを作成する 方法を学びます。TrueDBGrid for WinForms の基本のプロパティについても学びます。さらに、プログラムを実行し、実行時の グリッドの機能を確認します。 以下の手順を実行します。 1. 新しい .NET プロジェクトを開始します。 2. ツールボックスを開きます。ツールボックスは、初期設定では IDE の左側にあり、ハンマーとレンチのアイコンとして表示さ れています。ツールボックスからC1TrueDBGrid コントロールを見つけます。 C1TrueDBGrid のアイコンは次のとおりで す。C1TrueDBGrid アイコン をダブルクリックして、 、Form1 にグリッドを追加しま す。C1TrueDBGrid タスク タスクメニューが開きます。 3. C1TrueDBGrid タスク タスクメニューでデータソースの選択 データソースの選択ドロップダウン矢印を選択し、プロジェクト プロジェクト データソースの追加 データソースの追加をク リックします。 230 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 4. データ ソース構成ウィザード ソース構成ウィザードが表示され[データベース データベースが選択されています。次へ 次へをクリックします。 5. データベースを検索して接続するために、新しい接続 新しい接続ボタンをクリックします。 6. 参照 参照ボタンをクリックし C:\Program Files\Common Files\C1Studio\Data ディレクトリにある TDBGDemo.mdb を見つ けます。これを選択し、開く 開くをクリックします。 7. 接続のテスト 接続のテストボタンをクリックし、データベースまたはサーバーに正しく接続されていることを確認して、OKをクリックします。 データ接続ドロップダウンリストに新しい文字列が表示されます。 231 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 8. 次へ 次へボタンをクリックして続行します。データファイルをプロジェクトに追加して接続文字列を修正するかどうかを確認するダ イアログボックスが表示されます。いいえ いいえをクリックします。 9. 次のウィンドウでは、デフォルトで次の名前で接続を保存する 次の名前で接続を保存するチェックボックスがオンになっており、テキストボックスに自動 的に名前が入力されています。次へ 次へをクリックして続行します。 232 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 10. データベースオブジェクトの選択 データベースオブジェクトの選択ウィンドウで、データセットに必要なテーブルとフィールドを選択します。Composer テーブ ルを選択します。 データセット名 データセット名テキストボックスに、データセットのデフォルト名が表示されます。 11. 完了 完了をクリックしてウィザードを終了します。これで、フォームに DataSet、BindingSource、および TableAdapter が表示 されます。 12. グリッドをリサイズして、フォームをダブルクリックします。Visual Studio が Form_Load イベントに次のコードを追加してい ることがわかります。 Visual Basic コードの書き方 Visual Basic Me.ComposerTableAdapter.Fill(Me.DsComposer.Composer) C# コードの書き方 C# this.ComposerTableAdapter.Fill(this.DsComposer.Composer); 233 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 13. デザインタブをクリックしてデザインビューに切り替え、グリッドを選択します。 14. C1TrueDBGrid タスク タスクメニューを開きます。 15. 追加を有効にする 追加を有効にするおよび削除を有効にする 削除を有効にするチェックボックスを選択します。これでC1TrueDBGrid1 の AllowAddNew プ ロパティと AllowDeleteプロパティが True に設定され、ユーザーがグリッドのレコードを追加または削除できます。 プログラムを実行し、次の動作を確認します。 TrueDBGrid for WinForms は、DataSet からデータベーススキーマ情報を取得し、データベーステーブルに含まれるす べてのフィールドを表示するように自動的に自分自身を設定します。フィールド名がデフォルトの列ヘッダとして使用されま す。 TrueDBGrid for WinForms は、自動的に DataSet と通信します。DataSet に対して行われたすべての操作がグリッド に反映されます。 わずか4行の簡単なコードを記述するだけで、完全な機能を持つデータベースブラウザを作成できます。 実行時の操作 実行時の操作を参照し、実行時にグリッドを移動、編集、および設定する手順を試してみてください。 プログラムを終了するには、ウィンドウを閉じるか、Visual Basic のツールバーのデバッグの停止 デバッグの停止ボタンをクリックします。 おめでとうございます。これでチュートリアル 1 は終了です。 チュートリアル チュートリアル2:C1TrueDBGrid で SQL クエリーの結果を使用する TrueDBGrid for WinForms の重要な機能として、実行時にデータベースに対する変更を自動的に検出できることがありま す。このチュートリアルでは、TrueDBGrid for WinFormsを使用して、アドホックなSQLクエリーの結果を表示する方法を学び ます。さらに、実行中にデータセットへの接続をセットアップする方法について簡単に説明します。設計時に列のプロパティを 特に定義しなくても、グリッドが自動的にフィールドレイアウトの変更に応答できることに注意してください。レイアウトがすでに 定義されている場合は、グリッドのフィールドのクリア フィールドのクリアコンテキストメニューコマンドを使って削除します。これにより、実行時に グリッドが自動的に自分自身を設定します。 以下の手順を実行します。 1. 新しい.NET プロジェクトを開始します。 2. C1TrueDBGrid 、コマンドボタンおよびテキストボックスをフォームに配置します。コマンドボタンの Text プロパティ をSQL文実行 文実行に変更し、テキストボックスの Text プロパティをSQL文: 文:に設定します。 234 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 3. C1TrueDBGrid タスク タスクメニューで、データソースの選択 データソースの選択ドロップダウン矢印をクリックし、ドロップダウンボックスからプロ プロ ジェクトのデータソースの追加 ジェクトのデータソースの追加リンクを選択します。 データソース構成ウィザード データソース構成ウィザードが表示されます。データソースの種類 データソースの種類 の選択 の選択ページ上で選択されているデフォルト設定であるデータベース データベースをそのままにして、次へ 次へをクリックします。新しい 新しい 接続 接続ボタンをクリックし、新しい接続を作成するか、ドロップダウンリストから1つ選択します。データベースオブジェクト データベースオブジェクト の選択 の選択ページで、Customers テーブルを選択し、すべてのフィールドを含めます。データセット名 データセット名ボックスに DsCustomers と入力し、完了 完了をクリックしてウィザードを終了します。新しいデータソースをプロジェクトに追加する方 法については、手順 手順 2::DataSet への C1TrueDBGrid の連結 の連結を参照してください。 4. VisualStudio は、Form_Load イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.CustomersTableAdapter.Fill(Me.DsCustomers.Customers) C# コードの書き方 C# this.CustomersTableAdapter.Fill(this.DsCustomers.Customers); 5. Button1 の Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sqlStr As String = TextBox1.Text Dim da as Oledb.OleDbDataAdapter = New Oledb.OleDbDataAdapter (sqlStr, Me.CustomersTableAdapter.Connection) Dim ds As DataSet = New DataSet() ds.Clear() Try 235 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms da.Fill(ds, "クエリー結果") Me.C1TrueDBGrid1.DataSource = Nothing Me.C1TrueDBGrid1.ClearFields() Me.C1TrueDBGrid1.SetDataBinding(ds.Tables("mySQL"), "", False) Catch MessageBox.Show("SQL文のエラー") End Try End Sub C# コードの書き方 C# private void button1_Click(System.object sender, { System.EventArgs e) string sqlStr = TextBox1.Text; da as Oledb.OleDbDataAdapter = New Oledb.OleDbDataAdapter (sqlStr, this.CustomersTableAdapter.Connection); DataSet DataSet ds = new DataSet(); ds.Clear(); try { da.Fill(ds, "クエリー結果"); this.c1TrueDBGrid1.DataSource = null; this.c1TrueDBGrid1.ClearFields(); this.c1TrueDBGrid1.SetDataBinding(ds.Tables["mySQL"], "", false); } catch () { MessageBox.Show ("SQL文のエラー"); } } プログラムを実行し、動作を確認します。 チュートリアル チュートリアル1:C1TrueDBGrid を DataSet に連結する に連結すると同様に、TrueDBGrid for WinForms は、DataSet からデータベー ススキーマ情報を取得し、データベーステーブル内のすべてのフィールドのデータを表示するように自動的に自分自身を設定 します。フィールド名がデフォルトの列ヘッダとして使用されます。 1. TextBox コントロールに次のSQL文を追加します: Select * from Customer SQLの実行 の実行コマンドボタンを押します。デフォルト表示と同様にCustomerテーブルのすべてのフィールドが表示されま す。 2. TextBox コントロールに次のSQL文を追加します。 Select Company from Customer SQLの実行 の実行ボタンを押します。グリッドにCompanyフィールドに属する会社名 会社名列が表示されます。 3. TextBox コントロールに以下のSQL文を追加します: 236 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Select LastName, Company from Customer SQLの実行 の実行コマンドボタンを押します。上のSQL文と同様にグリッドに指定された列(この場合はCompanyフィールドに 属する会社 会社列とLastNameフィールドに属する姓 姓列)が表示されます。 4. TextBox コントロールに以下のSQL文を追加します: Select Count(*) from Customer SQLの実行 の実行コマンドボタンを押します。上のSQL文をは、集計関数、Count(*)::SQLを使用して、Customer テーブルの レコードの合計数を返します。SQL の結果が一連のれ湖度ではなくても、リストの1つの列にレコードの数が正しく表示 されます。デフォルトでは、列ヘッダとしてExpr1000が使用されます。これは、式の結果が表示されていることを表示し ます。 5. TextBox コントロールに以下のSQL文を追加します: Select UCase(LastName) as ULAST, UCase(FirstName) AS UFIRST from Customer SQLの実行 の実行コマンドボタンを押します。上のSQL文は名前 名前フィールドと姓 姓フィールドを大文字で表示する2つの計算列を 生成します。また、列ヘッダには、(割り当てられた)計算列名として ULAST と UFIRST が表示されます。 6. TextBox コントロールに以下のSQL文を追加します: SELECT * FROM Customer WHERE FirstName = "Jerry" SQLの実行 の実行コマンドボタンを押します。上のSQL文は、名前 名前列がJerryであるレコードだけを表示します。 7. TextBox コントロールに以下のSQL文を追加します: SELECT * FROM Customer ORDER BY LastName SQLの実行 の実行コマンドボタンを押します。上のSQL文は、姓 姓フィールドのアルファベット順でレコードを表示します。 SQL 文を使用して、2つのデータベーステーブルを結合することもできます。チュートリアル チュートリアル3: 複数の C1TrueDBGrid コント ロールをリンクする ロールをリンクするを参照してください。 これでチュートリアル 2は終了です。 チュートリアル チュートリアル3: 複数の C1TrueDBGrid コントロールをリンクする このチュートリアルは、マスター/詳細データセットを使用して、複数の TrueDBGrid for WinForms をリンクする方法を示し ます。 以下の手順を実行します。 1. 新しい .NET プロジェクトを開始します。 2. 2つの C1TrueDBGrid コントロール(C1TrueDBGrid1 と C1TrueDBGrid2)をフォームに追加します。 3. C1TrueDBGrid タスク タスクメニューで、データソースの選択 データソースの選択ドロップダウン矢印をクリックし、ドロップダウンボックスからプロ プロ ジェクトのデータソースの追加 ジェクトのデータソースの追加リンクを選択します。 4. データソース構成ウィザード データソース構成ウィザードが表示されます。データソースの種類の選択 データソースの種類の選択ページ上で選択されているデフォルト設定で あるデータベース データベースをそのままにして、次へ 次へをクリックします。新しい接続 新しい接続ボタンをクリックし、新しい接続を作成するか、ド ロップダウンリストから1つ選択します。データベースオブジェクトの選択 データベースオブジェクトの選択ページで、Composer テーブルおよび Opus を選択し、すべてのフィールドを含めます。データセット名 データセット名ボックスに DsMasterDetail と入力し、完了 完了をクリックして ウィザードを終了します。新しいデータソースをプロジェクトに追加する方法については、手順 手順 2::DataSet への C1TrueDBGrid の連結 の連結を参照してください。 5. ソリューションエクスプローラウィンドウで DsMasterDetail.xsd をダブルクリックしてリレーションシップをデザイナで作 成または編集します。DsMasterDetail.xsd が開き、次のように表示されます。 237 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 6. 2つのテーブルのリレーションシップを作成するには、ComposerテーブルのLastフィールドの横にある領域をマウスボ タンでクリックし、マウスをComposerテーブルからOpusテーブルの列までドラッグします。Lastフィールドの横にある領 域でマウスを放します。これで、リレーションシップダイアログボックスが開きます。 親テーブルと子テーブルはそれぞれComposerとOpusに設定されていることを確認します。両方のキーフィールド がLastおよび[作成する制約の選択]は〈リレーションシップのみ〉に設定されていることを確認します(上の図を参照 上の図を参照)。 〈OK〉をクリックし、リレーションシップダイアログボックスを終了します。 7. .NET の[ビルド ビルド]メニューへ移動し、[ソリューションのビルド ソリューションのビルド]を選択します。これで、この新しい関係がプロジェクト内で 有効になります。 8. ツールボックスの<プロジェクト名>コンポーネントタブからDsMasterDetail、ComposerTableAdapterおよ びOpusTableAdapterの新しいインスタンスをフォームに追加します。 9. Visual Studio のプロパティウィンドウで、C1TrueDBGrid1の C1TrueDBGrid の DataSource プロパティを 238 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms DsMasterDetail1 に、DataMember プロパティをComposerに設定します。 列レイアウトの置き換えについて確認ダイアログが出たら、はい はいをクリックします。 10. C1TrueDBGrid2の TrueDBGrid では、DataSource プロパティを DsMasterDetail1 に、DataMember プロパティ をComposer.Composer_Opusに設定します。 列レイアウトの置き換えについて確認ダイアログが出たら、はい はいをクリックします。 11. 次に、DataAdapter にデータを挿入します。 12. Form1 をダブルクリックしてコードビューにて、Form_Loadイベントのハンドラーを作成し、Load イベントに次のコード を追加します。 Visual Basic コードの書き方 Visual Basic Me.ComposerTableAdapter1.Fill(Me.DsMasterDetail1.Composer) Me.OpusTableAdapter1.Fill(Me.DsMasterDetail1.Opus) C# コードの書き方 C# this.composerTableAdapter1.Fill(this.dsMasterDetail1.Composer); this.opusTableAdapter1.Fill(this.dsMasterDetail1.Opus); プログラムを実行し、動作を確認します。 Form1 がロードされると、C1TrueDBGrid1 と C1TrueDBGrid2 は、DsMasterDetail1 からデータベーススキーマ情 報を取得します。 239 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 最初のグリッドの別の行をクリックして、現在のレコードの位置を変更します。 C1TrueDBGrid1マスターグリッド マスターグリッドで行が 変更されるたびに、C1TrueDBGrid2詳細グリッド 詳細グリッドが、新しいレコードセットを表示するように自分自身を設定することを 確認してください。 これでチュートリアル 3は終了です。 チュートリアル チュートリアル4: コードや他の連結コントロールと対話する このチュートリアルでは、True DBGrid が、グリッドの連結先と同じ DataSet を操作する Visual Basic コードや他の連結コント ロールと対話するしくみを学びます。 以下の手順を実行します。 1. 新しい .NET プロジェクトを開始します。 2. 次の図のように、フォーム( Form1 )にコントロールを配置します。配置するコントロールは C1TrueDBGrid コントロール( C1TrueDBGrid1 ) ListBox コントロール( ListBox1 ) 3つのテキストコントロール( TextBox1~3 ) 7つのボタン( Button1~7 ) および4つのラベル( Label1~4 )です。 次の図のように、ラベルとボタンのテキストプロパティを設定します。 240 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 3. C1TrueDBGrid タスク タスクメニューで、〈データソースの選択 データソースの選択〉ドロップダウン矢印をクリックし、ドロップダウンボックスから [プロジェクトのデータソースの追加 プロジェクトのデータソースの追加]リンクを選択します。 [データソース構成ウィザード データソース構成ウィザード]が表示されます。[データソー データソー スの種類の選択 スの種類の選択]ページ上で選択されているデフォルト設定である[データベース]をそのままにして、〈次へ〉をクリック します。〈新しい接続 新しい接続〉ボタンをクリックし、新しい接続を作成するか、ドロップダウンリストから1つ選択します。[データ データ ベースオブジェクトの選択 ベースオブジェクトの選択]ページで、Customers テーブルを選択し、すべてのフィールドを含めます。[データセット 名]ボックスに DsCustomers と入力し、〈完了 完了〉をクリックしてウィザードを終了します。新しいデータソースをプロジェク トに追加する方法については、「手順 手順 2::DataSet への C1TrueDBGrid の連結 の連結」を参照してください。 4. Visual Studio は、Form_Load イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.CustomersTableAdapter.Fill(Me.DsCustomers.Customers) C# コードの書き方 C# this.CustomersTableAdapter.Fill(this.DsCustomers.Customers); 5. 上の図の右上にある4つのボタン(Button4、5、6、7)に、それぞれ次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub btnFirst_Click(ByVal sender As System.Object, System.EventArgs) Handles btnFirst.Click ByVal e As ' カレントレコードをグリッドの先頭に移動します。 Me.C1TrueDBGrid1.MoveFirst() 241 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms End Sub Private Sub btnNext_Click(ByVal sender As System.Object, System.EventArgs) Handles btnNext.Click ByVal e As ' カレントレコードをグリッドの次の行に移動します。 Me.C1TrueDBGrid1.MoveNext() End Sub Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click ' カレントレコードをグリッドの前の行に移動します。 Me.C1TrueDBGrid1.MovePrevious() End Sub Private Sub btnLast_Click(ByVal sender As System.Object, System.EventArgs) Handles btnLast.Click ByVal e As ' カレントレコードをグリッドの末尾に移動します。 Me.C1TrueDBGrid1.MoveLast() End Sub C# コードの書き方 C# private void btnFirst_Click(System.object sender, { // カレントレコードをグリッドの先頭に移動します。 this.c1TrueDBGrid1.MoveFirst(); } private void btnNext_Click(System.object sender, { // カレントレコードをグリッドの次の行に移動します。 this.c1TrueDBGrid1.MoveNext(); } System.EventArgs e) System.EventArgs e) private void btnPrevious_Click(System.object sender, { // カレントレコードをグリッドの前の行に移動します。 this.c1TrueDBGrid1.MovePrevious(); } private void btnLast_Click(System.object sender, { // カレントレコードをグリッドの末尾に移動します。 this.c1TrueDBGrid1.MoveLast(); } System.EventArgs e) System.EventArgs e) 6. 上の図の右上にある3つのボタン(Button1、2、3)に、それぞれ次のコードを追加します。 Visual Basic コードの書き方 242 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click ' グリッドを更新し、データベースに変更データを保存します。 Me.C1TrueDBGrid1.Delete() Call UpdateCustomers() End Sub Private Sub BtnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click ' カレントレコードを削除し、データベースに変更データを保存します。 Me.C1TrueDBGrid1.UpdateData() Call UpdateCustomers() End Sub Private Sub BtnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click Me.C1TrueDBGrid1.MoveLast() ' Me.C1TrueDBGrid1.Row = Me.C1TrueDBGrid1.Row + 1 Me.C1TrueDBGrid1.Select() End Sub C# コードの書き方 C# private void btnDelete_Click(System.object sender, { // グリッドを更新し、データベースに変更データを保存します。 this.c1TrueDBGrid1.Delete(); UpdateCustomers(); } System.EventArgs e) private void BtnUpdate_Click(System.object sender, System.EventArgs e) { // カレントレコードを削除し、データベースに変更データを保存します。 this.c1TrueDBGrid1.UpdateData(); UpdateCustomers(); } private void BtnAdd_Click(System.object sender, { // System.EventArgs e) this.c1TrueDBGrid1.MoveLast(); 243 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms // Move to the "addnew row", and set focus to the grid. this.c1TrueDBGrid1.Row = this.c1TrueDBGrid1.Row + 1; this.c1TrueDBGrid1.Select(); } 7. UpdateCustomers サブルーチンを追加します。このコードでは、一時的なデータテーブルからデータセットに情報を戻 しています。 Visual Basic コードの書き方 Visual Basic Private Sub UpdateCustomers() Me.CustomersTableAdapter.Connection.Open() Dim UpdatedRows As System.Data.DataSet Dim InsertedRows As System.Data.DataSet Dim DeletedRows As System.Data.DataSet ' 前回データを保存した以降にデータセットに対して行われたすべての変更を取得します。 UpdatedRows = Me.DsCustomers.GetChanges(DataRowState.Modified) InsertedRows = Me.DsCustomers.GetChanges(DataRowState.Added) DeletedRows = Me.DsCustomers.GetChanges(DataRowState.Deleted) Try ' 変更データを保存します。 If Not UpdatedRows Is Nothing Then Me.CustomersTableAdapter.Update(UpdatedRows) If Not InsertedRows Is Nothing Then Me.CustomersTableAdapter.Update(InsertedRows) If Not DeletedRows Is Nothing Then Me.CustomersTableAdapter.Update(DeletedRows) Catch eUpdate As System.Exception MessageBox.Show ("Caught exception: " & eUpdate.Message) End Try Me.CustomersTableAdapter.Connection.Close() End Sub C# コードの書き方 C# private void UpdateCustomers() { this.CustomersTableAdapter.Connection.Open(); System.Data.DataSet UpdatedRows; System.Data.DataSet InsertedRows; System.Data.DataSet DeletedRows; //前回データを保存した以降にデータセットに対して行われたすべての変更を取得します。 UpdatedRows = this.DsCustomers.GetChanges(DataRowState.Modified); InsertedRows = this.DsCustomers.GetChanges(DataRowState.Added); DeletedRows = this.DsCustomers.GetChanges(DataRowState.Deleted); 244 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms try { // 変更データを保存します。 if (! UpdatedRows == null ) this.CustomersTableAdapter.Update(UpdatedRows) if (! InsertedRows == null ) this.CustomersTableAdapter.Update(InsertedRows) if (! DeletedRows == null ) this.CustomersTableAdapter.Update(DeletedRows) } catch (System.Exception eUpdate) { MessageBox.Show ("Caught exception: " + eUpdate.Message); } this.CustomersTableAdapter.Connection.Close(); } 8. .NET のデザイナに戻り、ListBox1 コントロールをクリックします。Visual Studio のプロパティウィンドウ で、DataSource プロパティを customersBindingSource に、DisplayMember プロパティをLastNameに設定しま す。 9. フォームの最初のテキストボックスTextBox1をクリックします。Visual Studio のプロパティウィンドウ で、DataBindings オブジェクトを展開します。DataBindings オブジェクトの下の Text プロパティを customersBindingSource - FirstNameに設定します。同様に、残りの6つのテキストボックス TextBox で、対応す る DataBindings オブジェクトの下の Text プロパティを設定します。 10. 最後に、Visual Studio のプロパティウィンドウで、、C1TrueDBGrid の AllowAddNew, AllowDelete, and AllowUpdate の各プロパティを True に設定します。 プログラムを実行し、次の動作を確認します。 マウスまたはキーボードを使ってグリッドの現在の行の位置を変更します。コードをまったく記述しなくても、他の連結コ ントロールListBox1とテキストボックス)のレコードの位置がグリッドと一緒に変わることを確認してください。 次、前 前、最後 最後、最初 最初の各コマンドボタンをクリックして、Data コントロールの対応するボタンと同じ機能を持つことを確認 してください。 グリッドの特定の行にあるいくつかのセルのデータを変更します。保存 保存ボタンをクリックします。変更されたデータは データベースで更新され、レコードセレクタ列の鉛筆アイコンが消えます。フォームにある他の連結コントロールは更新 されたデータを表示します。 1つ以上のテキストコントロールのデータを変更します。保存または次ボタンをクリックします。グリッドは自動的にデー タを更新し、変更を反映します。 削除するレコードにグリッドの現在のセルを移動します。削除 削除コマンドボタンをクリックします。そのレコードがグリッドか ら削除されて消えます。グリッドの現在の行は、削除されたレコードの次のレコードに自動的に移動します。フォーム上 の他の連結コントロールも応答して、レコードの位置が移動します。 これでチュートリアル 4 は終了です。 チュートリアル チュートリアル5: ブックマークを使って複数の行を選択する このチュートリアルでは、指定された基準を満たすレコードを選択および強調表示する方法を学びます。True DBGrid では、 一般に、似たアイテムのグループがコレクションとして実装されています。True DBGrid でアイテムのグループを操作する場 合は、ここで説明するテクニックと同様の方法を使用します。 以下の手順を実行します。 1. 新しい .NET プロジェクトを開始します。 2. IDEの左側のツールボックスから、フォームに C1TrueDBGrid オブジェクト、コンボボックス、およびコマンドボタンを配 置します。The C1TrueDBGrid icon looks like this: 245 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 3. Button1 の Text プロパティを「選択 選択」に設定します。 4. C1TrueDBGrid タスク タスク]メニューで、〈データソースの選択 データソースの選択〉ドロップダウン矢印をクリックし、ドロップダウンボックスから [プロジェクトのデータソースの追加 プロジェクトのデータソースの追加]リンクを選択します。 [データソース構成ウィザード データソース構成ウィザード]が表示されます。[データソー データソー スの種類の選択 スの種類の選択]ページ上で選択されているデフォルト設定である[データベース データベース]をそのままにして、〈次へ 次へ〉をクリック します。〈新しい接続 新しい接続〉ボタンをクリックし、新しい接続を作成するか、ドロップダウンリストからTDBGrid.mdb を選択し ます。[データベースオブジェクトの選択 データベースオブジェクトの選択]ページで、Composers テーブルを選択し、すべてのフィールドを含めます。 [データセット名 データセット名]ボックスに DsComposers と入力し、〈完了 完了〉をクリックしてウィザードを終了します。 新しいデータソー スをプロジェクトに追加する方法については、「手順 手順 2::DataSet への C1TrueDBGrid の連結 の連結」を参照してください。 5. プログラムを実行し、次の動作を確認します。 Visual Basic コードの書き方 Visual Basic Me.ComposerTableAdapter.Fill(Me.DsComposer.Composer) C# コードの書き方 C# this.ComposerTableAdapter.Fill(this.DsComposer.Composer); 6. SelectedRowCollectionを操作することで、TrueDBGrid for WinForms 内の行を簡単に選択したり、選択を解除す ることができます。行を選択するには、Button1 の Click イベントに次のコードを入力します。 Visual Basic コードの書き方 Visual Basic Dim l As Integer For l = 0 To Me.DsComposer.Composer.Rows.Count - 1 If Me.DsComposer.Composer.Rows(l).Item("Country") = "Germany" Then Me.C1TrueDBGrid1.SelectedRows.Add(l) End If 246 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Next Me.C1TrueDBGrid1.Refresh() C# コードの書き方 C# int l; for (l = 0 ; l < this.DsComposer.Composer.Rows.Count; l++) { if (this.DsComposer.Composer.Rows[l].["Country"] == "Germany") { this.c1TrueDBGrid1.SelectedRows.Add(l); } } this.c1TrueDBGrid1.Refresh(); 7. 行の選択を解除するために、Button2 の Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.SelectedRows.Clear() C# コードの書き方 C# this.c1TrueDBGrid1.SelectedRows.Clear(); プログラムを実行し、次の動作を確認します。 C1TrueDBGrid1 は、DataSet からデータベーススキーマ情報を取得し、結合されたデータベーステーブル内のすべ てのフィールドを表示するように自動的に自分自身を設定します。これも、チュートリアル 1のグリッドの動作と同じで す。 選択ボタンをクリックします。「国名 国名」:Germany に該当するすべてのレコードが強調表示されます。 強調表示されたレコードの選択を解除するには、[クリア クリア]ボタンをクリックするか、任意のセルをクリックします。 247 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms これでチュートリアル 5 は終了です。 チュートリアル チュートリアル6: 連結グリッド内で非連結列を定義する このチュートリアルでは、UnboundColumnFetch イベントを使用して、1つの列に2つのフィールド( FirstName と LastName )を一緒に表示する方法を学びます。また、SQL 文を使用して、データベース内の2つのテーブルを結合する方法を学びます。 このチュートリアルでセットアップしたプロジェクトは、チュートリアル 7~12 でも使用します。. 以下の手順を実行します。 1. 新しい .NET プロジェクトを開始します。 2. IDE の左側のツールボックスから、フォームにC1TrueDBGrid オブジェクトを配置します。 3. C1TrueDBGrid タスク タスクメニューで、データソースの選択 データソースの選択 ドロップダウン矢印をクリックし、ドロップダウンボックスから プ ロジェクトのデータソースの追加 ロジェクトのデータソースの追加リンクを選択します。データソース構成ウィザード データソース構成ウィザードが表示されます。データソースの種 類の選択]ページ上で選択されているデフォルト設定である[データベース]をそのままにして、〈次へ〉をクリックしま す。〈新しい接続〉ボタンをクリックし、新しい接続を作成するか、ドロップダウンリストから1つ選択します。[データベー スオブジェクトの選択]ページで、Contacts テーブルを選択し、すべてのフィールドを含めます。[データセット名]ボック スに DsContacts と入力し、〈完了〉をクリックしてウィザードを終了します。新しいデータソースをプロジェクトに追加す る方法については、「手順 2:DataSet への C1TrueDBGrid の連結」を参照してください。 4. デザイナで DsContacts.xsd を編集するには、ソリューションエクスプローラでファイルをダブルクリックします。 Contacts テーブルを右クリックし、コンテキストメニューから[構成]を選択します。 5. テーブルアダプタ設定ウィザードで、SQL 文字列を SELECT Customers.FirstName, Customers.LastName, Customers.CustType, Contacts.ContactType, Contacts.Callback, Contacts.ContactDate, Contacts.UserCode, Customers.UserCode AS Expr1 FROM Contacts INNER JOIN Customers ON Contacts.UserCode = Customers.UserCodeに変更します。 6. Contactsテーブルは、Customers テーブルに結合されました。[完了]をクリックしてウィザードを終了します。 7. デザインビューに戻ります。既存の列のレイアウトを置き換えるかどうかを確認するプロンプトが表示された場合は、 [はい]をクリックします。 メモ メモ: C1TrueDBGridにすべての列が表示されない場合は、データソースを ’なし’ に設定して、もう一度、ドロップダウン メニューから[DataSource]を選択してください。 8. Form1に新しいglobal DataTable オブジェクトを宣言します。 Visual Basic コードの書き方 Visual Basic Dim dtCopy As New DataTable C# コードの書き方 C# DataTable dtCopy = new DataTable; 9. Form_Loadイベントに次のコードを追加します。1行目は、データセットにデータを挿入します。2行目は、このデータ セットのコピーを作成します。これを後で使用して、非連結列にデータを挿入します。 Visual Basic コードの書き方 Visual Basic Me.ContactsTableAdapter.Fill(Me.DsContacts.Contacts) dtCopy = Me.DsContacts.Tables(0).Copy() 248 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# this.ContactsTableAdapter.Fill(this.DsContacts.Contacts); dtCopy = this.DsContacts.Tables(0).Copy(); 10. 非連結列を作成するには、プロパティウィンドウで、Columns プロパティの横にある省略符ボタンをクリックして、 C1TrueDBGrid デザイナを開きます。次に、〈列を挿入〉ボタンをクリックして列を作成し、Caption プロパティを Name に設定します。Caption フィールドには値があるが、DataField には値がないことに注意してください。これで、 C1TDBGrid はこの列を非連結列であると認識し、UnboundColumnFetch イベントを発生させます。 11. Visual Studio のプロパティウィンドウで Splits プロパティの横にある省略符ボタンをクリックして、SplitCollection エ ディタを開きます。DisplayColumns プロパティの横にある省略符ボタンをクリックして、C1DisplayColumnCollection エディタを開きます。このエディタで、作成した非連結列を見つけ、Visible プロパティを True に設定します。これで、こ の非連結列は、TrueDBGrid for WinForms コントロールだけにではなく、エンドユーザーにも表示されるようになりま す。非連結列で特定の列を非表示に設定できます。左ペインで FirstName 列を選択し、右ペインにある Visible プロパ ティを False に設定します。これで、FirstName 列は表示されません。LastName 列を選択し、同じ動作を繰り返しま す。 12. UnboundColumnFetchイベントに次のコードを追加します。このコードは、dtCopy を使用して e.Value に設定されて いる値を収集し、それらを非連結列に配置します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_UnboundColumnFetch(ByVal sender As System.Object, ByVal e As C1.Win.C1TrueDBGrid.UnboundColumnFetchEventArgs) Handles C1TrueDBGrid1.UnboundColumnFetch If e.Column.Caption = "Name" AndAlso e.Row < dtCopy.Rows.Count Then e.Value = Me.C1TrueDBGrid1(e.Row, "FirstName").ToString + " " + Me.C1TrueDBGrid1(e.Row, "LastName").ToString End If End Sub C# コードの書き方 C# private void c1TrueDBGrid1_UnboundColumnFetch(object sender, C1.Win.C1TrueDBGrid.UnboundColumnFetchEventArgs e) { if(e.Column.Caption == "Name" && e.Row < dtCopy.Rows.Count) { e.Value = this.c1TrueDBGrid1[e.Row, "FirstName"].ToString()+ " " + this.c1TrueDBGrid1[e.Row, "LastName"].ToString(); } } プログラムを実行し、次の動作を確認します。 アプリケーションを実行すると、次のように表示されます。 249 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid1 には、設計時に設定された5つの列に基づいて、結合されたテーブルのデータが表示されます。 最初の列には、UnboundColumnFetch イベントで定義されているように、「FirstName」フィールドと「LastName」 フィールドが一緒に表示されます。 「顧客タイプ 顧客タイプ」、「連絡先タイプ 連絡先タイプ」、「連絡済 連絡済」の各列には、ユーザーにとってわかりにくい値が表示されています。データ の外見も見栄えがするものではありません。次の3つのチュートリアル(7、8、9)では、データの表示方法とユーザー インタフェースを改善する方法について説明します。 これでチュートリアル 6 は終了です。 チュートリアル チュートリアル7: 組み込みコンボを使って変換データを表示する このチュートリアルでは、ValueItems オブジェクトを使用して、変換されたテキストを表示したり、グリッドの組み込みドロップ ダウンコンボボックスを使用する方法を学びます。1行のコードも書くことなくこれらすべてを実現できます。 以下の手順を実行します。 1. チュートリアル6: 連結グリッド内で非連結列を定義するで作成したプロジェクトから始めます。 2. C1TrueDBGrid にフォーカスがあることを確認し、VisualStudio のプロパティウィンドウで、Columns プロパティの横 にある〈〈…〉〉ボタンをクリックします。 C1TrueDBGrid デザイナ デザイナが表示されます。 3. 顧客タイプ 顧客タイプ」列メンバを選択します。次に、左ペインで、ValueItems プロパティの横にある展開アイコンをクリックしま す。これで、ValueItems オブジェクトのすべてのメンバが表示されます。 4. 同じく ValueItems ノードの下の Values プロパティの横にある〈…〉ボタンをクリックします。ValueItemCollection エ ディタ ディタが表示されます。 5. 新しい ValueItem オブジェクトを5つ追加します。 ValueItem には、DisplayValue と Value の2つのプロパティがある ことがわかります。 6. 次の DisplayValue/Value のペアを入力し、ValueItemsCollection エディタを閉じます。 DisplayValue Value Value 0 Prospective 1 Normal 2 250 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms DisplayValue Value Buyer 3 Distributor 4 Other 5 プログラムを実行し、次の動作を確認します。 アプリケーションを実行すると、次のように表示されます。 これでチュートリアル 7 は終了です。 チュートリアル チュートリアル8: ドロップダウンコントロールをグリッドセルに結び付 ける このチュートリアルでは、複数列の C1TrueDBDropDown コントロールをグリッドセルに結び付ける方法を学びます。 チュー トリアル トリアル7: 組み込みコンボを使って変換データを表示する で説明した組み込みコンボボックスとは異なり、 C1TrueDBDropDown コントロールは、データソースに連結できます。これは、二次的なルックアップテーブルを使用する データ入力に最適です。このドロップダウンコントロールは、現在のセル内にあるボタンをクリックするたびに表示されます。こ のボタンは、ユーザーがドロップダウンコントロールの接続先の列にフォーカスを与えると自動的に表示されます。 以下の手順を実行します。 1. チュートリアル チュートリアル6: 連結グリッド内で非連結列を定義する で作成したプロジェクトから始めます。 2. C1TrueDBDropDown コントロール(C1TrueDBDropDown1)をフォームに追加します。C1TrueDBDropDown のア イコンは次のとおりです。 3. C1TrueDBDropdown タスク タスクメニューで、データソースの選択 データソースの選択ドロップダウン矢印をクリックし、ドロップダウンボックス からプロジェクトのデータソースの追加 プロジェクトのデータソースの追加リンクを選択します。 データソース構成ウィザード データソース構成ウィザードが表示されます。データソー データソー スの種類の選択 スの種類の選択ページ上で選択されているデフォルト設定であるデータベース データベースをそのままにして、次へ 次へをクリックしま す。新しい接続 新しい接続ボタンをクリックし、新しい接続を作成するか、ドロップダウンリストからC1TDGBDemo.mdbを選択しま す。データベースオブジェクトの選択 データベースオブジェクトの選択ページで、CustType テーブルを選択し、TypeID と TypeDescのフィールドを含 めます。データセット名 データセット名ボックスに DsCustType と入力し、完了 完了をクリックしてウィザードを終了します。新しいデータ 251 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ソースをプロジェクトに追加する方法については、手順 手順 2::DataSet への C1TrueDBGrid の連結 の連結を参照してください。 4. VisualStudio はForm_Load イベントにデータセットにデータを設定するためのコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.CustTypeTableAdapter.Fill(Me.DsCustType.CustType) C# コードの書き方 C# this.CustTypeTableAdapter.Fill(this.DsCustType.CustType); 5. Form1 のLoadイベントで、C1TrueDBDropDown1 を顧客タイプ列に設定するためのコードをさらに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns("CustType").DropDown = Me.C1TrueDBDropdown1 C# コードの書き方 C# this.c1TrueDBGrid1.Columns("CustType").DropDown = this.c1TrueDBDropdown1; 6. プロパティウィンドウで、C1TrueDBDropDown1 の DisplayMember プロパティを タイプ タイプID に設定します。このプロ パティは、どの列が Dropdown の連結先のグリッド列と同期されるのかを Dropdown に通知します。 プログラムを実行し、次の動作を確認します。 C1TrueDBGrid1 には、チュートリアル チュートリアル6: 連結グリッド内で非連結列を定義する と同様に、結合されたテーブルのデー タが表示されます。 顧客タイプ 顧客タイプ列のセルをクリックして、現在のセルとして強調表示します。セルの右端にボタンが表示されます。このボタ ンをクリックして、次の図のように True DBDropDown コントロールを表示します [↑] と [↓] の各キーを使用して、True DBDropDownで強調表示されているアイテムを移動できます。グリッド内の他 のセルをクリックすると、True DBDropDown はフォーカスを失い、非表示になります。 True DBDropDown 内の任意のアイテムを選択します。グリッドの現在の列が、選択されたアイテムに更新されま 252 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms す。 True DBDropDown は、再度編集を始めるまで非表示になります。 現在の列を他の列に移動すると、顧客タイプ列 顧客タイプ列のセルからボタンが消えます。 これでチュートリアル 8 は終了です。 チュートリアル チュートリアル9: 任意のドロップダウンコントロールをグリッドセルに結び付ける このチュートリアルでは、任意のコントロールをグリッドセルからドロップダウンする方法を学びます。この例では、ユーザーがデータを簡単に入力できるように、定 義済みの入力値を含む ListBox コントロールを使用します。たとえば、現在のセルをクリックして編集を始めると、このリストがドロップダウンされます。また、セル 内にボタンを配置し、このボタンをクリックすることで ListBox コントロールを表示する方法を学びます。このチュートリアルで説明するテクニックと同様の方法で、 グリッドセルから任意のコントロールをドロップダウンできます。 以下の手順を実行します。 1. チュートリアル チュートリアル6: 連結グリッド内で非連結列を定義する で作成したプロジェクトから始めます。 2. 次の図のように、フォームに ListBox コントロール(ListBox1)を追加します。 3. ListBox1 の Visible プロパティを False に設定します。 コントロールをドロップダウンするためのコードの追加 グリッドの2列目(Column1)の CustType フィールドには、顧客タイプを表す次の1~5の数値が表示されます。 1 = 見込み客 2 = 普通 3 = 購買者 4 = 販売業者 5 = その他 ここでドロップダウンする ListBox1 には、テキストで表された顧客タイプの説明を表示し、ユーザーがアイテムの1つをダブルクリックして、対応する値をグリッド に入力できるようにします。 1. Form1 の一般宣言セクションに次のコードを追加します。これらの名前空間を追加すると、後で記述するコードが簡潔になります。 Visual Basic コードの書き方 Visual Basic Imports Imports Imports Imports System.Data System.Data.Oledb System.IO System.Collections C#コードの書き方 C# using using using using System.Data; System.Data.Oledb; System.IO; System.Collections; 2. Form1 のLoad イベントに、ListBox1 に顧客タイプを追加するためのコードを置きます。また、 Buttonプロパティを使用して、顧客タイプ列 顧客タイプ列にボタンを置き ます。これで、Form1_Load イベントハンドラは次のようになります。 Visual Basic コードの書き方 Visual Basic Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.ContactsTableAdapter.Fill(Me.DsContacts.Contacts) ' リストボックスに顧客タイプの項目を追加します。 With Me.ListBox1 253 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms .Items.Add("Prospective") .Items.Add("Normal") .Items.Add("Buyer") .Items.Add("Distributor") .Items.Add("Other") .Visible = False End With ' 「顧客タイプ」にドロップダウンボタンを設定します。 Me.C1TrueDBGrid1.Splits(0).DisplayColumns("CustType").Button = True End Sub C# コードの書き方 C# private void Form1_Load(System.object sender, System.EventArgs e) { this.ContactsTableAdapter.Fill(this.DsContacts.Contacts); //リストボックスに顧客タイプの項目を追加します。 this.listBox1.Items.Add("Prospective"); this.listBox1.Items.Add("Normal"); this.listBox1.Items.Add("Buyer"); this.listBox1.Items.Add("Distributor"); this.listBox1.Items.Add("Other"); this.listBox1.Visible = false; //「顧客タイプ」にドロップダウンボタンを設定します。 this.c1TrueDBGrid1.Splits[0].DisplayColumns["CustType"].Button = true; } 3. 顧客タイプ列 顧客タイプ列のセルが現在のセルになると、セルの右端にボタンが配置されます。このボタンをクリックすると、グリッドの ButtonClickイベントが発生しま す。ボタンがクリックされると、ListBox1がドロップダウンされるようにします。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_ButtonClick(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.ColEventArgs) Handles C1TrueDBGrid1.ButtonClick ' ドロップダウンとなるリストボックスをカレントセルの左端に配置します。 With ListBox1 .Left = Me.C1TrueDBGrid1.Left + Me.C1TrueDBGrid1.RecordSelectorWidth + Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Width + Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1).Width .Top = Me.C1TrueDBGrid1.Top + Me.C1TrueDBGrid1.RowTop(Me.C1TrueDBGrid1.Row) .Visible = True .Select() End With End Sub C# コードの書き方 C# private void c1TrueDBGrid1_ButtonClick(object sender, C1.Win.C1TrueDBGrid.ColEventArgs e) { // ドロップダウンとなるリストボックスをカレントセルの左端に配置します。 this.listBox1.Left = this.c1TrueDBGrid1.Left + this.c1TrueDBGrid1.RecordSelectorWidth + this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Width + this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Width; this.listBox1.Top = this.c1TrueDBGrid1.Top + this.c1TrueDBGrid1.RowTop(this.c1TrueDBGrid1.Row); this.listBox1.Visible = true; this.listBox1.Select(); } 4. ListBox1 の DoubleClick イベントに次のコードを追加します。このコードは、 、ListBox1 でアイテムが選択されたときに、そのアイテムのインデックスを C1TrueDBGrid1 内の適切な列にコピーし、ListBox1 を非表示にしています。 Visual Basic コードの書き方 Visual Basic 254 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick Me.C1TrueDBGrid1.Columns("CustType").Text = Me.ListBox1.SelectedIndex + 1 Me.ListBox1.Visible = False End Sub C# コードの書き方 C# private void listBox1_DoubleClick(object sender, System.EventArgs e) { this.c1TrueDBGrid1.Columns["CustType"].Text = (this.listBox1.SelectedIndex + 1).ToString(); this.listBox1.Visible = false; } 5. ListBox1 の Leave イベントに次のコードを追加します。このコードは、選択が行われたときに、リストボックスを非表示にしています。 Visual Basic コードの書き方 Visual Basic Private Sub ListBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.Leave Me.ListBox1.Visible = False End Sub C# コードの書き方 C# private void listBox1_Leave(object sender, { this.listBox1.Visible = false; } System.EventArgs e) 6. C1TrueDBGrid1 の Scrollイベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_Scroll(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.CancelEventArgs) Handles C1TrueDBGrid1.Scroll Me.ListBox1.Visible = False End Sub C# コードの書き方 C# private void c1TrueDBGrid1_Scroll(object sender, { this.listBox1.Visible = false; } C1.Win.C1TrueDBGrid.CancelEventArgs e) プログラムを実行し、次の動作を確認します。 C1TrueDBGrid1 には、チュートリアル チュートリアル6: 連結グリッド内で非連結列を定義する 連結グリッド内で非連結列を定義すると同様に、結合されたテーブルのデータが表示されます。 顧客タイプ 顧客タイプのセルをクリックして、現在のセルとして強調表示します。セルの右端にボタンが表示されます。このボタンをクリックすると、ButtonClick イベン トが発生します。次の図のように、セルの右端に ListBox1 がドロップダウンされます。 255 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms [↑] と [↓] の各キーまたはマウスを使用して、ListBox1 で強調表示されているアイテムを移動できます。グリッド内の他のセルをクリックすると、ListBox1 はフォーカスを失い、非表示になります。 ListBox1 内の任意のアイテムをダブルクリックします。グリッドの現在の列が、選択されたアイテムに更新されます。 ListBox1 は、再度編集を始めるまで 非表示になります。 現在の列を他の列に移動すると、顧客タイプ列 顧客タイプ列のセルからボタンが消えます。 これでチュートリアル 9 は終了です。 チュートリアル チュートリアル10: セル内ビットマップを使ってユーザーインタフェー スを強化する このチュートリアルでは、 ValueItems オブジェクトとValueItemオブジェクトのコレクションの使用方法を学びます。コードを1 行も記述しないで、セルにビットマップやチェックボックスを表示します。 以下の手順を実行します。 1. チュートリアル チュートリアル7: 組み込みコンボを使って変換データを表示する で使用したプロジェクトから始めます。 2. Visual Studio のプロパティウィンドウで、Columns プロパティの横にある省略符ボタンをクリックしま す。C1TrueDBGrid デザイナが表示されます。 3. How列を選択し、C1TrueDBGrid デザイナ デザイナの左ペインで Caption プロパティを方法 方法に設定します。同様に、連絡済 連絡済 み列の Caption プロパティを連絡? 連絡?に設定します。 4. この2つの列のHorizontalAlignment プロパティを、ビットマップが各セルの中央に配置されるように変更します。 Visual Studio のプロパティウィンドウで、Splits プロパティの横にある省略符ボタンをクリックして、SplitCollection エ ディタ ディタを開きます。次に、このエディタで、DisplayColumn プロパティの横にある省略符ボタンをクリックし て、C1DisplayColumnCollection エディタを開きます。左ペインで方法 方法列を選択し、右ペインで Styles プロパティの 横にある展開アイコンをクリックします。この列の Styles オブジェクトの下で、HorizontalAlignment プロパティを Center に設定します。同様に、連絡 連絡?列の HorizontalAlignment プロパティを設定します。 5. 次に、選択した列にビットマップとチェックボックスを割り当てるために、対応する ValueItems オブジェクトにデータを 挿入します。列1のビットマップから始めます。 Visual Studio のプロパティウィンドウで、Columns プロパティの横にあ る省略符ボタンをクリックして、C1TrueDBGrid デザイナを開きます。左ペインで「方法」列を選択し、右ペインで Value item オブジェクトの横にある展開アイコンをクリックします。Values プロパティの横にある省略符ボタンをクリックし て、ValueItemsエディタ エディタを開きます。 256 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 6. 左ペインの〈追加〉ボタンをクリックして、新しい ValueItem オブジェクトを3つ作成します。ContactTypeフィールドの有 効な値は、0,1 と 2 で、それぞれ電話、メール、担当者を表します。これらの値の代わりにビットマップをセルに表示し ます。本製品の内容をすべてインストールしている場合は、TrueDBGrid for WinForms のインストールディレクトリの Tutorial10 サブディレクトリに、PHONE.BMP, MAIL.BMP, と PERSON.BMPM.BMP があります 7. 右ペインで、最初の ValueItem の値として0を入力し、DisplayValue プロパティボックスの省略符ボタンをクリックしま す。これにより、セルに表示する画像ファイルを検索できます。TrueDBGrid for WinForms のインストールディレクト リの Tutorial10 サブディレクトリにある Phone.bmp ファイルを見つけます。同様に、もう一つの ValueItem オブジェク トを設定します。Value を 1 に、DisplayValue を Person.bmp に設定します。C1TrueDBGrid デザイナ デザイナの ValueItems オブジェクトに戻り、Translate プロパティと CycleOnClick プロパティを True に設定します。 8. 次に、列3のチェックボックスを設定します。C1TrueDBGrid デザイナ デザイナの左ペインで、連絡済列を選択します。右ペイン で、ValueItems オブジェクトを展開し、Presentation プロパティを CheckBox に設定します。これにより、列のブール 値がチェックボックスとして表示されます。最後に、同じオブジェクトの下で、Translate プロパティと CycleOnClick プ ロパティを True に設定します。 プログラムを実行し、次の動作を確認します。 C1TrueDBGrid1 には、前のチュートリアルと同様に、結合されたテーブルのデータが表示されます。 次の図のように、方法 方法列と連絡? 連絡?列には、数値ではなくビットマップが表示されます。 257 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 方法 方法列のセルをクリックして、現在のセルにします。さらにセルを何回かクリックして、電話、メールと人を表す各ビット マップが順番に表示されるようすを確認します。 連絡? 連絡?列のセルをクリックして、チェックボックスのビットマップが切り替わるようすを確認します。 これでチュートリアル 10 は終了です。 チュートリアル チュートリアル11: スタイルを使って関連データを強調表示する このチュートリアルでは、グリッド内の値に依存する行スタイルを作成して、グリッドの行を強調表示するように変更する方法を 学びます。 True DBGrid では、スタイルの特性を作成し、それらを動的に行に適用するには、FetchRowStyle イベントを使 用します。 以下の手順を実行します 1. チュートリアル チュートリアル10: セル内ビットマップを使ってユーザーインタフェースを強化する で使用したプロジェクトから始めま す。 2. フォームにラジオボタンを3つ追加します。RadioButton1 は見込み顧客に、RadioButton2 は業者 に、RadioButton3 はグリッドのリセットにそれぞれのキャプションを変更します。次のようなフォームを作成します。 258 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 3. Form1 の一般セクションに次の宣言を追加します。 Visual Basic コードの書き方 Visual Basic Dim bflag As Integer C# コードの書き方 C# int bflag; 4. Button1 の Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic ' 見込み顧客。 Me.C1TrueDBGrid1.FetchRowStyles = True bFlag = 1 Me.C1TrueDBGrid1.Refresh() C# コードの書き方 C# // 見込み顧客。 this.c1TrueDBGrid1.FetchRowStyles = true; bFlag = 1; this.c1TrueDBGrid1.Refresh(); 5. Button2 の Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic ' 販売業者 259 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Me.C1TrueDBGrid1.FetchRowStyles = True bFlag = 2 Me.C1TrueDBGrid1.Refresh() C# コードの書き方 C# // 販売業者 this.c1TrueDBGrid1.FetchRowStyles = true; bFlag = 2; this.c1TrueDBGrid1.Refresh(); 6. Button 3 の Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic ' グリッドをリセットします。 Me.C1TrueDBGrid1.FetchRowStyles = False Me.C1TrueDBGrid1.Refresh() C# コードの書き方 C# //グリッドをリセットします。 this.c1TrueDBGrid1.FetchRowStyles = false; this.c1TrueDBGrid1.Refresh(); 7. FetchRowStyle イベントに次のコードを入力します。このコードは、クリックイベント内の FetchRowStyle プロパティの 設定に連動します。 FetchRowStyle が True に設定されている場合は、セルの再描画が必要になる と、FetchRowStyle イベントが発生します。これにより、bflag フラグの整数値に基づいて、行スタイルが適用されま す。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_FetchRowStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles C1TrueDBGrid1.FetchRowStyle If bFlag = 1 And Me.C1TrueDBGrid1 (e.Row,"CustType") = 1 Then Dim fntFont As New Font(e.CellStyle.Font.Name, e.CellStyle.Font.Size, FontStyle.Bold) e.CellStyle.Font = fntFont e.CellStyle.ForeColor = System.Drawing.Color.Blue End If If bFlag = 2 And Me.C1TrueDBGrid1 (e.Row, "CustType") = 4 Then e.CellStyle.ForeColor = System.Drawing.Color.White e.CellStyle.BackColor = System.Drawing.Color.Red End If End Sub C# コードの書き方 260 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# private void C1TrueDBGrid1_FetchRowStyle(object sender, C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs e) { if (bFlag == 1 && (int)this.c1TrueDBGrid1 [e.Row, "CustType"] == 1 ) { Font fntFont = new Font(e.CellStyle.Font.Name, e.CellStyle.Font.Size, FontStyle.Bold); e.CellStyle.Font = fntFont; e.CellStyle.ForeColor = System.Drawing.Color.Blue; } if (bFlag == 2 && this.c1TrueDBGrid1 [e.Row, "CustType"] == 4 ) { e.CellStyle.ForeColor = System.Drawing.Color.White; e.CellStyle.BackColor = System.Drawing.Color.Red; } } プログラムを実行し、次の動作を確認します。 C1TrueDBGrid1 には、チュートリアル 10 と同じデータが表示されます。 見込み顧客 をクリックします。グリッドは次のように表示されます。 業者 ボタンをクリックします。グリッドは次のように表示されます。 261 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 最後に、グリッドのリセット ボタンをクリックします。グリッドのスタイルがすべてリセットされます。 これでチュートリアル 11 は終了です。 チュートリアル チュートリアル12: 行の色を互い違いに表示する このチュートリアルでは、AlternatingRows プロパティと組み込みスタイルを使用して、グリッド行の色を互い違いに表示し、 判読性をよくする方法について学びます。 1. チュートリアル チュートリアル10: セル内ビットマップを使ってユーザーインタフェースを強化する セル内ビットマップを使ってユーザーインタフェースを強化するで使用したプロジェクトから始めま す。 2. Visual Studio のプロパティウィンドウで、AlternatingRows プロパティを True に設定します。グリッドの EvenRow ス タイルと OddRow スタイルには、それぞれデフォルトの設定があります。最初にデフォルトの設定を使用し、その後で EvenRowStyle の設定を変更します。 3. プログラムを実行し、次の動作を確認します。C1TrueDBGrid1 には、チュートリアル チュートリアル10: セル内ビットマップを使って ユーザーインタフェースを強化する ユーザーインタフェースを強化すると同じデータが表示されますが、偶数行の背景色は明るいシアンになります。 4. プロパティウィンドウで、Styles プロパティの横にある省略符ボタンをクリックします。 C1TrueDBGrid スタイルエディタ が表示されます。 5. 左ペインで EvenRowStyle を選択し、右ペインでその背景色を LightGray に変更します。 [OK] をクリックしてエディ タを終了します。 262 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms プログラムを実行し、次の動作を確認します。 C1TrueDBGrid1 には、前の図と同じデータが表示されますが、偶数行の背景色は明るい灰色に変わっています。 これでチュートリアル 12は終了です。 チュートリアル チュートリアル13:C1TrueDBGridでのドラッグ&ドロップ操作の実 でのドラッグ&ドロップ操作の実 装 このチュートリアルでは、TrueDBGrid for WinForms のドラッグ&ドロップ機能を使用する方法を学びます。 以下の手順を実行します。 1. 新しい .NET プロジェクトを作成します。 2. 2つの TrueDBGrid for WinForms コントロール(C1TrueDBGrid1、C1TrueDBGrid2)をフォームに配置します。さら に、フォームに3つのラベルを追加し、以下の図のように配置します。 3. C1TrueDBGrid1 の C1TrueDBGrid タスク タスクメニューで、データソースの選択 データソースの選択ドロップダウン矢印をクリックし、ドロップダ ウンボックスから[プロジェクトのデータソースの追加 プロジェクトのデータソースの追加]リンクを選択します。データソース構成ウィザード データソース構成ウィザードが表示されま す。データソースの種類の選択 データソースの種類の選択ページ上で選択されているデフォルト設定であるデータベース データベースをそのままにして、次 次 へをクリックします。新しい接続 新しい接続ボタンをクリックし、新しい接続を作成するか、ドロップダウンリストから1つ選択しま す。データベースオブジェクトの選択 データベースオブジェクトの選択ページで、Customers テーブルを選択し、すべてのフィールドを含めます。データ データ セット名 セット名ボックスに DsCustomersと入力し、完了 完了をクリックしてウィザードを終了します。新しいデータソースをプロジェ クトに追加する方法については、手順 手順 2::DataSet への C1TrueDBGrid の連結 の連結を参照してください。 4. ドラッグ&ドロップ操作をリセットするための次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles C1TrueDBGrid1.MouseUp ' MouseUpイベントでドラッグ& ドロップフラグをリセットします。 ResetDragDrop() End Sub Private Sub C1TrueDBGrid1_QueryContinueDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.QueryContinueDragEventArgs) Handles 263 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid1.QueryContinueDrag ' ドラッグ& ドロップ操作を実施/キャンセルした場合は、上のグリッドをリセットします。 If e.Action = DragAction.Drop OrElse e.Action = DragAction.Cancel Then ResetDragDrop() End If End Sub C# コードの書き方 C# private void C1TrueDBGrid1_MouseUp(object sender, MouseEventArgs e) { // MouseUpイベントでドラッグ& ドロップフラグをリセットします。 ResetDragDrop(); } private void C1TrueDBGrid1_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) { // ドラッグ& ドロップ操作を実施/キャンセルした場合は、上のグリッドをリセットします。 if ((e.Action == DragAction.Drop) || (e.Action == DragAction.Cancel)) this.ResetDragDrop(); } 5. C1TrueDBGrid2 のC1TrueDBGrid タスク タスクメニューで、データソースの選択 データソースの選択ドロップダウン矢印をクリックし、ドロップダ ウンボックスからプロジェクトのデータソースの追加 プロジェクトのデータソースの追加リンクを選択します。 データソース構成ウィザード データソース構成ウィザードが表示されま す。データソースの種類の選択 データソースの種類の選択ページ上で選択されているデフォルト設定であるデータベース データベースをそのままにして、次 次 へをクリックします。新しい接続 新しい接続ボタンをクリックし、新しい接続を作成するか、ドロップダウンリストから1つ選択しま す。データベースオブジェクトの選択 データベースオブジェクトの選択ページで、CallList テーブルを選択し、すべてのフィールドを含めます。データセッ データセッ ト名 ト名ボックスに DsCallListと入力し、完了 完了をクリックしてウィザードを終了します。 6. フォームの一般宣言セクションで、次の宣言を追加します。 Visual Basic コードの書き方 Visual Basic Dim _ptStartDrag As Point Dim _dragRow As Long C# コードの書き方 C# Point _ptStartDrag; long _dragRow; 7. VisualStudio は、Form_Loadイベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.CallListTableAdapter.Fill(Me.DsCallList.CallList) Me.CustomersTableAdapter.Fill(Me.DsCustomers.Customers) 264 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# this.CallListTableAdapter.Fill(this.DsCallList.CallList); this.CustomersTableAdapter.Fill(this.DsCustomers.Customers); 8. 最初のグリッド(C1TrueDBGrid1)で、AllowDragプロパティを True に設定します。2番目のグリッドで、AllowDrop プロパティを True に設定します。 9. C1TrueDBGrid1 を右クリックし、フィールドの取得 フィールドの取得を選択します。もう一方のグリッドについても、同様の作業を行いま す。 10. VisualStudio のプロパティウィンドウで、C1TrueDBGrid の Columns プロパティの横にある〈…〉ボタンをクリックし て、C1TrueDBGrid1 の C1TrueDBGrid デザイナ デザイナを開きます。 11. 列の削除 列の削除ボタンをクリックして、名前 名前、姓 姓、会社名 会社名、および電話番号 電話番号 以外のすべての列をグリッドから削除します。もう 一方のグリッドの C1TrueDBGrid デザイナ デザイナを開き、顧客名 顧客名、電話番号 電話番号、および`面談日 面談日以外のすべての列を削除しま す。 12. VisualStudio のプロパティウィンドウで C1TrueDBGrid1 のMarqueeStyle をSolidCellBorderに設定しま す。C1TrueDBGrid デザイナ デザイナで、列3(Phone)のNumberFormat プロパティを「(###)###-####」に設定します。2番 目のグリッドの C1TrueDBGrid デザイナ デザイナを開き、列2の NumberFormat プロパティを「(###)###-####」に設定しま す。グリッドは、次のように表示されます。 プロジェクトへのコードの追加 このセクションでは、C1TrueDBGrid1 から C1TrueDBGrid2 にセルまたは行の内容をドラッグするために必要なコードにつ いて説明します。このコードでは、データ行全体を C1TrueDBGrid2 にドラッグして、C1TrueDBGrid2 に新しいレコードを追 加するとします。 1. 各グリッドの MarqueeStyle プロパティをリセットするための次のサブルーチンをプロジェクトに追加します。このプロ パティは、ドラッグの実行中に視覚的なフィードバックを提供するために使用されます。このリセットルーチンは、ドラッ グ&ドロップ操作を終了した後に呼び出され、クリーンアップを実行します。 Visual Basic コードの書き方 265 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic Private Sub ResetDragDrop() ' 強調表示とラベルテキストをリセットして、ドラッグ アンドドロップ操作を取り消します。 Me._ptStartDrag = Point.Empty Me._dragRow = - 1 Me.C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder Me.C1TrueDBGrid2.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder Me.Label3.Text = "Drag a row from the top grid and drop it on the bottom grid." End Sub C# コードの書き方 C# private void ResetDragDrop() { // 強調表示とラベルテキストをリセットして、ドラッグ アンドドロップ操作を取り消します。 this._ptStartDrag = Point.Empty; this._dragRow = - 1; this.c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder; this.c1TrueDBGrid2.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder; this.label3.Text = "Drag a row from the top grid and drop it on the bottom grid."; } 2. マウス関連のイベントを処理するための次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles C1TrueDBGrid1.MouseDown Dim row, col As Integer Me._ptStartDrag = Point.Empty Me._dragRow = - 1 If Me.C1TrueDBGrid1.CellContaining(e.X, e.Y, row, col) Then ' ドラッグ操作の開始点を保存します。 Me._ptStartDrag = New Point(e.X, e.Y) Me._dragRow = row End If End Sub Private Sub C1TrueDBGrid1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles C1TrueDBGrid1.MouseMove ' ドラッグの開始点が空でない場合は、ドラッグが開始されています。 If Not Me._ptStartDrag.IsEmpty Then 266 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ' ドラッグ操作の開始点を囲む四角形を 2 ピクセルで作成します。 Dim r As New Rectangle(Me._ptStartDrag, Size.Empty) r.Inflate(2, 2) ' 3 ピクセル以上移動している場合は、ドラッグ操作を開始します。 If Not r.Contains(e.X, e.Y) Then Me.C1TrueDBGrid1.Row = Me._dragRow Me.C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightRow Me.C1TrueDBGrid1.DoDragDrop(Me._dragRow, DragDropEffects.Copy) End If End If End Sub C# コードの書き方 C# private void C1TrueDBGrid1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { int row, col; this._ptStartDrag = Point.Empty; this._dragRow = - 1; if (this.c1TrueDBGrid1.CellContaining(e.X, e.Y, row, col) ) { // ドラッグ操作の開始点を保存します。 this._ptStartDrag = new Point(e.X, e.Y); this._dragRow = row; } } private void C1TrueDBGrid1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { // ドラッグの開始点が空でない場合は、ドラッグが開始されています。 if (!this._ptStartDrag.IsEmpty ) { // ドラッグ操作の開始点を囲む四角形を 2 ピクセルで作成します。 Rectangle r = new Rectangle(this._ptStartDrag, Size.Empty); r.Inflate(2, 2); // 3 ピクセル以上移動している場合は、ドラッグ操作を開始します。 if (!r.Contains(e.X, e.Y) ) { this.c1TrueDBGrid1.Row = this._dragRow; this.c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightRow; this.c1TrueDBGrid1.DoDragDrop(this._dragRow, DragDropEffects.Copy); } } } 267 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 3. ドラッグ&ドロップイベントを処理するための次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles C1TrueDBGrid2.DragEnter Me.Label3.Text = "Create a new record when dropped..." e.Effect = DragDropEffects.Copy End Sub Private Sub C1TrueDBGrid2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles C1TrueDBGrid2.DragDrop Try Dim row As Integer = CInt(e.Data.GetData(GetType(Integer))) ' グリッドインデクサを使ってデータを取得します。 Dim custname As String = Me.C1TrueDBGrid1(row, "FirstName").ToString() ' CellText() メソッドを使ってデータを取得します。 custname += " " + Me.C1TrueDBGrid1.Columns("LastName").CellText(row) ' CellValue() メソッドを使ってデータを取得します。 custname += " " + Me.C1TrueDBGrid1.Columns("Company").CellValue(row).ToString() ' 下のグリッドのデータセットに新しい行を追加します。 Dim drv As DataRowView = Me.DsCallList.CallList.DefaultView.AddNew() drv("CallDate") = DateTime.Now drv("Customer") = custname drv("Phone") = Me.C1TrueDBGrid1.Columns("Phone").Value.ToString() drv.EndEdit() Me.C1TrueDBGrid2.MoveLast() Me.C1TrueDBGrid2.Select() ' データベースに変更をコミットします。 Dim inserted As DataSet = Me.DsCallList.GetChanges(DataRowState.Added) If Not (inserted Is Nothing) Then Me.CallListTableAdapter.Update(inserted) End If Me.ResetDragDrop() Catch ex As System.Exception MessageBox.Show(ex.Message) End Try End Sub C# コードの書き方 C# private void C1TrueDBGrid2_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) { 268 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.label3.Text = "Create a new record when dropped..."; e.Effect = DragDropEffects.Copy; } private void C1TrueDBGrid2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { try { int row = (int)e.Data.GetData(typeof(int)); // グリッドインデクサを使ってデータを取得します。 string custname = this.c1TrueDBGrid1[row, "FirstName"].ToString(); // CellText() メソッドを使ってデータを取得します。 custname += " " + this.c1TrueDBGrid1.Columns["LastName"].CellText(row); // CellValue() メソッドを使ってデータを取得します。 custname += " " + this.c1TrueDBGrid1.Columns["Company"].CellValue(row).ToString(); // 下のグリッドのデータセットに新しい行を追加します。 DataRowView drv = this.DsCallList.CallList.DefaultView.AddNew(); drv["CallDate"] = DateTime.Now; drv["Customer"] = custname; drv["Phone"] = this.c1TrueDBGrid1.Columns["Phone"].Value.ToString(); drv.EndEdit(); this.c1TrueDBGrid2.MoveLast(); this.c1TrueDBGrid2.Select(); // データベースに変更をコミットします。 DataSet inserted = this.DsCallList.GetChanges(DataRowState.Added); if (! (inserted == null) ) { this.CallListTableAdapter.Update(inserted); } this.ResetDragDrop(); } catch (System.Exception ex) { MessageBox.Show(ex.Message); } } プログラムを実行し、次の点を確認します。 C1TrueDBGrid1 の列にある1つの項目をドラッグすると、行全体が強調表示されます。これは、そのデータ行全体が ドラッグされていることを示します。 TDBGrid2にドラッグすると、現在のセルマーキーセルの周囲の実線の境界線 セルの周囲の実線の境界線が表示されなくなります。 269 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms データを C1TrueDBGrid2 にドロップすると、C1TrueDBGrid1 の現在の行のデータを使って新しいレコードが作成さ れます。 これで、チュートリアル 13 は終了です。 チュートリアル チュートリアル14: スクロールしない固定列を持つグリッドを作成す る 1つ以上の列を水平方向または垂直方向にスクロールしないように設定して、常に表示することができます。 True DBGrid の SplitCollection は、隣接する列のグループを定義する一般的なメカニズムを提供し、スクロールしない固定列または固 定行を実装するために使用できます。このチュートリアルでは、2つの水平スプリットを持つグリッドを作成するためのコードを 記述し、左のスプリット内の2つの列を固定する方法を学びます。 以下の手順を実行します。 1. チュートリアル チュートリアル1:C1TrueDBGrid を DataSet に連結する の手順1から6に従って、データセットに連結された C1TrueDBGrid のプロジェクトを作成します。 2. 追加のスプリットを作成し、左のスプリットの列0と列1を固定するために、次のコードを置きます。 Visual Basic コードの書き方 Visual Basic Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' スプリットを追加します。 Me.C1TrueDBGrid1.InsertHorizontalSplit(0) '第1スプリットでは、第1列と第2列だけを残して、他のすべての列を隠します。 Dim x As Integer 270 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms For x = 2 To Me.C1TrueDBGrid1.Columns.Count - 1 Me.C1TrueDBGrid1.Splits(0).DisplayColumns(x).Visible = False Next ' 第1スプリットに2列のみを表示し、リサイズできないように作成します。 With Me.C1TrueDBGrid1.Splits(0) .SplitSizeMode = C1.Win.C1TrueDBGrid.SizeModeEnum.NumberOfColumns .SplitSize = 2 .AllowHorizontalSizing = False End With '第1スプリットの第1列と第2列を固定したので、他のスプリットではそれらの列を隠すようにします。 Me.C1TrueDBGrid1.Splits(1).DisplayColumns(0).Visible = False Me.C1TrueDBGrid1.Splits(1).DisplayColumns(1).Visible = False ' 第2スプリットの行セレクタを非表示にします。 Me.C1TrueDBGrid1.Splits(1).RecordSelectors = False End Sub C# コードの書き方 C# private void Form1_Load(System.object sender, System.EventArgs e) { //スプリットを追加します。 this.c1TrueDBGrid1.InsertHorizontalSplit(0); // 第1スプリットでは、第1列と第2列だけを残して、他のすべての列を隠します。 int x; for (x = 2 ; x < this.c1TrueDBGrid1.Columns.Count; x++) { this.c1TrueDBGrid1.Splits[0].DisplayColumns[x].Visible = false; } // 第1スプリットに2列のみを表示し、リサイズできないように作成します。 this.c1TrueDBGrid1.Splits[0].SplitSizeMode = C1.Win.C1TrueDBGrid.SizeModeEnum.NumberOfColumns; this.c1TrueDBGrid1.Splits[0].SplitSize = 2; this.c1TrueDBGrid1.Splits[0].AllowHorizontalSizing = false; // 第1スプリットの第1列と第2列を固定したので、他のスプリットではそれらの列を隠すようにします。 this.c1TrueDBGrid1.Splits[1].DisplayColumns[0].Visible = false; this.c1TrueDBGrid1.Splits[1].DisplayColumns[1].Visible = false; // 第2スプリットの行セレクタを非表示にします。 this.c1TrueDBGrid1.Splits[1].RecordSelectors = false; } プログラムを実行し、次の動作を確認します。 C1TrueDBGrid には、 チュートリアル チュートリアル1:C1TrueDBGrid を DataSet に連結する に連結すると同様にデータが表示されます。 271 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 左のスプリットの2つの列(「名前」列と「姓」列)は固定されており、スクロールできません。実際、左のスプリットの下に 水平スクロールバーは表示されていません。右のスプリットの下には水平スクロールバーが表示されており、このスプ リット内の列をスクロールできます。 スプリットを使用して、グリッド内の任意の場所に(中央 中央でも)、スクロールしない固定列を作成できます。スプリットを使用する と、データを異なる方法で表示することもできます。たとえば、データベースの最初と最後のレコードを比較できるように、独立 してスクロール(垂直方向)するスプリットを作成できます。詳細については、「 スプリットの使用方法 スプリットの使用方法を参照してください。 これでチュートリアル 14は終了です。 チュートリアル チュートリアル15: PrintInfo および印刷プレビュー このチュートリアルでは、TrueDBGrid for WinForms の印刷とエクスポートの機能を使用する方法を学びます。 以下の手順を実行します。 1. チュートリアル チュートリアル1:C1TrueDBGrid を DataSet に連結する に連結するで作成したプロジェクトから始めます。 2. フォームにボタンを1つ追加し、 、Text プロパティを「印刷プレビュー 印刷プレビュー」に設定します。 3. Form1 の Load イベントに次のコードを追加します。このコードは、「国名 国名」列の背景色およびテキストのフォントを変更 し、「姓」列の NumberFormat プロパティをFormatTextイベントに設定します。また、グリッドの HeadingStyle も変 更します。 Visual Basic コードの書き方 Visual Basic ' グリッドの表示を変更します。 With Me.C1TrueDBGrid1.Splits(0).DisplayColumns .Item("Country").Style.BackColor = System.Drawing.Color.Cyan Dim fntFont As Font fntFont = New Font("Times New Roman", .Item("Country").Style.Font.Size, FontStyle.Regular) .Item("Country").Style.Font = fntFont .Item("Last").Style.ForeColor = System.Drawing.Color.Red End With Me.C1TrueDBGrid1.Columns("last").NumberFormat = "FormatText Event" With Me.C1TrueDBGrid1.HeadingStyle 272 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Dim fntfont As Font fntfont = New Font(.Font.Name, .Font.Size, FontStyle.Bold) .Font = fntfont .BackColor = System.Drawing.Color.Blue .ForeColor = System.Drawing.Color.Yellow End With C# コードの書き方 C# // グリッドの表示を変更します。 C1DisplayColumn col = this.c1TrueDBGrid1.Splits[0].DisplayColumns["Country"]; col.Style.BackColor = System.Drawing.Color.Cyan; Font fntFont; fntFont = new Font("Times new Roman", col.Style.Font.Size, FontStyle.Regular); col.Style.Font = fntFont; c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Style.ForeColor = System.Drawing.Color.Red; this.c1TrueDBGrid1.Columns["last"].NumberFormat = "FormatText event"; Font fntfont; fntfont = new Font(Font.Name, this.c1TrueDBGrid1.HeadingStyle.Font.Size, FontStyle.Bold); this.c1TrueDBGrid1.HeadingStyle.Font = fntfont; this.c1TrueDBGrid1.HeadingStyle.BackColor = System.Drawing.Color.Blue; this.c1TrueDBGrid1.HeadingStyle.ForeColor = System.Drawing.Color.Yellow; 4. 上記のコードで NumberFormat プロパティは 「FormatText 」イベントに設定されました。このプロパティを使用して、 ユーザーが列の値のスタイルと書式を設定できます。FormatText イベントに次のコードを追加して、列の値を「大文 大文 字」 字」に設定します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_FormatText(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FormatTextEventArgs) Handles C1TrueDBGrid1.FormatText e.Value = UCase(e.Value) End Sub C# コードの書き方 C# private void C1TrueDBGrid1_FormatText(object sender, C1.Win.C1TrueDBGrid.FormatTextEventArgs e) { e.Value = e.Value.ToUpper(); } 5. Button1 の Click イベントに次のコードを追加します。このコードは、PrintInfo オブジェクト、そのプロパティ、および そのメソッドを使用して、印刷ページのヘッダとフッタを作成しています。また、印刷プレビューウィンドウを起動する PrintPreview メソッドを呼び出して終了します。 Visual Basic コードの書き方 Visual Basic 273 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms With Me.C1TrueDBGrid1.PrintInfo Dim fntFont As Font fntFont = New Font(.PageHeaderStyle.Font.Name, .PageHeaderStyle.Font.Size, FontStyle.Italic) .PageHeaderStyle.Font = fntFont .PageHeader = "Composers Table" ' 各ページに列ヘッダを表示します。 .RepeatColumnHeaders = True ' ページ番号を表示します。 .PageFooter = "Page: \p" ' PrintPreview メソッドを呼び出します。 .UseGridColors = True .PrintPreview() End With C# コードの書き方 C# Font fntFont; fntFont = new Font(this.c1TrueDBGrid1.PrintInfo.PageHeaderStyle.Font.Name, this.c1TrueDBGrid1.PrintInfo.PageHeaderStyle.Font.Size, FontStyle.Italic); this.c1TrueDBGrid1.PrintInfo.PageHeaderStyle.Font = fntFont; this.c1TrueDBGrid1.PrintInfo.PageHeader = "Composers Table"; // 各ページに列ヘッダを表示します。 this.c1TrueDBGrid1.PrintInfo.RepeatColumnHeaders = true; // ページ番号を表示します。 this.c1TrueDBGrid1.PrintInfo.PageFooter = "Page: \\p"; // PrintPreview メソッドを呼び出します。 this.c1TrueDBGrid1.PrintInfo.UseGridColors = true; this.c1TrueDBGrid1.PrintInfo.PrintPreview(); プログラムを実行し、次の動作を確認します。 C1TrueDBGrid1 には、手順 4に指定されたフォントと色で次のようなデータが表示されます。 274 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 印刷 印刷プレビューボタンをクリックすると、次のようなウィンドウが表示されます。出力がグリッドの書式を反映していること がわかります。 これでチュートリアル 15は終了です。 チュートリアル チュートリアル16: 階層表示 このチュートリアルでは、グリッドの階層表示を使ってマスター/詳細データセット情報を表示する方法を学びます。このチュー トリアルは チュートリアル チュートリアル3: 複数の C1TrueDBGrid コントロールをリンクする コントロールをリンクする」に似ており、チュート チュート リアル リアル3: 複数の C1TrueDBGrid コントロールをリンクする コントロールをリンクすると同じマスター/詳細情報を表示しますが、C1TrueDBGrid オブ ジェクトだけを使用する点が異なります。 以下の手順を実行します。 1. 最初に、チュートリアル チュートリアル3: 複数の C1TrueDBGrid コントロールをリンクする コントロールをリンクするのステップ1~6に従って、グリッドとマス ター/詳細データセットを持つフォームを設定します。 2. プロパティウィンドウで、グリッドの DataSource プロパティを dsMasterDetail1 に、DataMember プロパティを Composer に設定します。 3. 次に、Form1 の Load イベントに次のコードを追加します。このコードは、両方の DataAdapter にデータを設定して います。また、DataView プロパティを Hierarchical に設定します。 Visual Basic コードの書き方 Visual Basic Me.ComposerTableAdapter.Fill(Me.DsMasterDetail.Composer) Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Hierarchical C# コードの書き方 C# this.ComposerTableAdapter.Fill(this.DsMasterDetail.Composer); this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Hierarchical; プログラムを実行し、次の動作を確認します。 275 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid1 には、連結されているとおりに Composers テーブルが表示されます。ただし、各行には展開アイコ ンがあります。行の1つを展開します。対応する Opus テーブルのデータが、グリッドの離れた列に表示されることがわ かります。表示されたデータは、展開された Composers テーブルのレコードに関連しています。 これでチュートリアル 16 は終了です。 チュートリアル チュートリアル17: グループ化表示 このチュートリアルでは、 DataView プロパティを使用して、グリッドの上部にグループ化領域を作成する方法を学びます。グ ループ化領域を使用すると、実行時に列を基準にしてデータをソートできます。 1. チュートリアル チュートリアル1:C1TrueDBGrid を DataSet に連結する に連結するで作成したプロジェクトから始めます。 2. Form1 の Load イベントで、現在の DataAdapter のコードの後に次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy C# コードの書き方 C# this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy; プログラムを実行し、次の動作を確認します。 C1TrueDBGrid1には、チュートリアル 1で指定されたデータが表示されます。 ここでは、グリッドの上部に灰色のグループ化領域があります。 国名 国名列のヘッダをクリックし、グループ化領域までドラッグします。グリッドは次のように表示されます。 276 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 国名のすべてのメンバが左の列に置かれ、各行に展開アイコンがあることに注意してください。展開アイコンをクリック すると、その国にすむすべてのユーザーのデータが表示されます。 次に、「姓」列のヘッダをグループ化領域までドラッグし、国名:Germany の展開アイコンをクリックします。データは、最 初に国名でソートされ、次に姓でソートされていることがわかります。レコードの展開アイコンをクリックすると、データの 残りの列が表示されます。 これでチュートリアル 17 は終了です。 チュートリアル チュートリアル18: 値の変換 このチュートリアルでは、 C1TrueDBDropDowns の ValueTranslate プロパティを使用して、ドロップダウンの詳細データを グリッドのマスターデータに自動的に変換する方法を学びます。 以下の手順を実行します。 1. チュートリアル チュートリアル8: ドロップダウンコントロールをグリッドセルに結び付ける で作成したプロジェクトから始めます。 2. フォームの Load イベントで、既存のコードに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic 277 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Me.C1TrueDBDropDown1.ValueTranslate = True Me.C1TrueDBDropDown1.ListField = "TypeDesc" Me.C1TrueDBDropDown1.DataField = "TypeID" C# コードの書き方 C# this.c1TrueDBDropDown1.ValueTranslate = true; this.c1TrueDBDropDown1.ListField = "TypeDesc"; this.c1TrueDBDropDown1.DataField = "TypeID"; プログラムを実行し、次の動作を確認します。 C1TrueDBGrid1 には、チュートリアル チュートリアル8: ドロップダウンコントロールをグリッドセルに結び付ける で指定されたデータ が表示されます。 グリッドの顧客タイプ列の値として、ドロップダウンに長い説明が表示されます。それらの値は、実行中にドロップダウン からグリッド列に自動的に変換されます。 これでチュートリアル 18 は終了です。 チュートリアル チュートリアル19: 範囲選択 このチュートリアルでは、SelectedRows オブジェクトと SelectedCols オブジェクトを使用して、Microsoft Excel の形式でグ リッドの範囲をコピーする方法を学びます。 以下の手順を実行します。 1. チュートリアル チュートリアル1:C1TrueDBGrid を DataSet に連結する に連結するで作成したプロジェクトから始めます。 2. フォームの左下側にコマンドボタンを配置して、ボタンの Text プロパティを「コピー コピー」に設定します。 3. Button1 のクリックイベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic ' クリップボード上にコピーされる文字列。 Dim strTemp As String Dim row As Integer Dim col As C1.Win.C1TrueDBGrid.C1DataColumn Dim cols As Integer, rows As Integer If Me.C1TrueDBGrid1.SelectedRows.Count > 0 Then For Each row In Me.C1TrueDBGrid1.SelectedRows ' 文字列をフォーマットします。 For Each col In Me.C1TrueDBGrid1.SelectedCols strTemp = strTemp & col.CellText(row) & vbTab Next strTemp = strTemp & vbCrLf Next System.Windows.Forms.Clipboard.SetDataObject(strTemp, False) MessageBox.Show ("Range of " & Me.C1TrueDBGrid1.SelectedCols.Count & " x " & C1TrueDBGrid1.SelectedRows.Count & " cells have been copied to the clipboard in TAB delimited format") 278 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Else MessageBox.Show ("Please select a range of cells") End If C# コードの書き方 C# // クリップボード上にコピーされる文字列。 string strTemp; int row; C1.Win.C1TrueDBGrid.C1DataColumn col; int cols, rows; if (this.c1TrueDBGrid1.SelectedRows.Count > 0 ) { foreach (row in this.c1TrueDBGrid1.SelectedRows) { // 文字列をフォーマットします。 foreach (col in this.c1TrueDBGrid1.SelectedCols) { strTemp = strTemp + col.CellText(row) + "\t"; } strTemp = strTemp + "\n"; } System.Windows.Forms.Clipboard.SetDataObject(strTemp, false); MessageBox.Show ("Range of " + this.c1TrueDBGrid1.SelectedCols.Count.ToString() + " x " + this.c1TrueDBGrid1.SelectedRows.Count.ToString() + " cells have been copied to the clipboard in TAB delimited format"); } else { MessageBox.Show ("Please select a range of cells"); } プログラムを実行し、次の動作を確認します。 C1TrueDBGrid1 には、チュートリアル チュートリアル1:C1TrueDBGrid を DataSet に連結する に連結するで指定されたデータが表示されま す。 TrueDBGrid for WinForms でセルの範囲を選択し、〈コピー コピー〉ボタンを押すと、クリップボードにコピーされたセルの詳 細がメッセージボックスに表示されます。 279 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ここで、Microsoft Excel を開きます。True DBGrid で選択したときと正確に同じ数の行および列を選択し、「貼り付け 貼り付け」 をクリックします。これで、グリッドでコピーしたセルが Microsoft Excel に貼り付けられます。 これでチュートリアル 19 は終了です。 チュートリアル チュートリアル20: 複数のデータビュー このチュートリアルでは、グリッドの DataView プロパティを使用して、Inverted ビュー、GroupBy ビュー、Form ビューの表示 形式でデータを表示する方法を学びます。 以下の手順を実行します。 1. チュートリアル 1で作成したプロジェクトから始めます。 2. プロジェクトにコンボボックス(ComboBox1)を追加します。さらに、フォームにラベル一つ追加し、Text プロパティを 「データビュー データビュー」に設定します。 3. プロパティウィンドウで、Items プロパティの横にある省略符ボタンをクリックして、コンボボックスのリストエディタを起動 します。このエディタで、次のアイテムを追加します。 Normal Inverted Form GroupBy MultipleLines Hierarchical 4. Form1 の Load イベントで、既存のコードに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Normal Me.ComboBox1.SelectedIndex = 0 C# コードの書き方 C# 280 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Normal; this.comboBox1.SelectedIndex = 0; 5. ComboBox1 の SelectedIndexChanged イベントに次のコードを追加します。このコードは、ユーザーがコンボボックス で選択した値に基づいて、グリッドの DataView プロパティを変更しています。 Visual Basic コードの書き方 Visual Basic Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Select Case ComboBox1.SelectedItem Case "Normal" Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Normal Case "Inverted" Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Inverted Case "Form" Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Form Case "GroupBy" Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy Case "MultipleLines" Me.C1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.MultipleLines Case "Hierarchical" MessageBox.Show ("Hierarchical View can't be set at run time. Please see the Hierarchical Display tutorial") End Select End Sub C# コードの書き方 C# private void ComboBox1_SelectedIndexChanged(object sender, System.EventArgs e) { switch (ComboBox1.SelectedItem) { case "Normal": this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Normal; break; case "Inverted": this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Inverted; break; case "Form": this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Form; break; case "GroupBy": this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.GroupBy; break; case "MultipleLines": this.c1TrueDBGrid1.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.MultipleLines; 281 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms break; case "Hierarchical"; MessageBox.Show ("Hierarchical View can't be set at run time. Please see the Hierarchical Display tutorial"); break; } } プログラムを実行し、動作を確認します。 C1TrueDBGrid1 には、チュートリアル 1で指定されたデータが表示されます。 コンボボックスを Inverted に変更します。 Inverted ビューでは、グリッド列が行として、グリッド行が列として表示されま す。グリッドは次のように表示されます コンボボックスを Form に変更します。 Form ビューでは、データ入力に適したフォーム形式で各レコードが表示されま す。グリッドは次のように表示されます。 282 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コンボボックスを GroupBy に変更します。 GroupBy ビューでは、グリッドの上部にグループ化領域が置かれ、ここに列 をドラッグできます。この領域に列をドラッグすると、この列を基準に残りのグリッドがソートされます。「国名」列をグルー プ化領域にドラッグします。グリッドは次のように表示されます。 コンボボックスを MultipleLines に変更します。 MultipleLines ビューでは、現在のグリッド領域に収まらない列が次の ラインに折り返されて、すべての列が表示されます。グリッドに入っていなかった8つの列が2行目と3行目にあることが わかります。グリッドは次のように表示されます。 283 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ここで、コンボボックスを Hierarchical に設定します。グリッドに何も変化は起こらず、上のイベントで記述した文がメッ セージボックスにポップアップ表示されます。これは、実行中には階層表示をセットアップできないことを示しています。 階層表示は、アプリケーションの実行前に設定する必要があります。このビューの詳細については、Tutorial 16: Using the Hierarchical Display.チュートリアル16: 階層表示 」を参照してください。 これでチュートリアル 20 は終了です。 チュートリアル チュートリアル21: フィルタバー このチュートリアルでは、グリッドのフィルタバー機能を使用して、実行時に動的に列データをソートする方法を学びます。 以下の手順を実行します。 1. チュートリアル チュートリアル1:C1TrueDBGrid を DataSet に連結する に連結する作成したプロジェクトから始めます。 2. Form1 の Load イベントで、既存のコードの後に次の行を追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.FilterBar = True C# コードの書き方 C# this.c1TrueDBGrid1.FilterBar = true; プログラムを実行し、動作を確認します。 C1TrueDBGrid1 には、チュートリアル チュートリアル1:C1TrueDBGrid を DataSet に連結する に連結するで指定されたデータが表示されま 284 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms す。 グリッドデータの上に、ユーザー入力を受け取る行があります。これがフィルタバーです。このバーにデータを入力する と、グリッドは自動的に列データをソートします。 ソート前のグリッドは次のとおりです。 ソート後のグリッドは次のとおりです。 独自にソートを処理する場合は、AllowFilter プロパティを False に変更します(FilterBar は True のまま)。次 に、FilterChange イベントを処理する必要があります。このイベントは、フィルタバーの状態が変化するたびに発生し ます。 これでチュートリアル 21は終了です。 チュートリアル チュートリアル22: 境界線、スクロールトラッキング、スクロールヒント 285 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms このチュートリアルでは、境界線の設定、スクロールトラッキングおよびスクロールヒントについて学びます。 1. 新しいプロジェクトを作成します。フォームに C1TrueDBGrid を追加します。 2. フォームにアイテムを追加し、下の図のように配置します。 コンボボックスを5つ(ComboBox1~5)追加します。 グループボックスを2つ追加し、テキストプロパティをそれぞれセル枠のサイズ セル枠のサイズおよび「スクロール」に設定します。 ラベルを5つ(Label1~5)追加し、テキストプロパティをそれぞれ上 上、下 下、左 左、右 右および「セル枠の表示形態 セル枠の表示形態」に設 定します。 ボタン(Button1)を追加し、テキストプロパティをセル枠の色 セル枠の色に設定します。 最後にチェックボックスを2つ追加し、テキストプロパティをそれぞれチップ表示 チップ表示とトラッキング トラッキングに設定します。 3. フォームにカラーダイアログボックス(ColorDialog1)を追加します。 4. C1TrueDBGrid タスク タスクメニューで、データソースの選択 データソースの選択ドロップダウン矢印をクリックし、ドロップダウンボックスからプロ プロ ジェクトのデータソースの追加 ジェクトのデータソースの追加リンクを選択します。データソース構成ウィザード 。データソース構成ウィザードが表示されます。[データソースの種類の データソースの種類の 選択 選択ページ上で選択されているデフォルト設定である[データベース データベース]をそのままにして、〈次へ 次へ〉をクリックします。〈新しい 新しい 接続 接続〉ボタンをクリックし、新しい接続を作成するか、ドロップダウンリストから1つ選択します。データベースオブジェクトの データベースオブジェクトの 選択 選択ページで、Customer テーブルを選択し、すべてのフィールドを含めます。データセット名 データセット名ボックスに DsCustomer と 入力し、完了 完了をクリックしてウィザードを終了します。新しいデータソースをプロジェクトに追加する方法については、「手順 手順 2::DataSet への C1TrueDBGrid の連結 の連結」を参照してください。 5. グリッドをクリックしてフォーカスを移動し、プロパティウィンドウで RowHeight プロパティを 40 に設定します。 6. VisualStudio は、Form_Loadイベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.CustomerTableAdapter.Fill(Me.DsCustomer.Customer) C# コードの書き方 286 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# this.CustomerTableAdapter.Fill(this.DsCustomer.Customer); 7. Form1 の一般セクションに次の宣言を追加します。 Visual Basic コードの書き方 Visual Basic ' データをコピーします。 Dim dbTable As DataTable Dim borderColor As Color Dim borderLeft As Integer, borderTop As Integer, borderRight As Integer, borderBottom As Integer Dim borderType As C1.Win.C1TrueDBGrid.BorderTypeEnum C# コードの書き方 C# // データをコピーします。 DataTable dbTable; Color borderColor; int borderLeft, int borderTop, int borderRight, int borderBottom; C1.Win.C1TrueDBGrid.BorderTypeEnum borderType; 8. フォーム1の Load イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic dbTable = Me.DsCustomer.Tables(0).Copy() ' 各コントロールを初期化します。 FillComboBox1() FillCombo(ComboBox2) FillCombo(ComboBox3) FillCombo(ComboBox4) FillCombo(ComboBox5) Me.CheckBox2.Checked = True ' 境界線を初期化します。 Me.borderBottom = 1 Me.borderLeft = 1 Me.borderRight = 1 Me.borderTop = 1 C# コードの書き方 C# dbTable = this.DsCustomer.Tables[0].Copy(); // 各コントロールを初期化します。 287 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms FillComboBox1(); FillCombo(comboBox2); FillCombo(comboBox3); FillCombo(comboBox4); FillCombo(comboBox5); this.checkBox2.Checked = true; // 境界線を初期化します。 this.borderBottom = 1; this.borderLeft = 1; this.borderRight = 1; this.borderTop = 1; 9. コンボボックスにデータを挿入するためのコードを追加します。 Visual Basic コードの書き方 Visual Basic ' コンボボックスに値を挿入します。 Private Sub FillCombo(ByRef com As ComboBox) Dim i As Integer com.Text = 1 For i = 1 To 10 com.Items.Add(i) Next End Sub ' コンボボックスに境界線の種類を挿入します。 Private Sub FillComboBox1() Me.ComboBox1.Text = "None" With Me.ComboBox1.Items .Add("Fillet") .Add("Flat") .Add("Groove") .Add("Inset") .Add("InsetBevel") .Add("None") .Add("Raised") .Add("RaisedBevel") End With End Sub C# コードの書き方 C# // コンボボックスに値を挿入します。 private void FillCombo(ref ComboBox com) { int i; com.Text = 1; for (i = 1 ; i <= 10; i++) { com.Items.Add[I]; } 288 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms } // コンボボックスに境界線の種類を挿入します。 private void FillComboBox1() { this.comboBox1.Text = "None"; this.comboBox1.Items.Add("Fillet"); this.comboBox1.Items.Add("Flat"); this.comboBox1.Items.Add("Groove"); this.comboBox1.Items.Add("Inset"); this.comboBox1.Items.Add("InsetBevel"); this.comboBox1.Items.Add("None"); this.comboBox1.Items.Add("Raised"); this.comboBox1.Items.Add("RaisedBevel"); } 10. Button1 の Clickイベントハンドラを作成します。このコードでは、カラーダイアログボックスを使って境界線の色を設定し ています。 Visual Basic コードの書き方 Visual Basic Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim result As DialogResult result = Me.ColorDialog1.ShowDialog() If result = DialogResult.OK Then borderColor = Me.ColorDialog1.Color Button1.BackColor = borderColor End If UpdateBorder() End Sub C# コードの書き方 C# private void button1_Click(System.object sender, button1.Click { DialogResult result; result = this.colorDialog1.ShowDialog(); if (result == DialogResult.OK ) { borderColor = this.colorDialog1.Color; button1.BackColor = borderColor; } UpdateBorder(); } System.EventArgs e) 11. 境界線を更新する機能を追加します。 Visual Basic コードの書き方 Visual Basic Private Sub UpdateBorder() With 289 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Me.C1TrueDBGrid1.Splits(0).DisplayColumns(Me.C1TrueDBGrid1.Col).Style.Borders .Color = ColorDialog1.Color .BorderType = borderType .Bottom = borderBottom .Left = borderLeft .Right = borderRight .Top = borderTop End With End Sub C# コードの書き方 C# private void UpdateBorder() { C1.Win.C1TrueDBGrid.GridBorders b; b = this.c1TrueDBGrid1.Splits[0].DisplayColumns(this.c1TrueDBGrid1.Col).Style.Borders; b.Color = colorDialog1.Color; b.BorderType = borderType; b.Bottom = borderBottom; b.Left = borderLeft; b.Right = borderRight; b.Top = borderTop; } 12. コンボボックスの値の変更を処理するコードを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub ComboBox1_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectionChangeCommitted Select Case Me.ComboBox1.SelectedItem Case "Fillet" Me.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.Fillet Case "Flat" Me.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.Flat Case "Groove" Me.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.Groove Case "Inset" Me.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.Inset Case "InsetBevel" Me.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.InsetBevel Case "None" Me.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.None Case "Raised" Me.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.Raised Case "RaisedBevel" Me.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.RaisedBevel End Select Me.UpdateBorder() End Sub 290 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Private Sub ComboBox2_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectionChangeCommitted Me.borderTop = Me.ComboBox2.SelectedItem Me.UpdateBorder() End Sub Private Sub ComboBox3_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox3.SelectionChangeCommitted Me.borderBottom = Me.ComboBox3.SelectedItem Me.UpdateBorder() End Sub Private Sub ComboBox4_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox4.SelectionChangeCommitted Me.borderLeft = Me.ComboBox4.SelectedItem Me.UpdateBorder() End Sub Private Sub ComboBox5_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox5.SelectionChangeCommitted Me.borderRight = Me.ComboBox5.SelectedItem Me.UpdateBorder() End Sub C# コードの書き方 C# private void ComboBox1_SelectionChangeCommitted(object sender, System.EventArgs e) { switch (this.comboBox1.SelectedItem) { case "Fillet"; this.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.Fillet; break; case "Flat"; this.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.Flat; break; case "Groove"; this.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.Groove; break; case "Inset"; this.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.Inset; break; case "InsetBevel"; this.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.InsetBevel; break; case "None"; this.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.None; break; case "Raised"; this.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.Raised; break; case "RaisedBevel"; 291 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.borderType = C1.Win.C1TrueDBGrid.BorderTypeEnum.RaisedBevel; break; } this.UpdateBorder(); } private void comboBox2_SelectionChangeCommitted(object sender, e) { this.borderTop = this.comboBox2.SelectedItem; this.UpdateBorder(); } System.EventArgs private void comboBox3_SelectionChangeCommitted(object sender, e) { this.borderBottom = this.comboBox3.SelectedItem; this.UpdateBorder(); } System.EventArgs private void comboBox4_SelectionChangeCommitted(object sender, e) { this.borderLeft = this.comboBox4.SelectedItem; this.UpdateBorder(); } System.EventArgs private void comboBox5_SelectionChangeCommitted(object sender, e) { this.borderRight = this.comboBox5.SelectedItem; this.UpdateBorder(); } System.EventArgs 13. 最後に、FetchScrollTipsイベントを処理するコードを追加します。このイベントでは、ユーザーがスクロールしたときに表 示されるツールチップボックスを設定しています。 Visual Basic コードの書き方 Visual Basic Private Sub CheckBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.Click Me.C1TrueDBGrid1.ScrollTips = Me.CheckBox1.Checked End Sub Private Sub CheckBox2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox2.Click Me.C1TrueDBGrid1.ScrollTrack = Me.CheckBox2.Checked End Sub Private Sub C1TrueDBGrid1_FetchScrollTips(ByVal sender As System.Object, ByVal e As C1.Win.C1TrueDBGrid.FetchScrollTipsEventArgs) Handles C1TrueDBGrid1.FetchScrollTips ' 移動されたスクロールバーにScrollTipを設定します。 Select Case e.ScrollBar Case C1.Win.C1TrueDBGrid.ScrollBarEnum.Horizontal e.ScrollTip = Me.C1TrueDBGrid1.Columns(e.ColIndex).Caption 292 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Case C1.Win.C1TrueDBGrid.ScrollBarEnum.Vertical e.ScrollTip = "Record: " & CStr(e.Row + 1) & " of " & CStr(Me.dbTable.Rows.Count) & vbCrLf & "Company: " & Me.dbTable.Rows(e.Row).Item("Company") & vbCrLf & "User code: " & Me.dbTable.Rows(e.Row).Item("UserCode") End Select e.TipStyle.ForeColor = Color.Blue End Sub C# コードの書き方 C# private void checkBox1_Click(object sender, System.EventArgs e) { this.c1TrueDBGrid1.ScrollTips = this.checkBox1.Checked; } private void checkBox2_Click(object sender, System.EventArgs e) { this.c1TrueDBGrid1.ScrollTrack = this.checkBox2.Checked; } private void c1TrueDBGrid1_FetchScrollTips(System.object sender, C1.Win.C1TrueDBGrid.FetchScrollTipsEventArgs e) { // 移動されたスクロールバーにScrollTipを設定します。 switch (e.ScrollBar) { case C1.Win.C1TrueDBGrid.ScrollBarEnum.Horizontal: e.ScrollTip = this.c1TrueDBGrid1.Columns[e.ColIndex].Caption; break; case C1.Win.C1TrueDBGrid.ScrollBarEnum.Vertical: e.ScrollTip = "Record: " + (e.Row + 1).ToString() + " of " + this.dbTable.Rows.Count.ToString() + "\n" + "Company: " + this.dbTable.Rows[e.Row] ["Company"].ToString() + "\n" + "User code: " + this.dbTable.Rows[e.Row] ["UserCode"].ToString(); break; } e.TipStyle.ForeColor = Color.Blue; } VisualStudio は、 は、Form_Loadイベントに次のコードを追加します。 イベントに次のコードを追加します。 C1TrueDBGrid1 には、指定したデータが表示されます。 トラッキング トラッキングのチェックをON にすると、データが同時にスクロールされながら表示されます。 チップ表示 チップ表示のチェックを ON にすると、スクロール中にツールチップボックスに列情報が表示されます。 コンボボックスとカラーダイアログボックスを操作すると、列のセルの周囲に境界線を作成して、境界線をシステム色の1 つに設定できます。 293 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms これでチュートリアル 22 は終了です。 294 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms タスク別ヘルプ タスク別ヘルプは、ユーザーの皆様が Visual Studio のプログラミングに精通しており、C1TrueDBGrid コントロールを使用す る方法を理解していることを前提としています。TrueDBGrid for WinForms 製品に精通していない場合は、初めに チュート リアル リアルを参照してください。 このセクションの各トピックは、TrueDBGrid for WinForms 製品を使用して特定のタスクを行うためのソリューションを提供し ます。 また、タスクベースのヘルプトピックは、新しい .NET プロジェクトが既に作成されていることを前提としています。新規プロジェ クトの作成については、クイックスタートを参照してください。 いくつかの例は TDBGDemo.mdb を参照していますが、これはデフォルトで C:\Program Files\Common Files\C1Studio\Data にインストールされます。 行に関するタスク AddNew 行に移動する C1TrueDBGrid に新しい行を追加するには、AllowAddNew プロパティとUpdateData メソッドを使用します。 1. AllowAddNewプロパティを True に設定します。 デザイナの場合 プロパティウィンドウで AllowAddNew プロパティを見つけ、これを True に設定します。 コードの場合 Form_Load イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.AllowAddNew = True C# コードの書き方 C# this.c1TrueDBGrid1.AllowAddNew = true; 2. Form_Load イベントに次のコードを追加して、グリッドの最後の列に移動します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.MoveLast() C# コードの書き方 C# this.c1TrueDBGrid.MoveLast(); 3. 新しい行を選択します。 Visual Basic コードの書き方 295 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic Me.C1TrueDBGrid1.Row = Me.C1TrueDBGrid1.Row + 1 Me.C1TrueDBGrid1.Select() C# コードの書き方 C# this.c1TrueDBGrid1.Row = this.c1TrueDBGrid1.Row + 1; this.c1TrueDBGrid1.Select(); 4. 最初の 3 列の新しいセルに値を割り当てます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns(0).Text = "New Row" Me.C1TrueDBGrid1.Columns(1).Text = "New Row" Me.C1TrueDBGrid1.Columns(2).Text = "New Row" C# コードの書き方 C# this.c1TrueDBGrid1.Columns[0].Text = "New Row"; this.c1TrueDBGrid1.Columns[1].Text = "New Row"; this.c1TrueDBGrid1.Columns[2].Text = "New Row"; 5. データをデータセットに更新します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.UpdateData() C# コードの書き方 C# this.c1TrueDBGrid1.UpdateData(); このトピックの作業結果 この例では、TDBGDemo.mdb に新しい行を追加しました。 296 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms グリッド内で選択されているすべての行への参照を保持するコレクションをポイントするSelectedRows プロパティもあります。 新しい行を追加する C1TrueDBGrid に新しい行を追加するには、AllowAddNew プロパティとUpdateData メソッドを使用します。 1. AllowAddNewプロパティを True に設定します。 デザイナの場合 プロパティウィンドウで AllowAddNew プロパティを見つけ、これを True に設定します。 コードの場合 Form_Load イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.AllowAddNew = True C# コードの書き方 C# this.c1TrueDBGrid1.AllowAddNew = true; 2. Form_Load イベントに次のコードを追加して、グリッドの最後の列に移動します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.MoveLast() C# コードの書き方 C# 297 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.c1TrueDBGrid.MoveLast(); 3. 新しい行を選択します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Row = Me.C1TrueDBGrid1.Row + 1 Me.C1TrueDBGrid1.Select() C# コードの書き方 C# this.c1TrueDBGrid1.Row = this.c1TrueDBGrid1.Row + 1; this.c1TrueDBGrid1.Select(); 4. 最初の 3 列の新しいセルに値を割り当てます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns(0).Text = "New Row" Me.C1TrueDBGrid1.Columns(1).Text = "New Row" Me.C1TrueDBGrid1.Columns(2).Text = "New Row" C# コードの書き方 C# this.c1TrueDBGrid1.Columns[0].Text = "New Row"; this.c1TrueDBGrid1.Columns[1].Text = "New Row"; this.c1TrueDBGrid1.Columns[2].Text = "New Row"; 5. データをデータセットに更新します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.UpdateData() C# コードの書き方 C# this.c1TrueDBGrid1.UpdateData(); このトピックの作業結果 この例では、TDBGDemo.mdb に新しい行を追加しました。 298 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms グリッド内で選択されているすべての行への参照を保持するコレクションをポイントするSelectedRows プロパティもあります。 行を選択する 行を強調表示しても選択したことにはなりません。行を選択するには、その行を SelectedRowCollection に追加する必要が あります。これには、Add メソッドを使用します。 Selectボタンの Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.SelectedRows.Add(Me.C1TrueDBGrid1.Bookmark) C# コードの書き方 C# this.c1TrueDBGrid1.SelectedRows.Add(this.c1TrueDBGrid1.Bookmark); このトピックの作業結果 この例を使用すると、現在の行が選択されます。 299 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Add メソッドが使用されている例については、 チュートリアル チュートリアル5: ブックマークを使って複数の行を選択する ブックマークを使って複数の行を選択するを参照してくださ い。 グリッド内で選択されている行の値にアクセスする グリッド内で選択されている行の値にアクセスするには、SelectedRow コレクションにアクセスする必要があります。 次のコードを使用して、選択されている行をそれぞれデバッグウィンドウに書き込みます。 Visual Basic コードの書き方 Visual Basic Dim row As Integer For Each row In Me.C1TrueDBGrid1.SelectedRows Debug.WriteLine(Me.C1TrueDBGrid1.Columns(0).CellValue(row)) Next C# コードの書き方 C# int row; foreach (int row in this.c1TrueDBGrid1.SelectedRows) { Debug.WriteLine(this.c1TrueDBGrid1.Columns(0).CellValue(row)); } グリッドのインデックスを使用して行にアクセスすることもできます。次のコードを使用します。 Visual Basic コードの書き方 Visual Basic Dim row As Integer For Each row In Me.C1TrueDBGrid1.SelectedRows Debug.WriteLine(Me.C1TrueDBGrid1(row, 0).ToString()) 300 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Next C# コードの書き方 C# int row; foreach (int row in this.c1TrueDBGrid1.SelectedRows) { Debug.WriteLine(this.c1TrueDBGrid1(row, 0).ToString()); } この例のチュートリアル チュートリアル5: ブックマークを使って複数の行を選択する ブックマークを使って複数の行を選択するでは、Button1_Click イベントに次のコードを追加しまし た。 Visual Basic コードの書き方 Visual Basic Dim row As Integer For Each row In Me.C1TrueDBGrid1.SelectedRows Debug.WriteLine(Me.C1TrueDBGrid1(row, 1).ToString()) Next C# コードの書き方 C# int row; foreach (int row in this.c1TrueDBGrid1.SelectedRows) { Debug.WriteLine(this.c1TrueDBGrid1(row, 1).ToString()); } このトピックの作業結果 選択されている行の各作曲家の姓がデバッグウィンドウに返されます。 301 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 行の背景色を設定する 行の背景色を設定するには、FetchRowStyles プロパティを設定して、FetchRowStyle イベントを発生させます。 1. FetchRowStyles プロパティを True に設定します。 デザイナの場合 プロパティウィンドウで FetchRowStyles プロパティを見つけ、これを True に設定します。 コードの場合 Form_Load イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.FetchRowStyles = True C# コードの書き方 C# this.c1TrueDBGrid1.FetchRowStyles = true; 2. FetchRowStyle イベントを使用して、目的の行の背景色を指定します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_FetchRowStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles C1TrueDBGrid1.FetchRowStyle Dim S As String = C1TrueDBGrid1.Columns("Country").CellText(e.Row).ToString If S <> "Germany" Then e.CellStyle.BackColor = System.Drawing.Color.LemonChiffon End If End Sub C# コードの書き方 C# private void c1TrueDBGrid1_FetchRowStyle(object sender, C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs e) { string S = c1TrueDBGrid1.Columns("Country").CellText(e.Row).ToString; if (S != "Germany") { e.CellStyle.BackColor = System.Drawing.Color.LemonChiffon; } } このトピックの作業結果 この例では、Country 列にGermanyという単語がない行の背景色がレモンクリーム色になります。 302 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 個々の行の高さを設定する 個々の行の高さを設定するには、AllowRowSizing プロパティを IndividualRowsに設定してから、行に高さ値を割り当てま す。 1. AllowRowSizing プロパティを RowSizingEnum.IndividualRows に設定します。 デザイナの場合 プロパティウィンドウで AllowRowSizing プロパティを見つけ、これを RowSizingEnum.IndividualRows に設定しま す。 コードの場合 Form_Loadイベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.AllowRowSizing = C1.Win.C1TrueDBGrid.RowSizingEnum.IndividualRows 303 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# コードの書き方 C# this.c1TrueDBGrid1.AllowRowSizing = C1.Win.C1TrueDBGrid.RowSizing.IndividualRows; 2. Form_Loadイベントに次のコードを追加して、最初の 2 行に異なる行の高さを割り当てます。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).Rows(0).Height = 25 Me.C1TrueDBGrid1.Splits(0).Rows(1).Height = 50 C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].Rows[0].Height = 25; this.c1TrueDBGrid1.Splits[0].Rows[1].Height = 50; このトピックの作業結果 1 行目の高さは 25、2 行目の高さは 50 に設定されます。 選択行を強調表示する 選択したセルの行を強調表示するには、MarqueeStyle プロパティをHighlightRowに設定します。このプロパティは、デザイ ナまたはコードで設定できます。 デザイナの場合 304 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 1. プロパティウィンドウで MarqueeStyle プロパティを見つけ、これを HighlightRow に設定します。 2. HighlightRowStyleプロパティの横にあるプロパティウィンドウの省略符ボタンをクリックして、スタイルエディタを開き ます。 3. 内容 内容タブで、前景色 前景色をWhiteSmokeに設定します。 4. 塗りつぶし効果 塗りつぶし効果タブで、背景色 背景色をNavyに設定します。 5. Okをクリックして、スタイルエディタを閉じます。 コードの場合 1. Form_Load イベントに次のコードを追加して、MarqueeStyle プロパティを HighlightRow に設定します。 305 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightRow C# コードの書き方 C# this.c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightRow; 2. 強調表示の[前景色 前景色(ForeColor)]を[白灰色 白灰色(WhiteSmoke)]に設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.HighLightRowStyle.ForeColor = Color.WhiteSmoke C# コードの書き方 C# this.c1TrueDBGrid1.HighLightRowStyle.ForeColor = Color.WhiteSmoke; 3. 強調表示の[背景色 背景色(BackColor)]を[藍色( 藍色(Navy)]に設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.HighLightRowStyle.BackColor = Color.Navy C# コードの書き方 C# this.c1TrueDBGrid1.HighLightRowStyle.BackColor = Color.Navy; このトピックの作業結果 セルを選択すると、行全体が白灰色のテキストと藍色の背景で強調表示されます。 306 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ソートやフィルタリング後に DataRow を取得する グリッドにソートまたはフィルタを適用する場合は、DataSource および DataMember の基底の DataView が使用されます。ソートまたはフィルタ 後に行インデックスに基づいて DataRow を取得するには、次のコードを使用して、グリッドからアクセスされる基底のリストと同じリストにアクセス します。 Visual Basic コードの書き方 Visual Basic If Me.C1TrueDBGrid1.FocusedSplit.Rows(Me.C1TrueDBGrid1.Row).RowType = C1.Win.C1TrueDBGrid.RowTypeEnum.DataRow Then Dim dr As System.Data.DataRowView = CType(Me.C1TrueDBGrid1(Me.C1TrueDBGrid1.RowBookmark(Me.C1TrueDBGrid1.Row)), System.Data.DataRowView) End If C#コードの書き方 C# if (this.c1TrueDBGrid1.FocusedSplit.Rows[this.c1TrueDBGrid1.Row].RowType == C1.Win.C1TrueDBGrid.RowTypeEnum.DataRow) { System.Data.DataRowView dr = (System.Data.DataRowView)this.c1TrueDBGrid1[this.c1TrueDBGrid1.RowBookmark(this.c1TrueDBGrid1.Row)]; } 特定の条件に基づいて行を書式設定する 特定の条件に基づいて行の書式設定を行うには、FetchRowStylesプロパティとFetchRowStyle イベントを使用します。この 例では、Birth または Death 列に値がない行を緑色で強調表示します。また、他の行はすべてロックし、青灰色の Tahoma フォントで書式設定します。 1. FetchRowStyles プロパティを True に設定します。 デザイナの場合 プロパティウィンドウで FetchRowStyles プロパティを見つけ、これを True に設定します。 コードの場合 Form_Loadイベントに次のコードを追加します。 307 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.FetchRowStyles = True C# コードの書き方 C# this.c1TrueDBGrid1.FetchRowStyles = true; 2. FetchRowStyle イベントを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_FetchRowStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles C1TrueDBGrid1.FetchRowStyle End Sub C# コードの書き方 C# private void c1TrueDBGrid1_FetchRowStyle(object sender, C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs e) { } 3. FetchRowStyle イベントに次のコードを追加して、Birth および Death 列の値を取得するための変数を宣言します。 Visual Basic コードの書き方 Visual Basic ' 列の値を取得するための変数を宣言します。 Dim bday As String = Me.C1TrueDBGrid1.Columns("Birth").CellText(e.Row).ToString Dim ddate As String = Me.C1TrueDBGrid1.Columns("Death").CellText(e.Row).ToString C# コードの書き方 C# // 列の値を取得するための変数を宣言します。 string bday = this.c1TrueDBGrid1.Columns["Birth"].CellText(e.Row).ToString; string ddate = this.c1TrueDBGrid1.Columns["Death"].CellText(e.Row).ToString; 4. 手順 3 のコードの後に次のコードを追加して、Birth および Death 列に空のセルがない場合は、編集を無効にし、フォ ントを変更します。 Visual Basic コードの書き方 Visual Basic 308 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ' 列の値を取得するための変数を宣言します。 If (bday <> "" AndAlso ddate <> "") And (bday <> "" OrElse ddate <> "") Then e.CellStyle.Locked = True e.CellStyle.Font = New Font("Tahoma", 9) e.CellStyle.ForeColor = Color.SteelBlue End If C# コードの書き方 C# // 列の値を取得するための変数を宣言します。 if ((bday != "" && ddate != "") And (bday != "" || ddate != "")) { e.CellStyle.Locked = true; e.CellStyle.Font = new Font("Tahoma", 9); e.CellStyle.ForeColor = Color.SteelBlue; } 5. 手順 4 の後に次のコードを追加して、空のセルを含む行を強調表示します。 Visual Basic コードの書き方 Visual Basic ' Birth または Death 列に空のセルがある場合は、その行を強調表示します。 If bday = "" Or ddate = "" Then e.CellStyle.BackColor = Color.PaleGreen End If C# コードの書き方 C# // Birth または Death 列に空のセルがある場合は、その行を強調表示します。 if (bday == "" || ddate == "" { e.CellStyle.BackColor = Color.PaleGreen; } このトピックの作業結果 Birth または Death列の値が空の行が強調表示されます。他の行は、編集できなくなり、フォントが変更されます。空のセルに 値を追加すると、そのセルの書式設定が変更されます。 309 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms フッターに列の合計を表示する 列のすべての値の合計をグリッドのフッターに簡単に表示できます。これを行うには、 ColumnFootersプロパティを Trueに設 定して、列フッターを表示する必要があります。以下の例では、グリッドが Northwind データベースの Productsテーブルにバ インドされていることに注意してください。 UnitsInStock列の合計を計算するには、以下の手順を実行します。 1. コードエディタで、次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Public Sub CalculateFooter() Dim i As Integer Dim sum As Double For i = 0 To Me.C1TrueDBGrid1.Splits(0).Rows.Count - 1 sum += Me.C1TrueDBGrid1.Columns("UnitsInStock").CellValue(i) Next Me.C1TrueDBGrid1.Columns("UnitsInStock").FooterText = sum End Sub C#コードの書き方 C# public void CalculateFooter() { int i = 0; double sum = 0; for (i = 0; i <= this.c1TrueDBGrid1.Splits[0].Rows.Count - 1; i++) { sum += Convert.ToDouble(this.c1TrueDBGrid1.Columns["UnitsInStock"].CellValue(i)); } 310 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms this.c1TrueDBGrid1.Columns["UnitsInStock"].FooterText = Convert.ToString(sum); } このコードは、CalculateFooter 関数を作成して、UnitsInStock列の合計を計算します。 2. 次のコードをForm_Loadイベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.ColumnFooters = True CalculateFooter() C#コードの書き方 C# c1TrueDBGrid1.ColumnFooters = true; CalculateFooter(); このコードは、列フッターの表示状態を設定し、CalculateFooter関数を初期化します。 このトピックの作業結果 UnitsInStockの列の合計がグリッドのフッターに表示されています。 列に関するタスク 特定の列の編集を制限する 特定の列の編集を制限するには、Locked プロパティを True に設定します。このプロパティは、デザイナまたはコードで設定 できます。 デザイナの場合 311 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 1. C1TrueDBGrid デザイナ を開きます。C1TrueDBGrid デザイナ へのアクセス方法についてはC1TrueDBGrid デザイ ナへのアクセス ナへのアクセスを参照してください。 2. デザイナの右ペインにある Last 列をクリックして選択します。 ツールバーのドロップダウンリストから Last を選択して、列を選択することもできます。 3. 左ペインの Display Columnタブをクリックします。 4. Locked プロパティを見つけ、これを True に設定します。 5. OKをクリックして、デザイナを閉じます。 コードの場合 Form_Load イベントに次のコードを追加して、Last 列をロックします。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").Locked = True C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Locked = true; このトピックの作業結果 Last 列のセルは編集できませんが、他の列は編集できます。 列内のエントリを検索する インクリメンタルサーチを使用して列のエントリを検索するには、Timer コンポーネントをフォームに追加し、KeyPressおよ びTickイベントを設定します。 1. Timerコンポーネントをツールボックスからフォームに追加します。 312 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 2. TimerのIntervalプロパティを 1 秒に設定します。 デザイナの場合 プロパティウィンドウで Timer1のInterval プロパティを見つけ、これを 1000 に設定します。 コードの場合 Form_Loadイベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.Timer1.Interval = 1000 C#コードの書き方 C# this.timer1.Interval = 1000; 3. フォームレベルで検索文字列の変数を宣言します。 Visual Basic コードの書き方 Visual Basic Dim searchString As String = String.Empty C#コードの書き方 C# string searchString = string.Empty; 4. KeyPressイベントを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles C1TrueDBGrid1.KeyPress ' キーストロークを処理します。 e.Handled = True Me.searchString += e.KeyChar Dim count As Integer = Me.C1TrueDBGrid1.Splits(0).Rows.Count Dim start As Integer = Me.C1TrueDBGrid1.Row Dim current As Integer = (start + 1) Mod count ' 検索が開始位置に戻ったら停止します。 While current <> start ' 値を取得します。 Dim s As String = Me.C1TrueDBGrid1(current, Me.C1TrueDBGrid1.Col).ToString() 313 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ' 一致が見つかったら、終了します。 If s.Substring(0, Me.searchString.Length).ToUpper() = Me.searchString.ToUpper() Then Exit While End If ' 次の行を検索し、必要に応じて列を折り返します。 current = (current + 1) Mod count End While 'グリッドの現在行を更新します。 Me.C1TrueDBGrid1.Row = current ' エントリを強調表示します。 Me.C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightCell ' 検索文字列を 1 秒でクリアします。 Me.Timer1.Enabled = True End Sub C#コードの書き方 C# private void c1TrueDBGrid1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { // キーストロークを処理します。 e.Handled = true; this.searchString += e.KeyChar; int count = this.c1TrueDBGrid1.Splits[0].Rows.Count; int start = this.c1TrueDBGrid1.Row; int current = (start + 1) % count; //検索が開始位置に戻ったら停止します。 while( current != start ) { // 値を取得します。 string s = this.c1TrueDBGrid1[current, this.c1TrueDBGrid1.Col].ToString(); // 一致が見つかったら、終了します。 if( s.Substring(0, this.searchString.Length).ToUpper() == this.searchString.ToUpper() ) break; // 次の行を検索し、必要に応じて列を折り返します。 current = (current + 1) % count; } 314 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms // グリッドの現在行を更新します。 this.c1TrueDBGrid1.Row = current; // エントリを強調表示します。 this.c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightCell; // 検索文字列を 1 秒でクリアします。 this.timer1.Enabled = true; } 5. タイマーに Tickイベントを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Me.searchString = String.Empty Me.Timer1.Enabled = False End Sub C# コードの書き方 C# private void timer1_Tick(object sender, System.EventArgs e) { this.searchString = string.Empty; this.timer1.Enabled = false; } このトピックの作業結果 ユーザーが入力を行うと、その文字を含むセルが検索されて強調表示されます。この例では、Last 列で「V」を入力すると、 「Varese」が強調表示されます。 同じ文字で始まるエントリが複数ある場合は、次の文字を入力すると、それらの文字を含むエントリが強調表示されます。たと えば、Last 列で「Viv」を入力すると、「Vivaldi」が強調表示されます。 315 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 注意: 注意:1 秒後に、検索文字列はリセットされます。 列にグラデーションをかける 列にグラデーションの塗りつぶし効果を追加するには、GradientMode,BackColor,BackColor2 の各プロパティを設定しま す。また、GammaCorrectionプロパティを True に設定すると、より均一な輝度でグラデーションを適用できます。これらのプ ロパティは、デザイナまたはコードで設定できます。 デザイナの場合 1. C1TrueDBGrid タスク タスクメニューを使用してグラデーションの塗りつぶしを設定するには、グリッドの Last 列を選択し、こ れをクリックしてC1TrueDBGrid タスク タスクメニューを開きます。 2. メニューからColumn スタイル スタイルを選択します。 316 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 3. 4. 5. 6. 317 塗りつぶし 塗りつぶしタブをクリックします。 背景色 2を水色 水色に設定します。 グラデーションの方向 グラデーションの方向をForwardDiagonalに設定します。 ガンマ補正 ガンマ補正ボックスをオンにします。 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 7. Ok をクリックして、Column スタイル( スタイル(Last))ダイアログボックスを閉じます。 C1TrueDBGrid デザイナを使用 グラデーションの塗りつぶしを C1TrueDBGrid デザイナ から設定することもできます。デザイナを使用してグラデーションの 塗りつぶしを設定するには 1. C1TrueDBGrid デザイナ を開きます。C1TrueDBGrid デザイナ へのアクセス方法については、C1TrueDBGrid デザ イナへのアクセス イナへのアクセスを参照してください。 2. 右ペインにある Last 列をクリックして選択します。 ツールバーのドロップダウンリストから Last を選択して、列を選択することもできます。 3. 4. 5. 6. 7. 8. 318 左ペインのDisplay Columnタブをクリックします。 Style プロパティの横にある省略符ボタンをクリックして、スタイルエディタを開きます。 スタイルエディタで、塗りつぶし 塗りつぶしタブをクリックします。 背景色 2を水色 水色に設定します。 グラデーションの方向 グラデーションの方向をForwardDiagonalに設定します。 ガンマ補正 ガンマ補正ボックスをオンにします。 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 9. Okをクリックして、スタイルエディタを閉じます。 10. OKをクリックして、C1TrueDBGrid デザイナ を閉じます。 コードの場合 1. 次のコードを Form_Load イベントに追加して、GradientMode を ForwardDiagonal に設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").Style.GradientMode = C1.Win.C1TrueDBGrid.GradientModeEnum.ForwardDiagonal C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Style.GradientMode = C1.Win.C1TrueDBGrid.GradientModeEnum.ForwardDiagonal; 2. C1.Win.C1TrueDBGrid.Style.BackColor2 を Aqua に設定します。 Visual Basic コードの書き方 Visual Basic 319 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").Style.BackColor2 = Color.Aqua C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Style.BackColor2 = Color.Aqua; 3. C1.Win.C1TrueDBGrid.Style.GammaCorrection を True に設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").Style.GammaCorrection = True C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Style.GammaCorrection = true; このトピックの作業結果 Last列には、対角線方向に白色から水色へのグラデーションの塗りつぶしがあります。 列のキャプションの高さを設定する 列のキャプションの高さを設定するには、ColumnCaptionHeight プロパティを設定します。このプロパティは、デザイナまた はコードで設定できます。 デザイナの場合 320 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 1. C1TrueDBGrid デザイナ を開きます。C1TrueDBGrid デザイナ へのアクセス方法については、C1TrueDBGrid デザ イナへのアクセス イナへのアクセスを参照してください。 2. 左ペインでSplit タブをクリックします。 3. ColumnCaptionHeight プロパティを見つけ、これを 34 に設定します。 4. Column タブをクリックします。 5. Caption プロパティを見つけ、これを First から Composer's First Name に変更します。 6. OK をクリックして、C1TrueDBGrid デザイナ を閉じます。 コードの場合 1. Form_Load イベントに次のコードを追加して、2 行が収まるように ColumnCaptionHeight プロパティを設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).ColumnCaptionHeight = Me.C1TrueDBGrid1.Splits(0).ColumnCaptionHeight * 2 C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].ColumnCaptionHeight = this.c1TrueDBGrid1.Splits[0].ColumnCaptionHeight * 2; 2. Caption プロパティを設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns(0).Caption = "Composer's First Name" C# コードの書き方 C# this.c1TrueDBGrid1.Columns[0].Caption = "Composer's First Name"; このトピックの作業結果 名を含む列のキャプションはComposer's First Nameに設定され、2 行にまたがります。 321 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 列の順序を変更する グリッド内の列の順序を変更するには、C1TrueDBGrid デザイナ を使用するか、コードでRemoveAt および Insert メソッドを 設定します。 デザイナの場合 1. C1TrueDBGrid デザイナ デザイナを開きます。C1TrueDBGrid デザイナ へのアクセス方法については、C1TrueDBGrid デザ イナへのアクセス イナへのアクセスを参照してください。 2. デザイナの右ペインで、Country 列を選択します。 3. Country列をクリックして左へドラッグします。列をドロップできる場所に赤色の矢印が表示されます。 4. First 列の前に Country 列をドロップします。 5. OK をクリックして、デザイナを閉じます。 コードの場合 1. Form_Load イベントに次のコードを追加して、Country 列に対応する変数を宣言します。 Visual Basic コードの書き方 Visual Basic Dim dispColumn As C1.Win.C1TrueDBGrid.C1DisplayColumn dispColumn = Me.C1TrueDBGrid1.Splits(0).DisplayColumns(2) C# コードの書き方 C# C1.Win.C1TrueDBGrid.C1DisplayColumn dispColumn; dispColumn = this.c1TrueDBGrid.Splits[0].DisplayColumns[2]; 322 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 2. First 列の前に Country 列を移動します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns.RemoveAt(2) Me.C1TrueDBGrid1.Splits(0).DisplayColumns.Insert(0, dispColumn) C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns.RemoveAt(2); this.c1TrueDBGrid1.Splits[0].DisplayColumns.Insert(0, dispColumn); このトピックの作業結果 グリッド内の First 列の前に Country 列が表示されます。 列のソートを無効にする 列のソートを無効にするには、AllowSort プロパティを False に設定します。このプロパティは、デザイナまたはコードで設定 できます。 デザイナの場合 プロパティウィンドウで AllowSort プロパティを見つけ、これを False に設定します。 323 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms コードの場合 Form_Load イベントに次のコードを追加して、 、AllowSort プロパティを False に設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.AllowSort = False C# コードの書き方 C# this.c1TrueDBGrid1.AllowSort = false; このトピックの作業結果 First 列をクリックしても、列がソートされません。 324 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 列のフォントスタイルを設定する 列のフォントスタイルは、デザイナまたはコードで設定できます。 デザイナの場合 1. C1TrueDBGrid タスク タスクメニューを使用してフォントスタイルを設定するには、グリッドの Country 列を選択し、これをク リックしてC1TrueDBGrid タスク タスクメニューを開きます。 2. メニューからColumn スタイル スタイルを選択して、[Column スタイル スタイル(Country)]ダイアログボックスを開きます。 3. Font プロパティの後の省略符ボタンをクリックして、フォント フォントダイアログボックスを開きます。 325 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 4. フォント フォントをTimes New Roman、フォントスタイル フォントスタイルを太字 太字に設定し、OKをクリックして[フォント]ダイアログボックスを閉じ ます。 5. OKをクリックして、[Column スタイル スタイル(Country)]ダイアログボックスを閉じます。 C1TrueDBGrid デザイナを使用 326 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms フォントスタイルを C1TrueDBGrid デザイナ から設定することもできます。デザイナを使用してフォントスタイルを設定するに は、C1TrueDBGrid デザイナ を開きます。C1TrueDBGrid デザイナ へのアクセス方法については、C1TrueDBGrid デザイナ へのアクセス へのアクセスを参照してください。 1. 右ペインから Country 列を選択します。 ツールバーのドロップダウンリストから Country を選択して、列を選択することもできます。 2. フォントをTimes New Romanに設定し、ツールバーの太字 太字をクリックします。 3. OK をクリックして、デザイナを閉じます。 コードの場合 1. 新しいフォントの変数を宣言します。 Visual Basic コードの書き方 Visual Basic Dim fntFont As Font C# コードの書き方 C# Font fntFont; 2. 目的の列のフォントを新しいフォントの変数に設定します。 Visual Basic コードの書き方 Visual Basic fntFont = New Font("Times New Roman", Me.C1TrueDBGrid1.Splits(0).DisplayColumns.Item("Country").Style.Font.Size, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).DisplayColumns.Item("Country").Style.Font = fntFont C# コードの書き方 C# fntFont = new Font("Times New Roman", this.c1TrueDBGrid1.Splits[0].DisplayColumns["Country"].Style.Font.Size, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].DisplayColumns["Country"].Style.Font = fntFont; このトピックの作業結果 327 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 名を含む列のキャプションはComposer's First Nameに設定され、2 行にまたがります。 セルスタイルの指定の詳細については、セルにスタイルを適用する セルにスタイルを適用するを参照してください。 列幅を拡大または縮小する グリッドのサイズ変更時に列幅を拡大または縮小するには、SpringMode プロパティを True に設定し、各列のMinWidth プ ロパティを設定します。これは、デザイナまたはコードで実行できます。 デザイナの場合 1. C1TrueDBGrid デザイナ C1TrueDBGrid デザイナへのアクセス デザイナへのアクセスを参照してください。 2. 左ペインでSplitタブをクリックします。 3. SpringMode プロパティを見つけ、これを True に設定します。 または、プロパティウィンドウで SpringMode プロパティを設定することもできます。 4. 右ペインで First 列をクリックして選択します。 ツールバーのドロップダウンリストから First を選択して、列を選択することもできます。 328 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 5. 左ペインのDisplay Column タブをクリックします。 6. MinWidth プロパティを見つけ、これを 50 に設定します。 7. OK をクリックして、デザイナを閉じます。 コードの場合 1. Form_Loadイベントに次のコードを追加して、SpringMode プロパティを True に設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.SpringMode = True C# コードの書き方 C# this.c1TrueDBGrid1.SpringMode = true; 2. First 列の MinWidth プロパティを 50 に設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns("First").MinWidth = 50 C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns["First"].MinWidth = 50; このトピックの作業結果 グリッドを水平方向にサイズ変更すると、各列の幅も比例して拡大または縮小されますが、First 列は幅 50 までしか縮小され ません。 329 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 列ヘッダに画像を配置する 列ヘッダに画像を配置するには、ForegroundImage および ForeGroundPicturePosition プロパティを設定します。これらのプロ パティは、デザイナまたはコードで設定できます。 デザイナの場合 1. C1TrueDBGrid タスク タスクメニューを使用して、列ヘッダに画像を配置するには、グリッドの Last 列を選択し、これをクリックし てC1TrueDBGrid タスク タスクメニューを開きます。 2. メニューからCaption スタイル スタイルを選択します。 330 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 3. 画像 画像タブをクリックします。 4. 前景画像 前景画像の横の省略符ボタンをクリックします。画像を参照し、開く 開くをクリックします。 5. 前景画像の配置方法 前景画像の配置方法ドロップダウンボックスを使用して、画像の配置方法を指定します。 6. Ok をクリックして、[Caption スタイル スタイル(Last)]ダイアログボックスを閉じます。 331 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1DisplayColumnCollection エディタの場合 または、C1DisplayColumnCollection エディタ エディタを使用して、設計時に画像を列ヘッダに配置することもできます。 1. Visual Studio のプロパティウィンドウで、グリッドの Splits プロパティの横にある省略符ボタン(…)をクリックしま す。SplitCollection エディタ エディタが表示されます。 2. DisplayColumns プロパティの横にある省略符ボタンをクリックして C1DisplayColumnCollection エディタ エディタを起動します。 3. 左側のメンバ メンバリストから列ヘッダを選択します。 4. 右側の HeadingStyle プロパティを拡張します。 5. C1.Win.C1TrueDBGrid.Style.ForegroundImage プロパティの横の省略符ボタンをクリックします。 6. 7. 8. 9. 画像を参照 画像を参照し、開く 開くをクリックします。 ForeGroundPicturePosition プロパティを使用して、画像の位置を指定します。 OK をクリックして、C1DisplayColumnCollection エディタ エディタを閉じます。 OK をもう一度クリックして、SplitCollection エディタ エディタを閉じます。 コードの場合 332 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Form_Load イベントに次のコードを追加します。 1. ヘッダーに表示する画像を指定します。 Visual Basic コードの書き方 Visual Basic Dim bmp As New Bitmap("c:\sort.bmp") C# コードの書き方 C# Bitmap bmp = new Bitmap("c:\\sort.bmp"); 2. 画像を表示する場所を指定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1).HeadingStyle.ForegroundImage = bmp Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1).HeadingStyle.ForeGroundPicturePosition = C1.Win.C1TrueDBGrid.ForeGroundPicturePositionEnum.LeftOfText C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].HeadingStyle.ForegroundImage = bmp; this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].HeadingStyle.ForeGroundPicturePosition = C1.Win.C1TrueDBGrid.ForeGroundPicturePositionEnum.LeftOfText; このトピックの作業結果 この例では、Last 列のヘッダーのテキストの左に画像が表示されます。 333 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 列をフリーズする グリッドの列をフリーズするには、Frozen プロパティを True に設定します。列をフリーズすると、ロックされてスクロールでき なくなり、この列よりインデックスが小さいすべての列もスクロールできなくなります。このプロパティは、デザイナまたはコード で設定できます。 デザイナの場合 1. C1TrueDBGrid デザイナ を開きます。C1TrueDBGrid デザイナ へのアクセス方法については、C1TrueDBGrid デザ イナへのアクセス イナへのアクセスを参照してください。 2. デザイナの右ペインにある Last 列をクリックして選択します。 ツールバーのドロップダウンリストから Last を選択して、列を選択することもできます。 3. 左ペインのDisplay Columnタブをクリックします。 4. Frozen プロパティを見つけ、これを True に設定します。 5. OKをクリックして、デザイナを閉じます。 コードの場合 Form_Load イベントに次のコードを追加して、Last 列をフリーズします。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").Frozen = True C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Frozen = true; このトピックの作業結果 First および Last 列はフリーズされ、右にスクロールされてもグリッドに残ります。 334 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms レコードセレクタ列を非表示にする レコードセレクタ列を非表示にするには、RecordSelectors プロパティを False に設定します。レコードセレクタ列を非表示に すると、行の選択が制限されます。このプロパティは、デザイナまたはコードで設定できます。 デザイナの場合 1. C1TrueDBGrid デザイナ を使用して RecordSelectors プロパティを設定するにはC1TrueDBGrid デザイナ を開きま す。C1TrueDBGrid デザイナ へのアクセス方法については、C1TrueDBGrid デザイナへのアクセス デザイナへのアクセスを参照してくださ い。 2. デザイナで、ツールバーの[レコードセレクタ]をクリックして、この列を非表示にします。 3. OKをクリックして、C1TrueDBGrid デザイナ を閉じます。 プロパティウィンドウを使用 プロパティウィンドウで RecordSelectors プロパティを設定することもできます。プロパティウィンドウで RecordSelectors プロ パティを設定するには、プロパティウィンドウで RecordSelectors プロパティを見つけ、これを False に設定します。 コードの場合 Form_Load イベントに次のコードを追加して、レコードセレクタ列を非表示にします。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.RecordSelectors = False C# コードの書き方 C# this.c1TrueDBGrid1.RecordSelectors = false; 335 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms このトピックの作業結果 レコードセレクタ列は表示されません。 列ヘッダを整列する 列のテキストを含めて列ヘッダを整列するか、列のテキストを含めないで列ヘッダを整列するか選択できます。次の例で は、Last 列のキャプションが中央揃えになります。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").HeadingStyle.HorizontalAlignment = AlignHorzEnum.Center C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].HeadingStyle.HorizontalAlignment = AlignHorzEnum.Center; このトピックの作業結果 Last 列のキャプションが中央揃えになっています 336 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms グリッド内のすべての列ヘッダを整列するには、各列で処理を繰り返します。 列に日付と時刻を表示する True DBGrid for WinFormsの以前のバージョンでは、 DateTimeのDataTypeを含む列では、デフォルトの動作で日付と時 刻の両方が列に表示されていました。現在のデフォルトの動作では、日付のみ表示されます。以下の手順では、日付と時刻 の両方を表示するために、列のNumberFormatプロパティを "g"(現在のカルチャの書式の応じて短い日付と短い時刻を表 示する)に設定し、実行時に日付と時刻の編集に使用する DateTimePicker を無効にします。 デザイナの場合 列に現在の日付と時刻の両方を表示するには、以下の手順を実行します。 1. プロパティウィンドウで、Columnsコレクションの横の〈...〉ボタンをクリックして、C1TrueDBGrid デザイナ デザイナを表示しま す。C1TrueDBGrid デザイナ デザイナにアクセスする方法について詳しくは、C1TrueDBGrid デザイナへのアクセス デザイナへのアクセスを参照し てください。 2. デザイナの右ペインで、変更する列を選択します。 3. 左ペインで、列 列タブを選択し、列のプロパティを表示します。 4. 列の NumberFormat プロパティの横のドロップダウン矢印を選択して、それを "g" に設定します。 5. 列のEnableDateTimeEditorプロパティの横のドロップダウン矢印を選択して、それを False に設定します。 6. OKをクリックし、変更内容を保存してデザイナを閉じます。 コードの場合 次のコードをForm_Loadイベントに追加して、2番目の列に日付と時刻の両方を表示します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Columns(1).EnableDateTimeEditor = False Me.C1TrueDBGrid1.Columns(1).NumberFormat = "g" C#コードの書き方 C# this.c1TrueDBGrid1.Columns[1].EnableDateTimeEditor = false; this.c1TrueDBGrid1.Columns[1].NumberFormat = "g"; 337 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms このトピックの作業結果 選択された列に日付と時刻の両方が表示されます。 セルに関するタスク 指定したセルの編集を無効にする FetchCellStyle イベントを使用して、個別のグリッドセルをロックできます。セル(1, 0)の値をロックするには 1. このセルを含む列の FetchStyle プロパティを True に設定します。 デザイナの場合 C1TrueDBGrid デザイナ を開きます。C1TrueDBGrid デザイナ へのアクセス方法について は、C1TrueDBGrid デザイナへのアクセス デザイナへのアクセスを参照してください。 右ペインで列をクリックして、First 列を選択します。 または、ツールバーのドロップダウンリストから選択することもできます。 左ペインのDisplay Columnタブをクリックします。 FetchStyle プロパティを True に設定します。 OKをクリックして、デザイナを閉じます。 コードの場合 Form_Load イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).FetchStyle = True C# コードの書き方 C# this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].FetchStyle = true; 2. 行 1 の値に対してのみ、CellStyleオブジェクトのLockedプロパティを True に設定します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_FetchCellStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs) Handles C1TrueDBGrid1.FetchCellStyle If e.Row = 1 Then e.CellStyle.Locked = True End If End Sub C# コードの書き方 C# private void C1TrueDBGrid1_FetchCellStyle(object sender, 338 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs e) { if (e.Row == 1) { e.CellStyle.Locked = true; } } このトピックの作業結果 セル(1, 0)の値の編集が不可となります。 選択したセルの列番号および行番号を取得する ユーザーが操作しているセル、つまり現在選択されているセルを調べることができるので便利です。選択されているセルの列 番号と行番号は簡単に取得できます。 たとえば、次のコードは、現在のセルの行番号と列番号を取得して表示します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Row = Me.C1TrueDBGrid1.RowContaining(C1TrueDBGrid1.Row) Me.C1TrueDBGrid1.Col = Me.C1TrueDBGrid1.ColContaining(C1TrueDBGrid1.Col) MessageBox.Show("列番号は " & Me.C1TrueDBGrid1.Col & " と行番号は " & Me.C1TrueDBGrid1.Row & " です。") C# コードの書き方 C# this.Me.C1TrueDBGrid1.Row = Me.C1TrueDBGrid1.RowContaining(C1TrueDBGrid1.Row) Me.C1TrueDBGrid1.Col = Me.C1TrueDBGrid1.ColContaining(C1TrueDBGrid1.Col) 339 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms MessageBox.Show("列番号は " & Me.C1TrueDBGrid1.Col & " と行番号は " & Me.C1TrueDBGrid1.Row & " です。") 選択された強調表示を無効にする MarqueeStyle プロパティと SelectedStyle プロパティを設定して、セルのハイライト表示を無効にできます。選択されたセル の行をハイライト表示するには、MarqueeStyle プロパティを NoMarquee に設定します。選択されたスタイルを無効にする には、SelectedStyle プロパティの属性を変更します。 デザイナの場合 デザイナを使用して、選択されたセルの行をハイライト表示するには、以下の手順を実行します。 1. 2. 3. 4. 5. プロパティウィンドウで MarqueeStyle プロパティを指定し、それを NoMarqueeに設定します。 プロパティウィンドウで、SelectedStyle プロパティの横の〈...〉ボタンをクリックして、スタイルエディタ スタイルエディタを表示します。 内容 内容タブで,前景色 前景色を黒色 黒色に設定します。 塗りつぶし 塗りつぶしタブで,背景色 背景色を透明 透明に設定します。 Ok をクリックして、スタイルエディタ スタイルエディタを閉じます。 コードの場合 コードを使用して、選択されたセルの行をハイライト表示するには、以下の手順を実行します。 1. 次のコードを Form_Load イベントに追加して、MarqueeStyle プロパティを NoMarquee に設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.NoMarquee C# コードの書き方 C# this.c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.NoMarquee; 2. ハイライト表示の前景色 前景色を黒色に設定します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.SelectedStyle.ForeColor = Color.Black C# コードの書き方 C# this.c1TrueDBGrid1.SelectedStyle.ForeColor = Color.Black; 3. ハイライト表示の背景色 背景色を透明に設定します。 Visual Basic コードの書き方 Visual Basic 340 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Me.C1TrueDBGrid1.Selected.BackColor = Color.Transparent C# コードの書き方 C# this.c1TrueDBGrid1.Selected.BackColor = Color.Transparent; このトピックの作業結果 選択されたセル、行、および列では、指定のハイライト表示が行われません。 データのエクスポート グリッドデータを文字区切りテキスト、Excel、HTML、PDF、または RTF ファイルとしてエクスポートできます。次の表は、各 ファイルタイプのエクスポートに使用するメソッドの説明です。 ファイルタイプ メソッド 説明 すべて ExportTo 文字区切りテ キスト ExportToDelimitedFile グリッドの指定された行を指定されたファイルに文字区切りテキス トとしてエクスポートします。 Excel ExportToExcel グリッドを Excel ファイルにエクスポートします。 HTML ExportToHTML グリッドを HTMLファイルにエクスポートします。 PDF ExportToPDF グリッドを PDFファイルにエクスポートします。 RTF ExportToRTF グリッドを RTF ファイルにエクスポートします。 エクスポート形式を選択するためのダイアログを開きます。 注意: 注意:C1TrueDBGrid のエクスポート機能は、 、C1Preview Classic のコンポーネントを内部で使用しており、アセンブリに 関するエラーが発生した場合は Reports for Windows Forms のアセンブリ (C1.Win.C1Report and C1.C1Report) を 参照する必要がある場合があります。 エクスポートメソッドのいずれかを設定するには、エクスポート エクスポートボタンの Click イベントに適切なコードを追加します。 341 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Excel にエクスポートする ExportToExcel メソッドを設定するには、エクスポート エクスポートボタンの Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.ExportToExcel("c:\temp\composers.xls") C# コードの書き方 C# this.c1TrueDBGrid1.ExportToExcel(@"c:\temp\composers.xls"); 注意: 注意:C1TrueDBGrid のエクスポート機能は、C1Preview Classic のコンポーネントを内部で使用しており、アセンブリに 関するエラーが発生した場合は Reports for Windows Forms のアセンブリ (C1.Win.C1Report and C1.C1Report) を 参照する必要がある場合があります。 このトピックの作業結果 エクスポート エクスポートボタンをクリックすると、一時ディレクトリに Excel ファイルが作成されます。 342 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms HTML にエクスポートする ExportToHTMLメソッドを設定するには、エクスポート エクスポートボタンの Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.ExportToHTML("c:\temp\composers.html") C# コードの書き方 C# this.c1TrueDBGrid1.ExportToHTML(@"c:\temp\composers.html"); 注意: 注意:C1TrueDBGrid のエクスポート機能は、C1Preview Classic のコンポーネントを内部で使用しており、アセンブリに 関するエラーが発生した場合は C1Preview Classic のアセンブリ(C1.Win.C1PrintPreview と C1.C1PrintDocument)を 参照する必要がある場合があります。 このトピックの作業結果 エクスポート エクスポートボタンをクリックすると、一時ディレクトリに HTML ファイルが作成されます。 343 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms PDF にエクスポートする ExportToPDFメソッドを設定するには、エクスポート エクスポートボタンの Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.ExportToPDF("c:\temp\composers.pdf") C#コードの書き方 C# this.c1TrueDBGrid1.ExportToPDF(@"c:\temp\composers.pdf"); 注意: 注意:C1TrueDBGrid のエクスポート機能は、C1Preview Classic のコンポーネントを内部で使用しており、アセンブリに 関するエラーが発生した場合は C1Preview Classic のアセンブリ(C1.Win.C1PrintPreview と C1.C1PrintDocument)を 参照する必要がある場合があります。 このトピックの作業結果 エクスポート ボタンをクリックすると、一時ディレクトリに PDF ファイルが作成されます。 344 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms RTF にエクスポートする ExportToRTFメソッドを設定するには、エクスポート エクスポートボタンの Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.ExportToRTF("c:\temp\composers.rtf") C#コードの書き方 C# this.c1TrueDBGrid1.ExportToRTF(@"c:\temp\composers.rtf"); 注意: 注意:C1TrueDBGrid のエクスポート機能は、C1Preview Classic のコンポーネントを内部で使用しており、アセンブリに 関するエラーが発生した場合は C1Preview Classic のアセンブリ(C1.Win.C1PrintPreview と C1.C1PrintDocument)を 参照する必要がある場合があります。 このトピックの作業結果 エクスポート エクスポートボタンをクリックすると、一時ディレクトリに RTF ファイルが作成されます。 345 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 文字区切りテキストにエクスポートする ExportToDelimitedFileメソッドを設定するには、エクスポート エクスポートボタンの Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.ExportToDelimitedFile("c:\temp\composers.csv", C1.Win.C1TrueDBGrid.RowSelectorEnum.AllRows, ",") C#コードの書き方 C# this.c1TrueDBGrid1.ExportToDelimitedFile(@"c:\temp\composers.csv", C1.Win.C1TrueDBGrid.RowSelectorEnum.AllRows, ","); 注意: 注意:C1TrueDBGrid のエクスポート機能は、C1Preview Classic のコンポーネントを内部で使用しており、アセンブリに 関するエラーが発生した場合は C1Preview Classic のアセンブリ(C1.Win.C1PrintPreview と C1.C1PrintDocument)を 参照する必要がある場合があります。 このトピックの作業結果 エクスポート エクスポートボタンをクリックすると、一時ディレクトリに文字区切りテキストファイルが作成されます。ファイル内の各値はカン マで区切られます。 346 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 有効なすべてのファイルタイプにエクスポートする ExportTo メソッドを設定するには、エクスポート エクスポートボタンの Click イベントに次のコードを追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.ExportTo() C# コードの書き方 C# this.c1TrueDBGrid1.ExportTo(); 注意: 注意:C1TrueDBGrid のエクスポート機能は、C1Preview Classic のコンポーネントを内部で使用しており、アセンブリに関 するエラーが発生した場合は C1Preview Classic のアセンブリ(C1.Win.C1PrintPreview と C1.C1PrintDocument)を参照 する必要がある場合があります。 このトピックの作業結果 エクスポート エクスポートボタンをクリックすると、TrueDBGrid 印刷のオプション 印刷のオプションダイアログが表示されます。 1. アクション アクションドロップダウンリストで、メタファイル、画像ファイルなどのファイルタイプを選択します。 2. ファイル名 ファイル名ボックスの横にある省略符ボタンをクリックして、エクスポート先 エクスポート先ダイアログを開きます。ファイルを保存する場 所を参照し、ファイル名 ファイル名ボックスにファイル名を入力します。OKをクリックして、エクスポート先 エクスポート先ダイアログを閉じます。 3. ページヘッダおよびページフッタ ページヘッダおよびページフッタで、ヘッダ テキストとフッタ テキストを追加します。 347 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 4. OKをクリックして、ファイルをエクスポートします。 最終出力は、次の図のように表示されます。 その他 ConnectionString を変更する C1TDBGDemo.mdb 参照の場所を変更するには、OleDbConnection の ConnectionString プロパティを編集します。 1. C1TrueDBGrid タスク タスクメニューで、データソースの選択 データソースの選択の横にあるドロップダウンボックスからプロジェクト プロジェクト データソースの追 加を選択します。 348 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 2. データソース構成ウィザードが表示されます。データソースの種類を選択 データソースの種類を選択ページでデータベース データベースを選択し、次へ 次へをクリックしま す。 3. 新しい接続 新しい接続ボタンをクリックし、新規接続を作成するか、ドロップダウンリストから接続を選択します。 349 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 4. 参照 参照ボタンをクリックし、データの場所を指定して、正しいログイン情報を入力します。接続の確認 接続の確認ボタンをクリックし、データ ベースまたはサーバーに正しく接続されていることを確認して、OKをクリックします。データ接続の選択 データ接続の選択ページに、新しい文字 列が表示されます。 5. 次へ 次へボタンをクリックして続行します。データファイルをプロジェクトに追加して接続文字列を修正するかどうかを確認するダイ アログボックスが表示されます。いいえ いいえをクリックします。 350 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 6. 次の名前で接続を保存する 次の名前で接続を保存するボックスをオンにして名前を入力し、その接続文字列をアプリケーション構成ファイルに保存しま す。次へ 次へボタンをクリックして続行します。 7. データベースオブジェクトの選択 データベースオブジェクトの選択ページで、データセットに必要なテーブルとフィールドを選択します。データセット名 データセット名ボックスに データセットの名前を入力し、完了 完了をクリックしてウィザードを終了します。 351 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms データセットと接続文字列がプロジェクトに追加されます。さらに、Visual Studio は、データセットを設定するためのコードを自 動的に作成します。 DataSource リセット時にグリッドのレイアウトを維持する コードで DataSource をリセットすると、グリッドにすべてのデータが表示され、デザイナで作成した初期のレイアウトは維持さ れません。 HoldFields パラメータを True に設定して SetDataBinding を使用すると、グリッドのレイアウトデザインを維持できます。例 を示します。 Visual Basic コードの書き方 Visual Basic C1TrueDBGrid1.SetDataBinding(DbDataSet, "Customer", True) C# コードの書き方 C# this.c1TrueDBGrid1.SetDataBinding(this.DbDataSet, "Customer", true); FetchCellStyle イベントを使用して列のスタイルを設定する。 列は移動したりソートされる可能性があるため、通常、表示列インデックスと列インデックスを使用する場合は、これらが異な る列を参照することに注意する必要があります。 特定の表示列にスタイルを関連付けることができます。次の例は、FetchCellStyle イベントを使用して、1 つの表示列にスタイ ルを関連付けています。 352 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_FetchCellStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs) Handles C1TrueDBGrid1.FetchCellStyle If Me.C1TrueDBGrid1.Splits(0).DisplayColumns(e.Col).DataColumn.Value.GetType Is GetType(Integer) Then e.CellStyle.ForeColor = Color.Red End If End Sub C# コードの書き方 C# private void c1TrueDBGrid1_FetchCellStyle(object sender, FetchCellStyleEventArgs e) { if (this.c1TrueDBGrid1.Splits[0].DisplayColumns[e.Col].DataColumn.Value.GetType() == typeof(string)) { e.CellStyle.ForeColor = Color.Red; } } 階層データビューで、グリッドの折りたたみを禁止する グリッドが階層データビューで表示されている場合は、ユーザーがグリッドを折りたたんで通常のデータビューにすることがで きないように設定できます。 Collapse イベントを使用して e.Cancel を True に設定すると、ユーザーは展開アイコンを折りたためなくなります。例を示しま す。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_Collapse(ByVal sender As System.Object, ByVal e As C1.Win.C1TrueDBGrid.BandEventArgs) Handles C1TrueDBGrid1.Collapse e.Cancel = True End Sub C# コードの書き方 C# private void c1TrueDBGrid1_Collapse(object sender, BandEventArgs e) { e.Cancel = true; } カスタムのエラーチェックを追加する 353 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C1TrueDBGrid は、プロジェクトの構築中にエラーが発生した場合、メッセージを表示します。この内部的なエラー処理をオフ にする必要がある場合には、次のようにします。 1. グリッドのErrorイベントHandledプロパティを True に設定します。これで、グリッドの組み込みエラー チェックがオフに なります。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_Error(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.ErrorEventArgs) Handles C1TrueDBGrid1.Error e.Handled = True End Sub C# コードの書き方 C# private void c1TrueDBGrid1_Error(object sender, C1.Win.C1TrueDBGrid.ErrorEventArgs e) { e.Handled = true; } 2. 次に独自のエラー処理コードを追加します。例を示します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_Error(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.ErrorEventArgs) Handles C1TrueDBGrid1.Error If C1TrueDBGrid1.Columns(C1TrueDBGrid1.Col).DataField = "CategoryID" Then e.Handled = True MessageBox.Show("Your User Friendly Message") Else e.Handled = False MessageBox.Show("Enter a string") End If End Sub C# コードの書き方 C# private void c1TrueDBGrid1_Error(object sender, C1.Win.C1TrueDBGrid.ErrorEventArgs e) { if (c1TrueDBGrid1.Columns[c1TrueDBGrid1.Col].DataField == "CategoryID") { e.Handled = true; MessageBox.Show("Your User Friendly Message"); } else { 354 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms e.Handled = false; MessageBox.Show("Enter a string"); } } グリッドのレイアウトを保存する グリッドのレイアウトを保存するには、SaveLayoutメソッドを使用して、XML ファイルにレイアウトを保存します。これは、デザ イナまたはコードで実行できます。 デザイナの場合 1. C1TrueDBGrid デザイナ を開きます。C1TrueDBGrid デザイナ へのアクセス方法については、C1TrueDBGrid デ ザイナへのアクセス ザイナへのアクセスを参照してください。 2. デザイナで、ツールバーのレイアウトの保存 レイアウトの保存をクリックして、名前を付けて保存 名前を付けて保存ダイアログボックスを開きます。 3. 保存場所を参照し、ファイル名 ファイル名ボックスにファイル名を入力します。 4. 保存 保存をクリックして、レイアウトを XML ファイルとして保存します。 5. OKをクリックして、デザイナを閉じます。 コードの場合 ボタンの Click イベントに次のコードを追加して、グリッドのレイアウトを保存します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.SaveLayout("c:\temp\ComposerLayout.xml") C# コードの書き方 C# this.c1TrueDBGrid1.SaveLayout(@"c:\temp\ComposerLayout.xml"); このトピックの作業結果 コードによるフォーカスを移動する 実行時のグリッドセルのフォーカスは、ユーザーのマウス/キーボードによるグリッドのインタラクティブ操作によって決まりま す。ただし、希望する場合は、グリッドの Col プロパティと Row プロパティを使用してフォーカスされるグリッドの列と行を設定 できます。 このトピックでは、2つの NumbericUpDown コントロールをフォームに追加します。これらのボックスの値が変わると、グリッ ドの列と行のフォーカスが変わります。 以下の手順を実行します。 1. Visual Studio ツールボックスに移動し、2つの Label コントロールと2つの NumberUpDown コントロールをフォーム に追加します。 2. NumberUpDown1 の横の Label1 と NumericUpDown2 の横の Label2 を整列し、コントロールに以下のプロパ 355 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms ティを設定します。 Label1.Textを "Column:" に設定します。 Label2.Text を "Row:" に設定します。 3. NumbericUpDown1 をダブルクリックし、ValueChanged イベントハンドラを作成して、コードビューに切り替えます。 4. 次のコードを NumericUpDown1_ValueChanged イベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Col = Me.NumericUpDown1.Value C# コードの書き方 C# this.c1TrueDBGrid1.Col = this.numericUpDown1.Value; 5. デザインビューに戻り、NumbericUpDown2 をダブルクリックして、ValueChanged イベントハンドラを作成し、コード ビューに切り替えます。 6. 次のコードをNumericUpDown2_ValueChangedイベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Row = Me.NumericUpDown2.Value C# コードの書き方 C# this.c1TrueDBGrid1.Row = this.numericUpDown2.Value; このトピックの作業結果 NumericUpDownボックスの値を変更します。グリッドのフォーカスが変わります。グリッドをスクロールしてフォーカス状態の 列と行が見えるようにして確認してください。 356 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 現在の列と行の表示 Using the RowプロパティとColプロパティを使用して、現在選択されている行と列のインデックスを取得できます。次の例で は、1つは現在選択されている行、もう1つは現在の列を表示する2つのテキストボックスをグリッドアプリケーションに追加しま す。 現在の行と列を表示するには、以下の手順を実行します。 1. Visual Studio ツールボックスから、2つのLabelコントロールと2つのTextBoxコントロールを追加します。 2. Label1がTextBox1の横に、Label2がTextBox2の横に来るように、コントロールのサイズを変更して配置します。 3. プロパティウィンドウで、以下のプロパティを設定します。 Label1の Textプロパティを 行 に設定します。 Label2の Textプロパティを 列 に設定します。 4. コードエディタで、次のRowColChangeイベントを追加します。 Visual Basic コードの書き方 Visual Basic Private Sub C1TrueDBGrid1_RowColChange(ByVal sender As System.Object, ByVal e As C1.Win.C1TrueDBGrid.RowColChangeEventArgs) Handles C1TrueDBGrid1.RowColChange Me.TextBox1.Text = C1TrueDBGrid1.Row Me.TextBox2.Text = C1TrueDBGrid1.Col End Sub C#コードの書き方 C# private void c1TrueDBGrid1_RowColChange(object sender, RowColChangeEventArgs e) { this.textBox1.Text = c1TrueDBGrid1.Row; this.textBox2.Text = c1TrueDBGrid1.Col; } このコードは、テキストボックスに表示する現在の行インデックスと列インデックスを設定します。 このトピックの作業結果 アプリケーションを実行し、行/列テキストボックスに選択されたグリルセルの行/列インデックスが表示されることを確認しま す。 357 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 別のセルを選択して、テキストボックスのテキストが変わり、現在選択されているセルの行インデックスと列インデックスが表示 されていることを確認してください。 プログラムを使って編集モードに入る 実行時には、通常ユーザーのマウス/キーボードによるグリッドのインタラクティブ操作によってセルの編集モードに入りま す。ただし、希望する場合、コーにより現在フォーカスされているセルが編集モードに入るように設定できます。編集モードに入 るには、単にEditActiveプロパティをTrueに設定します。 以下の手順では、編集するセルを選択するプロジェクト、そのセルにフォーカスを変更するボタン、およびフォーカスされたセ ルが編集モードに入るもう1つのボタンに2つのラベルと2つのボックスをプロジェクトに追加します。 以下の手順を実行します。 1. Visual Studio ツールボックスに移動し、2つの Labelコントロールと2つの TextBoxコントロールをフォームに追加しま す。 2. TextBox1の横のLabel1 と TextBox2 の横のLabel2を整列し、プロパティウィンドウで、コントロールに以下のプロパ ティを設定します。 Label1.Textを "列:" に設定します。 TextBox1.Textを "0" に設定します。 Label2.Textを "行:" に設定します。 TextBox2.Textを "0" に設定します。 3. Visual Studio ツールボックスに移動し、2つの Buttonコントロールをフォームに追加します。 4. Label の横の Button コントロールと TextBoxコントロールを整列し、プロパティウィンドウで以下のプロパティを設定 します。 Button11.Textを "フォーカスを設定" に設定します。 Button2.Textを "セルを編集" に設定します。 5. Button1をダブルクリックし、Click イベントハンドラを作成して、コードビューに切り替えます。 6. 以下のコードをButton1_Clickイベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.Col = Me.TextBox1.Text Me.C1TrueDBGrid1.Row = Me.TextBox2.Text C#コードの書き方 358 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C# this.c1TrueDBGrid1.Col = this.textBox1.Text; this.c1TrueDBGrid1.Row = this.textBox2.Text; 7. デザインビューに戻り、Button2 をダブルクリックして Clickイベントハンドラを作成し、コードビューに切り替えます。 8. 以下のコードを Button2_Clickイベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.EditActive = True C#コードの書き方 C# this.c1TrueDBGrid1.EditActive = true; このトピックの作業結果 テキストボックスとボタンを使用して、フォーカス状態のセルを変更し、選択されたセルで編集モードに入ることができます。以 下を実行します。 1. アプリケーションを実行します。 2. 列 および 行テキストボックスの値を "2" および "3" などに変更し、 フォーカスの設定 フォーカスの設定ボタンをクリックします。 グリッドのフォーカスが変わります。必要に応じて、グリッドをスクロールしてフォーカス状態の列と行が見えるようにし ます。 3. セルの編集 セルの編集ボタンをクリックします。 選択されたセルが編集モードに入ります。 フィルタ言語を変更する 359 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms 列フィルタエディタで使用する言語を変更するには、Languageプロパティを使用します。 1. 2. 3. 4. グリッドを右クリックし、プロパティ プロパティ を選択して、Visual Studio のプロパティウィンドウを表示します。 AllowFilter プロパティが Trueに設定されていることを確認します。 Languageプロパティの横にあるドロップダウン矢印をクリックし、言語(たとえば、Danish)を選択します。 プロジェクトを実行し、列ヘッダの1つのドロップダウン矢印をクリックして、列フィルタエディタを開きます。列フィルタエ ディタの言語が、Language プロパティで指定した言語と一致します。 コードの場合 次のコードをForm_Loadイベントに追加します。 Visual Basic コードの書き方 Visual Basic Me.C1TrueDBGrid1.AllowFilter = True Me.C1TrueDBGrid1.Language = C1.Util.Localization.Language.Danish C# コードの書き方 C# this.c1TrueDBGrid1.AllowFilter = true; this.c1TrueDBGrid1.Language = C1.Util.Localization.Language.Danish; このトピックの作業結果 列フィルタエディタの言語が、Language プロパティで指定した言語と一致していることを確認します。 カスタム印刷プレビューの作成 カスタム印刷プレビューを作成し、印刷時のグリッドの表示方法をカスタマイズできます。これは、Init メソッドを使用して実行で きます。C1.Win.C1TrueDBGrid.PrintForm から継承された、フォームの FormBorderStyle, MaximizeBox, MinimizeBox, ControlBox などのプロパティをオーバーライドするには、PrintForm の Init メソッドをオーバーライドしま す。まず base.Init() を呼び出し、次に希望するプロパティを設定します。 以下の手順を実行します。 1. ツールボックスに移動し、SplitContainer パネルをダブルクリックして、それをフォームに追加します。 2. プロパティウィンドウに移動し、SplitContainerパネルのOrientation プロパティをHorizontalに設定します。 3. SplitContainerの上部パネル内でクリックし、ツールボックスに移動して Buttonコントロールをダブルクリックし、それ をアプリケーションに追加します。 4. プロパティウィンドウで、Button コントロールの Textプロパティを "Preview" に設定します。 5. C1SplitContainer の下部パネル内でクリックし、ツールボックスに移動して C1TrueDBGrid コントロールを見つけて ダブルクリックし、それをアプリケーションに追加します。 6. C1TrueDBGrid コントロールのスマートタグをクリックして、タスク タスクメニューから、親コンテナへのドッキング 親コンテナへのドッキングオプションを 選択します。 7. ソリューションエクスプローラで、プロジェクトを右クリックして参照の追加 参照の追加を選択します。参照の追加 参照の追加ダイアログボックス で、C1.C1Report および C1.Win.C1Report アセンブリを見つけて選択し、OKをクリックします。これは印刷プレ ビュー用に必要になります。 8. フォームをダブルクリックしてコードビューに切り替え、Form_Load イベントハンドラを作成します。 9. 次のコードを Form_Load イベントに追加します。 Visual Basic コードの書き方 360 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Visual Basic FillGrid() C# コードの書き方 C# FillGrid(); 10. FillGrid イベントを Form_Load イベントの直下に追加します。 Visual Basic コードの書き方 Visual Basic Private Sub FillGrid() Dim maxrows As Integer = 5 Dim dt As New DataTable("testdatatable") Dim dc As DataColumn Dim dr As DataRow ' 整数列を設定します dc = New DataColumn() dc.DataType = System.Type.[GetType]("System.DateTime") dc.ColumnName = "DT1" dt.Columns.Add(dc) ' 文字列を実行します dc = New DataColumn() dc.DataType = System.Type.[GetType]("System.DateTime") dc.ColumnName = "DT2" dt.Columns.Add(dc) ' 文字列を実行します dc = New DataColumn() dc.DataType = System.Type.[GetType]("System.DateTime") dc.ColumnName = "DT3" dt.Columns.Add(dc) Dim rnd As New Random() For i As Integer = 0 To maxrows - 1 dr = dt.NewRow() dr("DT1") = DateTime.Now.AddDays(i) dr("DT2") = DateTime.Now.AddMonths(i) dr("DT3") = DateTime.Now.AddYears(i) dt.Rows.Add(dr) Next Me.C1TrueDBGrid1.DataSource = dt Me.C1TrueDBGrid1.Columns("DT1").EnableDateTimeEditor = True Me.C1TrueDBGrid1.Columns("DT2").EnableDateTimeEditor = True Me.C1TrueDBGrid1.Columns("DT3").EnableDateTimeEditor = True End Sub 361 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms C#コードの書き方 C# private void FillGrid() { int maxrows = 5; DataTable dt = new DataTable("testdatatable"); DataColumn dc; DataRow dr; // 整数列を設定します dc = new DataColumn(); dc.DataType = System.Type.GetType("System.DateTime"); dc.ColumnName = "DT1"; dt.Columns.Add(dc); // 文字列を実行します dc = new DataColumn(); dc.DataType = System.Type.GetType("System.DateTime"); dc.ColumnName = "DT2"; dt.Columns.Add(dc); // 文字列を実行します dc = new DataColumn(); dc.DataType = System.Type.GetType("System.DateTime"); dc.ColumnName = "DT3"; dt.Columns.Add(dc); Random rnd = new Random(); for (int i = 0; i < maxrows; i++) { dr = dt.NewRow(); dr["DT1"] = DateTime.Now.AddDays(i); ; dr["DT2"] = DateTime.Now.AddMonths(i); dr["DT3"] = DateTime.Now.AddYears(i); dt.Rows.Add(dr); } this.c1TrueDBGrid1.DataSource = dt; this.c1TrueDBGrid1.Columns["DT1"].EnableDateTimeEditor = true; this.c1TrueDBGrid1.Columns["DT2"].EnableDateTimeEditor = true; this.c1TrueDBGrid1.Columns["DT3"].EnableDateTimeEditor = true; } 11. ソリューションエクスプローラで、プロジェクトを右クリックして追加 追加→Windows フォーム フォームを選択します。新しい項目の追 新しい項目の追 加ダイアログボックスで、フォームに "PrintForm1" という名前を付けて、追加 追加ボタンをクリックします。 12. C1.Win.C1TrueDBGrid.PrintForm から継承する初期クラスの宣言を編集します。 Visual Basic コードの書き方 Visual Basic 362 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms Public Class PrintForm1 Inherits C1.Win.C1TrueDBGrid.PrintForm C#コードの書き方 C# public partial class PrintForm1 : C1.Win.C1TrueDBGrid.PrintForm 次のコードをクラスの宣言の下に追加します。 Visual Basic コードの書き方 Visual Basic Protected Overrides Sub Init() MyBase.Init() FormBorderStyle = FormBorderStyle.Sizable Me.ControlBox = True Me.MinimizeBox = False Me.MaximizeBox = False End Sub C#コードの書き方 C# protected override void Init() { base.Init(); FormBorderStyle = FormBorderStyle.Sizable; this.ControlBox = true; this.MinimizeBox = false; this.MaximizeBox = false; } 13. デザインビューのForm1 に戻り、Button をダブルクリックし、コードビューに切り替えて Button_Click イベントハンド ラを作成します。 14. 次のコードをButton_Clickイベントハンドラに追加して、"ProjectName" がプロジェクトの名前に置き換えられているこ とを確認します。 Visual Basic コードの書き方 Visual Basic C1TrueDBGrid1.PrintInfo.PreviewFormClassName = "ProjectName.PrintForm" C1TrueDBGrid1.PrintInfo.PrintPreview() C#コードの書き方 C# c1TrueDBGrid1.PrintInfo.PreviewFormClassName = "ProjectName.PrintForm1"; c1TrueDBGrid1.PrintInfo.PrintPreview(); このトピックの作業結果 363 Copyright © GrapeCity inc. All rights reserved. TrueDBGrid for WinForms アプリケーションを実行し、アプリケーションにボタンとデータを表示するグリッドが表示されることを確認します。プレビュー プレビューボタ ンをクリックして、カスタマイズされた印刷プレビューフォームが表示されることを確認します。フォームには、閉じる 閉じるボタンだけ が表示され、最小化 最小化ボタンと最大化 最大化ボタンは表示されません。 364 Copyright © GrapeCity inc. All rights reserved.
© Copyright 2024 ExpyDoc