ComponentOne FlexGrid for WinForms

FlexGrid for WinForms
2015.05.21 更新
グレープシティ株式会社
ComponentOne FlexGrid for WinForms
目次
はじめに
コンポーネントをプロジェクトに組み込む方法
コンポーネントのランタイムファイル
主な特長
12-13
13
14-15
製品の概要
16
製品構成
16
新機能と変更点
16
5.0Jで更新された内容
クラスメンバ
サンプル
4.0J で更新された内容
クラスメンバ
16-24
24-26
26
26-34
34-37
3.0Jで更新された内容
37-39
2.0Jで更新された内容
39-40
VS-FlexGrid ProからFlexGrid for WinForms へ
40-41
FlexGridの.NET 製品とActiveX製品の相違点
41
行と列のコレクション(Rows/Cols)
41-42
スタイル(Styles)
42-44
セル範囲(CellRange)
44-46
型付けした列
C1FlexGridとC1FlexGridClassic
47
47-48
プロパティ比較一覧
48-58
メソッド比較一覧
58-60
イベント比較一覧
60-62
クイックスタート
手順 1: C1FlexGrid を使用したアプリケーションを作成する
63
63
手順 2: C1FlexGrid をデータソースに連結する
63-69
手順 3: C1FlexGrid の設定をカスタマイズする
69-71
設計時のサポート
エディタ
列エディタ
1
12
72
72
72-73
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
スタイルエディタ
73-75
キャプションスタイルと列スタイル
75-79
スマートタグ
80-83
Column タスク
83-89
基本操作
90-92
行と列
92-93
93-94
セルの選択
94-96
セルの範囲
96
セルのイメージ
96
セルのフォーマット
96-97
セルの内容
97-99
セルの外観
99-101
条件付きの書式設定
101-102
オーナー描画セル
102-104
セルの編集
104
リストボックスとコンボボックス
104-106
チェックボックス
106-107
マップリスト
107-110
セルボタン
110-111
マスク
111-113
入力値の正当性検査
113-114
カスタムエディタ
114-116
カスタムエディタの作成
編集モードの制御
セルのマージ
116
116-117
117
テーブルヘッダのマージ
117-119
データビューのマージ
119-120
セルをはみだして表示
120-121
カスタムマージ
121-122
アウトラインとデータの集計
小計行の作成
2
79
C1FlexGrid タスク
列のサイズ変更
122
122-124
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
カスタムツリーの作成
124-128
コントロールによるアウトラインとツリーの作成
128-129
データのロード
129-133
アウトラインツリー
133-134
小計の追加
134-137
Subtotal メソッドの使用
137-139
アウトラインの保守
139
Node クラスの使用
139-140
保存とロード、および印刷
テキストファイルの保存とロード
140
Microsoft Excel ファイルの保存とロード
140-141
データベースからのグリッドのロード
141-142
グリッドの印刷
142-143
フィルタリング
143
AllowFilteringプロパティ
143-146
プログラムによるフィルタの管理
146-148
プログラムによるフィルタの適用
148-150
フィルタ動作のカスタマイズ
150-152
フィルタリングUIのカスタマイズ
152-154
プロパティグループ
データ連結
154-155
156
データソースへの連結
156-161
データの取得と設定
161-162
チュートリアル
Edit チュートリアル
163
163
手順1: コントロールの作成
163-166
手順2: 列タイプとデータの書式設定
166-169
手順3: ドロップダウンリスト
169-172
手順4: データの正当性検査
172-174
手順5: クリップボードへの対応
174-176
手順6: カスタムエディタの組み込み
176-178
Outline チュートリアル
手順1: コントロールの作成
3
140
178-179
179-184
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
手順2: データの読み込みとアウトラインの構築
184-187
手順3: マウスおよびキーボードのカスタム設定
187-189
手順4: 編集の許可と禁止
189-191
Data Analysis チュートリアル
191-192
手順1:コントロールの作成
192-193
手順2:グリッドの初期化とデータ表示
193-200
手順3:自動ソート
200-201
手順4:小計行とアウトラインツリー
201-203
グリッド
204
204
FlexGridの各部名称について
204
エディタにアクセスする
204
列エディタにアクセス
204-206
スタイルエディタにアクセス
206-208
VisualStyle を使用して外観を変更する
208-210
XP のテーマで表示する
210-211
グリッド領域の背景色をを変更する
211-212
最後の列を広げてグリッド領域を埋める
212-213
グリッドの背景画像を設定する
213-214
透明度を指定して背景画像を設定する
214-215
レイアウトを保存/ロードする
215-218
パフォーマンスを改善する
218-220
JIS2004 対応フォントを使用する
220-221
グループ化の機能を使用する
境界線
221
221
コントロールの境界線スタイルを変更する
221-225
グリッドの境界線スタイルを設定する
225-230
グリッドの境界線を変更する(非表示、色変更)
230-231
行/列の境界線を設定する
231-233
セルに線を描画する
233-234
スクロールバー
4
189
手順5: ツールチップの実装
タスク別ヘルプ
234
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
スクロールバーの表示/非表示を設定する
234-237
常にスクロールバーを表示する
237-238
スクロールバーの表示状態を取得する
スクロール動作を変更する
VS-FlexGrid と同様のスクロール動作にする
238-239
239
スクロールチップを表示する
239-240
スクロール位置を変更する
240-242
スタイル
242
組み込みスタイルの位置について
242-243
通常セルの外観を変更する
243-245
固定セルの外観を変更する
245-246
選択されているセルの外観を変更する
246
カレントセルの外観を変更する
246-247
カレントセルのフォーカス枠を変更する
247-250
カレントセルのフォーカス枠の色を変更する
250-251
1行おきのスタイルを設定する
251-252
固定セルや静止セルも1行おきに外観を変更する
252-256
Excel スタイルのヘッダを使用する
256
行/列の外観を変更する
256-258
カスタムスタイルを作成する
258-261
セル(範囲)の外観を変更する
261-262
適用したスタイルをクリアする
262-265
データの内容に応じてスタイルを適用する
265-268
設定したスタイルを優先させる
268-270
スタイルの要素
5
238
270
背景色/文字色を変更する
270-271
フォントを変更する
271-272
データの表示位置を変更する
272-273
画像の表示位置を変更する
273-274
3Dテキストを表示する
274-275
背景画像を設定する
275-277
折り返して表示する
277-278
トリミングして表示する
278-279
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
縦書きで表示する
279-280
データ型を設定する
280-282
書式を設定する
282-283
マージンを設定する
283-284
スタイル要素の設定をクリアする
284-286
286
行/列
286
デザイン
行列数を設定する
286-288
固定行または固定列を設定する
288-289
静止行または静止列を設定する
289-290
列ヘッダを設定する
290-292
行ヘッダを設定する
292-293
すべての行の高さ/列の幅を変更する
293-294
行の高さ/列の幅を変更する
294-295
デザイン時に設定した列幅が無効になってしまう場合の対処方法
295-296
列の順序を変更する
296-299
行列のデータ型を設定する
299-300
行列の書式を設定する
300-302
固定列に行番号を表示する
302-305
操作
6
305
行を追加する
305-307
列を追加する
307-309
行/列を削除する
309-311
行を挿入する
311-312
列を挿入する
312-314
ユーザーによる行の追加を許可する
314-315
ユーザーによる行の削除を許可する
315-317
ユーザーによる行/列の移動を許可する
317-319
ユーザーによる行の高さ/列幅の変更を許可する
319-320
データにあわせて行/列のサイズを調整する
320-321
行/列の最小、最大サイズを設定する
321-323
ユーザーによる行/列の静止を許可する
323-324
ユーザーによるデータ検索を有効にする
324-325
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
セルの値
セルに値を設定する
セル範囲に値を設定する
セル(範囲)の値をクリアする
画像/表示
325-327
327
327-330
330
オーナー描画を使用する
330-332
グラデーション背景を描画する
332-334
セルを塗りつぶす
334-335
セルラベルを表示する
335-336
セルに画像を設定する
336-339
新規追加行を示すアイコンを変更する
339-340
エラー情報を表示する
340-342
エラー情報のアイコンを変更する
342-343
カレント行を示すアイコンを表示する
343-344
イメージを拡大/縮小する
344
列単位でイメージを拡大/縮小
344-346
グリッド全体でイメージを拡大/縮小
346-348
描画方法を変更する
348-349
コンテキストメニューを表示する
350-352
ユーザーデータをツールチップに表示する
352-353
行のユーザーデータをツールチップに表示
353-354
列のユーザーデータをツールチップに表示する
354-356
セルのユーザーデータをツールチップに表示
356-358
セル範囲のユーザーデータをツールチップに表示
358-359
スタイルのユーザーデータをツールチップに表示
359-362
マウス下のセルをハイライト表示する
マージ
7
325
362-363
363
隣接する同一データを自動マージする
363-365
隣接する同一データを自動マージする(制限付き)
365-368
自動マージ処理をカスタマイズする
368-369
カスタムマージ(セル結合)を行う
369-370
オーバーフロー表示を行う
370-371
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ノード行をマージする
371-373
固定セルと通常セルのマージモードを別々に設定する
373-375
マージセルかどうかを判別する
375-376
選択/移動
376-380
複数の選択モードを利用する
380-381
行全体をハイライト表示する
381-382
選択範囲を作成する
382-383
選択範囲を取得する
383-384
複数行を選択する(ListBox)
384-385
行の選択状態を取得する(ListBox)
385-386
カレントセルを移動/取得する
386-387
Enter/Tab キーによりカレントセルを移動する
387-390
右クリックでカレントセルを移動する
390-391
391
カレントセルのカーソルを非表示にする
391-393
クリックされたセルを取得する
393-394
クリックされたセルの種類を判別する
394-395
ダブルクリック時にテキストを選択状態にする
395-396
入力/編集
396
常時入力モードにする
396-397
編集中のセルの外観を変更する
397-398
グリッド全体の編集を禁止する
398-399
列単位で編集を禁止する
399-401
行単位で編集を禁止する
401-402
セル単位で編集を禁止する
8
376
選択モードを変更する
任意のセルを表示する
402
Enter キーを押した際、編集モードに移行しないようにする
402-403
IMEモードを切り替える
403-404
キー入力を検知する
404-405
セル単位で編集データをチェックする
405-407
行単位で編集データをチェックする
407-408
左右の矢印キーによる編集の終了を無効にする
408-409
セル編集時の改行を禁止する
409-410
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
文字数単位で入力を制限する
410-413
バイト単位で入力を制限する
413-414
数値のみの入力を許可する
414-415
カスタムエディタを設定する
415-416
入力マスクを設定する
416-417
パスワード入力を行う
417-419
大文字に変換して入力する
419-420
セルボタン/コンボボックス
セルボタンを表示する
420-421
セルボタンの画像を変更する
421-422
コンボボックスを表示する
422-423
コンボボックスの背景色を変更する
423-425
リストにアイコンを表示させる
425-426
表示値/実値のように2種類のデータを持たせる
426-428
選択されたインデックスを取得する
428-429
マルチカラムコンボボックスを表示する
429-431
コンボボタン/セルボタンを表示するタイミングを変更する
431-432
コンボボックスの幅を設定する
432-434
表示するリストの数を変更する
434-435
表示するリストの順番を設定する
435-438
リストの内容を行ごとに変更する
438-439
データマップの内容を行ごとに変更する
439-441
セルごとにコンボボックスを設定する
441-443
チェックボックス
443
チェックボックスを表示する
443-445
チェックボックスを表示する(SetCellCheck)
445-446
チェックボックスのイメージを変更する
446-448
チェックボックスのセルにテキストを表示する
448-449
日付型セル
9
420
449
カレンダーコントロールを使用して日付の入力を行う
449-451
カレンダーコントロールを表示しない
451-452
スピンボタンを使用して日付の入力を行う
452-454
日付の書式を設定する
454-455
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
和暦で表示する
455-458
時刻のみを表示する
458-459
入力可能な日付を設定する
459-460
数値型セル
460-461
数値型セルの書式を設定する
461-462
ツリー表示/小計行
462
小計行を表示する
462-463
小計行をカスタマイズして表示する
463-465
小計行を使用してアウトラインツリーを表示する
465-467
ノード行を指定してアウトラインツリーを表示する
467-469
連結グリッドでアウトラインツリーを表示する
469-470
ノード行にチェックボックスを表示する
470-472
縮小・展開をコードで実行する
472-474
縮小・展開イメージを変更する
474-476
476
ユーザーによるフィルタリングを許可する
476-479
コードによりフィルタリングを適用する
479-481
フィルタアイコンに独自のアイコンを表示する
481-483
フィルタボタンに独自のアイコンを表示する
483-484
ソート
484
ユーザーによるソートを許可する
484-485
特定列でのソートを制限する
485-487
ソート順序について
487
ソート処理を無効にする
487-490
コードによりソートする
490-491
複数列のソートを実行する
491-492
インジケータを明示的に表示する
492-494
インジケータを非表示にする
494-495
インジケータに独自のアイコンを表示する
495-496
データ連結
非連結列を追加する
10
460
数値エディタを使用する
フィルタリング
496
496-498
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
非連結列の入力を許可する
498-500
固定列にデータを表示する
500-504
フィールドにビットマップイメージを表示する
504-507
自動で列幅を調整する
507-509
印刷
印刷(プレビュー)を実行する
ページ範囲を指定して印刷する
509-510
510
印刷ページの余白を設定する
510-512
印刷ヘッダ/フッタを設定する
512-513
印刷フッタにページ番号を出力する
513-514
ページごとに印刷ヘッダ(フッタ)を設定する
514-516
コントロールの境界線を表示せずに印刷する
516-517
印刷プレビュー画面を最大化して表示する
517
印刷プレビュー画面をカスタマイズする
517-519
複数のグリッドを印刷する
519-522
ファイル入出力
522
Excel ファイルの保存とロード
522-525
XMLファイルの保存とロード
525-527
テキストファイルの保存とロード
527-529
ファイル入出力時に複数のオプションを設定する
グリッドを画像として出力する
クリップボード
11
509
529
529-531
531
自動クリップボードの機能を有効にする
531-532
行ヘッダや列ヘッダを含めてコピーする
532-533
コピー&ペースト処理をコードで実装する
533-534
非表示になっている行や列を除いてコピーする
534-537
データの実値をコピーする
537-540
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
はじめに
FlexGrid for WinForms は、データバインディングの最新技術を取り入れており、Microsoft.NET フレームワークとシームレ
スに統合します。そのため、表形式のデータの表示、編集、フォーマット、整理、要約、および印刷を行うユーザーフレンドリな
インターフェースを作成するための使いやすくて柔軟なグリッドコントロールが得られます。
FlexGrid for WinForms パッケージは、以下の2つのコントロールで構成されます。
C1FlexGrid コントロール
C1FlexGrid コントロールは強力でフル機能を備えたグリッドです。グリッドで圧縮バイナリまたはテキストファイル
(MicrosoftR Access? および ExcelR と互換性を持つ)の読み込み/書き込みを行います。C1FlexGrid は基本機能
や、アウトラインツリー、ソート、セル結合、マスク編集、変換コンボと画像リスト、および自動データ集計などの高度な
機能をすべて提供します。
C1FlexGrid は、ADO.NET と DataObjects for WinForms を含む任意の .NET データソースからデータを表示する
バインドモードか、グリッド自身でデータを管理する非バインドモードで使用できます。
C1FlexGridClassic コントロール
C1FlexGridClassic コントロールは、C1FlexGrid から派生するコントロールで、VSFlexGrid ActiveX コントロールにほ
ぼ 100% 同じオブジェクトモデルを提供します。C1FlexGridClassic は既存の VSFlexGrid プロジェクトの移行を簡素
化するために開発されました。
C1FlexGridClassic のソースコードがサンプルとして付属しています。このソースコードは、カスタムグリッドコントロー
ル開発の基本クラスとしての C1FlexGrid コントロールの使用方法を示す参考として使用できます。
コンポーネントをプロジェクトに組み込む方法
コンポーネントの組み込み
Visual Studio では、ツールボックスにコンポーネントを追加しただけでは、プロジェクトにコンポーネントを追加したことにはな
りません。プロジェクトの参照設定へ追加された時点でコンポーネントが組み込まれます。
以下のいずれかの操作を行うとプロジェクトへコンポーネントが組み込まれます。
フォームにコンポーネントを配置する
ソリューションエクスプローラ上で参照の追加を行う
プロジェクトに組み込まれているコンポーネントの一覧は、ソリューションエクスプローラで確認できます。また、各コンポーネン
トが使用している DLL もソリューションエクスプローラに登録される場合があります。詳細については、Visual Studio の製品ヘ
ルプを参照してください。
本製品で使用しているコンポーネントの一覧を以下に示します。
ファイル
内容
C1.Win.C1FlexGrid.2.dll
本体アセンブリ
C1.Win.C1FlexGrid.4.dll
本体アセンブリ(※)
C1.Win.C1FlexGrid.4.Design.dll
デザイナアセンブリ(※)
※ .NET Framework 4 以上でご利用いただけます。
フォームにコンポーネントを配置する方法
以下に、C1FlexGrid コントロールをツールボックスに追加し、フォームに配置する方法を示します。これにより、コンポーネント
12
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
がプロジェクトに組み込まれます。
配置手順
1. [ツール]メニューから[ツールボックス アイテムの選択]を選択します。
2. [ツールボックス アイテムの選択]ダイアログの「.NET Framework コンポーネント」タブを選択します。
3. 使用するコンポーネントのチェックボックスを ON にして〈OK〉ボタンをクリックしてください。ツールボックスに指定したコ
ントロールのアイコンが表示されます。
4. ツールボックスから指定したコントロールのアイコンを選択してフォームに配置します。ソリューションエクスプローラの
参照設定に指定したコントロールの名前空間が追加されます。
コンポーネントのランタイムファイル
FlexGrid for WinForms のランタイムファイルは、 C:\Program Files\ComponentOne\Studio for WinForms\bin\ フォルダに
インストールされる次のファイルです。
ファイル
内容
C1.Win.C1FlexGrid.2.dll
本体アセンブリ
C1.Win.C1FlexGrid.4.dll
本体アセンブリ(※)
※ .NET Framework 4 以上でご利用いただけます。
注意:
注意:本製品に含まれているファイルのうち、上記以外のファイルは配布できません。
13
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
主な特長
FlexGrid for WinForms の主な機能は以下のとおりです。
コードなしの開発
スマートタグでアクセスできる使い安いエディタを使用して、設計時に列、スタイルなどを指定できます。列エディタで列
の追加・削除、整列、幅調整などの設定を簡単に行うことが可能です。既存のスタイルを修正したり、カスタムスタイル
を作成するには、スタイルエディタを使用できます。従いまして、コードを書く必要はなく、グリッドを設計時に管理できま
す。
高度なセル編集
簡単なテキスト編集、ドロップダウンリスト、コンボリスト、セルボタン、マスク、入力検証で編集処理を制御できます。た
とえば、入力時に自動的にデータを検証するテンプレートを提供するには入力マスクを使用でき、特定の列を読み取り
専用にすることもできます。
統合した印刷
単一のコマンドでグリッドを印刷できます!用紙の方向、余白、フッタを制御することもでき、ユーザにダイアログを表示
して、プリンタを設定することも可能です。また、印刷イベントにて、ページ区切りの追加、ヘッダ行の繰り返し、各ペー
ジにカスタム要素の追加を行うことができます。
階層的なスタイル
強力なプロパティおよびメソッドを使用することで要件に応じるデータ表示を実現できます。たとえ
ば、C1FlexGrid.Subtotalメソッドを使用してデータを要約し、集計値を追加するまたは Tree プロパティでデータの階
層的な表示を実現できます。
柔軟なデータ連結
グリッドは、ADO.NET または ComponentOne DataObjects for .NET などのいずれかの.Net データソースに連結し
てバウンドモードでデータを表示できます。そして、グリッド自体がデータを管理できるアンバウンドモードも用意されて
います。
Office Microsoft2007・・2010のスタイルを使用して
のスタイルを使用して UI の強化
C1FlexGrid は、Office2007、2010のスタイルに似る視覚スタイルを対応しています。たとえば、Blue、Silver と Black。
階層的なデータを子テーブルで表示する
FlexGridは、階層データソースにバインドしている場合、各マスターレコードは展開/縮小でき子グリッドの詳細が表示/
非表示にできます。結果としては、階層データを表示する際のMicrosoft Accessによって提示されたグリッドの種類に
類似した"データ·ツリー"になります。これは、 C1FlexGridコントロールからコントロール(C1FlexDataTree)を継承する
ことにより達成できています。また、バインドされている場合はコントロールが下位のデータソースを検出して、子テーブ
ルを表示する場合それ自体の追加のインスタンスを作成します。
ツリーに変換する可能
特定の行の IsNode プロパティを設定して、FlexGrid を TreeView に変換することができます。高度な DataGrid のよ
うな機能を備える TreeView を使用できます。
セルにデータおよび画像を表示する
グリッドの各セルはデータを表示する他、画像も表示できます。データベースの情報を図で表示するため、簡単なおよ
び効率的な方法、イメージリストにグリッドの列をバインドすることも可能です。
描画する時の特殊な効果
14
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
グリッドのセルに、線、ビットマップ、アイコンなどの特殊な効果を実現することにより、グリッドの外観を独自に変更でき
ます。画像をスケールするまたは透明の効果を追加することもできます。
列にフィールド名を設定する
必要に応じて、列を位置よりその名前で参照することが可能です。データ連結を実現したグリッドの場合は、列キーは
自動的にフィールド名に割り当てられていますが、コードにて割り当てることも可能です。従いまして、ユーザがグリッド
上の異なる位置に移動した場合でも、列を取得するには列の ColIndex(ColKey) 構文を使用できます。
結合セル
近接する同値のセルを結合して、外観や明瞭を高めるために複数の行または列をスパンできます。
範囲の集計
ステートメントは1つのみを使用してセル範囲の集計、平均、または他の統計を計算できます。
複数のファイル形式を使用したデータの保存
複数のファイル形式を使用したデータの保存/ロード
ロード
text、.xls、.xlsx (OpenXml 形式)など、またはOpenXMLファイルの他の拡張子でグリッド内容をロード・保存することが
できます。そして、DataReaderオブジェクトを使用してデータベースからもグリッドデータをロードすることができます。
組み込みのフィルタリング機能
AllowFiltering プロパティを設定することにより、グリッドの各列にフィルタを設定できます。
15
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
製品の概要
製品構成
FlexGrid for WinForms は、次の2つのコンポーネント(コントロール)とヘルプ、サンプルなどから構成されています。
コントロール
C1FlexGrid コントロール
C1FlexGrid は、パワフルであらゆる機能を備えたグリッドです。データの表示、編集、書式設定、集計、および印刷
を、まったく新しい方法で実現します。また、任意の区切り文字によるテキストファイル、Excel ファイル、XML ファイルを
グリッドに読み書きできます。C1FlexGrid には、ひととおりの基本機能はもちろん、アウトラインツリー、ソート、セル
マージ、マスク編集、コンボボックスとイメージリストの変換、自動データ集計などの高度な機能が用意されています。
C1FlexGrid は、連結と非連結の両方のモードで使用できます。連結モード(バウンドモード)では、ADO.NET データ
ソースからのデータを表示します。非連結モード(アンバウンドモード)では、グリッド自身がデータを管理します。
C1FlexGridClassic コントロール
C1FlexGridClassic は、C1FlexGrid から派生したコントロールです。C1FlexGridClassic が提供するオブジェクトモデ
ルは、ActiveX 製品の VSFlexGrid コントロールと似ています。 このコントロールはサンプルとして提供されており、ソー
スコードも付属しています。このコードを参照することで、C1FlexGrid コントロールを基本クラスとして使用し、カスタム
グリッドコントロールを開発する方法が理解できます。詳しくは、製品付属の「FlexGridClassic サンプル」に含まれてい
るソースコード(FlexGridClassic.cs ファイル)、およびサンプルヘルプを参照してください。
注意
注意:C1FlexGridClassic はあくまでもサンプルとして作成されたDLLです。通常使用する際には、C1FlexGrid をご使用
ください。C1FlexGridClassic は、ユーザーサポートの対象外です。
製品ヘルプ
今、ご覧いただいているものです。FlexGrid for WinForms をご利用いただくために必要なあらゆる情報が記載されていま
す。
サンプル
FlexGrid for WinForms の使用例、応用例をまとめたサンプルプログラム集です。これらのサンプルは、VB と C# の違いを
比較しながら学習できるように、まったく同じプロジェクトが両方の言語で作成、収録されています。また、サンプルの目的や使
用方法を説明したサンプルヘルプも付属しています。
新機能と変更点
各バージョンで追加された機能や変更点について紹介します。
5.0Jで更新された内容
で更新された内容
以下は、FlexGrid for Windows Forms 5.0J で追加された主な機能です。
組み込みのデータフィルタリング
描画の改良
オブジェクトモデルの改良-Tree オブジェクト、Node オブジェクト
CheckBoxサポートの改良
16
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
コントロール更新の改良
列設定の手間を軽減
起動時のパフォーマンスの向上
新規行テンプレートへの表示テキストの指定
クリップボード処理でのコピー内容指定
行レベルでの検証
集計行のカスタマイズ
異なるマージモードの併用
常時入力モードを簡単に実現
CellStyle クラスへの機能追加
印刷機能の強化
新しい外観描画の仕組み
廃止された機能-Redraw プロパティ
新機能概要
【組み込みのデータフィルタリング】
AllowFiltering プロパティを True に設定すると、C1FlexGrid コントロールはグリッドの各列に対して、ユーザーがフィルタを
適用できるようにします。
データフィルタリング機能は、Windows7やVistaにおいてMicrosoftが使用しているスタイルに従っています。ユーザーが列
ヘッダ上にマウスポインタを動かしたときに、グリッドはヘッダ上にフィルタボタンを表示します。フィルタボタンのクリックによ
り、表示するデータを選択するフィルタエディタが起動します。すべての列がフィルタを持っており、行が表示されるためには、
すべてのフィルタを通過しなくてはなりません。
組み込みのフィルタには、ユーザーが表示する特定の値を選択できる値フィルタ
フィルタ(ValueFilter)のほか、 ユーザーが“指定の
値より大きい”、”指定の値を含む” といった条件を指定できる条件フィルタ(
条件フィルタ(ConditionFilter))もあります。開発者が特定のカ
スタムフィルタを作成し、列に適用することもできます。
以下の画像は、フィルタ機能が実行されているところを表しています。この画像では、表示する商品を選択できる値フィルタエ
値フィルタエ
ディタ
ディタが表示されています。
17
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
次の画像では、発注量の範囲を選択する条件フィルタ
条件フィルタエディタが表示されています。
フィルタが適用されている列には、マウスが列ヘッダ上に置かれていないときでも、ヘッダにフィルタアイコンが表示されます。
このことは、上記画像において ProductID 列および Quantity 列のヘッダにフィルタアイコンが表示されていることで、おわ
かりいただけると思います。
18
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
組み込みのフィルタは、次の言語における自動ローカライズをサポートしています:
英語、スペイン語、フランス語、イタリア語、ポルトガル語、ドイツ語、オランダ語、ロシア語、日本語。
これらのローカライゼーションは製品に組み込まれており、サテライトDLLを必要としません。
新しいフィルタリング機能は極めて強力かつフレキシブルで、視覚的にも目立ちすぎることがありません。詳細は「フィルタリン
グ」を参照してください。
【描画の改良】
Windows XP/Vista/7で機能するテーマサポートを強化しました。以下の画像は、Windows 7における C1FlexGrid コントロー
ルの外観を表しています。VisualStyle プロパティは System に設定されています。
グリッドが、列と行のヘッダに対して、完全にシステムのテーマを利用している点に加え、ソートインジケータが現在は列ヘッダ
の右側でなく上部に表示されている点にご注目ください。これらの新しい特性は、Windows 7/Vista のリストに見られる同機能
に倣っています。
【オブジェクトモデルの改良-
【オブジェクトモデルの改良-Tree オブジェクト、
オブジェクト、Node オブジェクト】
Node オブジェクトには、ツリーの作成および操作をより簡単に行えるようにするプロパティが追加されました。新しいプロパ
ティは、標準のTreeViewコントロールとの互換性のために設計されています。そのため、コードの移行が簡単で、学習の必要
がありません。
Node オブジェクトの新しいプロパティには、Parent、Nodes、Checked、PrevNode,、および NextNodeがあります。
Node オブジェクトのCheckedプロパティは、3つのチェック状態(チェック、未チェック、未定義)をサポートします。これにより、
親ノードに子ノードのチェック状態を反映させるツリーを作成することが容易になります。これに対して、標準のTreeViewコント
ロールがサポートするのは、チェックと未チェックのみです。
Nodeオブジェクトモデルの改良により、標準のTreeViewコントロールのツリーと同様に、C1FlexGridベースのツリーをプログラ
ミングできるようになりました。
【CheckBoxサポートの改良】
サポートの改良】
19
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
前バージョンでは、一般的なAfterEdit イベントを使う必要がありましたが、5.0Jでは新たにCellChecked イベントが追加さ
れ、セルおよびツリーノードのチェックボックスが扱いやすくなりました。
【コントロール更新の改良】
再描画の一時停止や再開に使用する、新しいBeginUpdate メソッドとEndUpdate メソッドが追加されました。これらのメソッ
ドは、標準の.NETコントロールと互換性を持つ改良型オブジェクトモデルのために、Redraw プロパティ(廃止されます)と置き
換わるものです。
【列設定の手間を軽減】
C1FlexGrid をフォームに配置したときの、デフォルトの固定列の列幅を、他の列よりも狭くしました。列幅を調整するのは簡単
ではありますが、今回の変更により、C1FlexGridを使用する開発者はグリッドをフォームに配置するたびにマウスで固定列の
幅を調整せずに済むようになりました。
【起動時のパフォーマンスの向上】
C1FlexGrid には、データソースに連結している場合、グリッドに列サイズを自動変更させる AutoResize プロパティがありま
す。グリッドが大規模なデータソース(要素が10,000程度)に連結されている場合、この自動サイズ変更処理にはかなりの時
間がかかります。
AutoResize プロパティのデフォルト値に True が使用されていたことで、多くのユーザーは気付かないパフォーマンス上の不
利益が生じていました。これを改善するため、本バージョンではAutoResize プロパティのデフォルト値が False に変更されまし
た。これに伴い、自動サイズ調整が必要なアプリケーションではAutoResize プロパティを明示的に True に設定する必要が
あります。
注意
注意:これは、既存のアプリケーションに影響を及ぼす変更です。列の自動サイズ変更が必要なアプリケーションで
は、AutoResize プロパティをTrue に設定する必要があります(設計時には Visual Studio のデザイナを使用して、実
行時にはコードから設定できます)。
【新規行テンプレートへの表示テキストの指定】
新たに追加されたNewRowWatermark プロパティにより、AllowAddNewプロパティがTrueに設定されているときに表示さ
れる新規行のテンプレートに、任意のテキストを指定できるようになりました。
【クリップボード処理でのコピー内容指定
クリップボード処理でのコピー内容指定】
ClipboardCopyModeプロパティが追加され、AutoClipboardプロパティがTrueに設定されている場合に、列ヘッダや行ヘッ
ダを、クリップボードへのコピー内容に含めるかどうか、また Clip プロパティからコピーされるデータに含めるかどうかを指定で
きるようになりました。
【行レベルの検証】
新たに追加されたRowValidating イベントとRowValidated イベントは、グリッドがフォーカスを失ったとき、または別の行が
選択されたときに発生します。
これらのイベントにより、行レベルの検証を行い、結果不正だった場合、ユーザーが他の行へ移動できないようにすることなど
も可能になりました。
【集計行のカスタマイズ】
Subtotal メソッドの呼び出し後、集計行が作成される前に発生するBeforeSubtotal イベントと集計行が作成された後に発生
するAfterSubtotalイベントが追加されました。
これらのイベントを使用することで、集計行をカスタマイズしたり、スタイルや内容を変更したり、いくつかの集計行の作成をま
とめて保留したりすることができます。
20
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【異なるマージモードの併用】
AfterMergingFixedプロパティにより、固定セルとスクロール可能なセルに対して、異なるマージモードを指定することが可能
になりました。たとえば、列ヘッダではカスタムマージを行い、データセルでは自動マージを使用したい、といった場合などには
特に便利です。
【常時入力モード】
EditOptionsプロパティに設定するEditFlags列挙体に以下の2つのメンバが追加され、常時入力モードのグリッドを、コーディ
ングを伴わず、オプション設定のみで簡単に実現できるようになりました。
EditFlags.ExitOnLeftRightKeys:
このフラグが True に設定されている場合(デフォルトの設定)、組み込みのテキストエディタおよび数値エディタは、キャレット
が先頭位置にある状態でユーザーが左矢印キーを押したとき、またはキャレットが末尾位置(TextLengthの位置)にある状態
でユーザーが右矢印キーを押したとき、編集モードを抜けます。
このフラグが False に設定されている場合、組み込みのテキストエディタおよび数値エディタは、ユーザーが[Enter]キーを押
すか、または別なセルをクリックするまで、編集モードを抜けません。
EditFlags.EditOnRequest:
このフラグが True に設定されている場合(デフォルトの設定)、ユーザーが入力を開始するかまたはセルをダブルクリックする
まで、グリッドは編集モードに入りません(MS Excel と同じ動作)。
このフラグが False に設定されている場合、グリッドがフォーカスを得たとき、また選択セルが変更されたときには、グリッドは
自動的に編集モードに入ります(MS Access と同じ動作)。
【CellStyleクラスへの機能追加】
クラスへの機能追加】
CellStyleクラスへの機能追加(StringFormatプロパティ、およびGetTextRectangleメソッド、GetImageRectangleメソッド)
により、セル内のテキストやイメージといったコンテンツ自体の表示領域を計測可能になったため、コンテンツの周囲に線を描
画するなど、装飾を施すことも可能になりました。
【PrintDocumentGridRendererクラスの追加】
クラスの追加】
このクラスはグリッドをPrintDocument オブジェクトにレンダリングするときに使用されます。FlexGridはPrintGridメソッドを提
供しており、これはグリッドを印刷/プレビューする最も簡単な方法です。
PrintGridメソッドは単一のFlexGridを含むPrintDocumentオブジェクトを自動的に作成します。しかし、そのドキュメント上で、
別のグリッドを含め、他のコンテンツ要素を現在のグリッドを組み合わせることはできません。
このような用途に使用するのが、PrintDocumentGridRendererクラスです。
たとえば以下は、フォームに配置されている2つのグリッドを単一のPrintDocumentにレンダリングする例です。
21
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private _g1, _g2 As PrintDocumentGridRenderer
Private printDocument1 As Printing.PrintDocument
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
22
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' ボタンのクリック時、印刷プレビューダイアログを表示します。
Using dlg As New PrintPreviewDialog()
dlg.Document = Me.printDocument1
dlg.ShowDialog(Me)
End Using
End Sub
Private Sub printDocument1_BeginPrint(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintEventArgs)
' グリッドのレンダラを作成し、印刷オプションを設定します。
_g1 = New PrintDocumentGridRenderer(flex1)
_g1.Options = PrintGridFlags.ActualSize
' グリッドのレンダラを作成し、印刷オプションを設定します。
_g2 = New PrintDocumentGridRenderer(flex2)
_g2.Options = PrintGridFlags.FitToPageWidth Or PrintGridFlags.ExtendLastCol
End Sub
Private Sub printDocument1_PrintPage(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs)
' グリッドをレンダリングします。
If (_g1.CurrentPage < _g1.PageCount) Then
_g1.PrintPage(e)
e.HasMorePages = True
Next
' グリッドをレンダリングします。
ElseIf (_g2.CurrentPage < _g2.PageCount) Then
_g2.PrintPage(e)
e.HasMorePages = _g2.CurrentPage < _g2.PageCount
End If
End Sub
C# コードの書き方
C#
PrintDocumentGridRenderer _g1, _g2;
PrintDocument printDocument1;
private void button1_Click(object sender, EventArgs e)
{
// ボタンのクリック時、印刷プレビューダイアログを表示します。
using (PrintPreviewDialog dlg = new PrintPreviewDialog())
{
dlg.Document = this.printDocument1;
dlg.ShowDialog(this);
}
}
void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs
e)
{
// グリッドのレンダラを作成し、印刷オプションを設定します。
_g1 = New PrintDocumentGridRenderer(flex1);
_g1.Options = PrintGridFlags.ActualSize ;
// グリッドのレンダラを作成し、印刷オプションを設定します。
_g2 = New PrintDocumentGridRenderer(flex2);
_g2.Options = PrintGridFlags.FitToPageWidth Or PrintGridFlags.ExtendLastCol;
23
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
// グリッドをレンダリングします。
_g2 = new PrintDocumentGridRenderer(flex2);
_g2.Options = PrintGridFlags.FitToPageWidth |
PrintGridFlags.ExtendLastCol;
if (_g1.CurrentPage < _g1.PageCount)
{
_g1.PrintPage(e);
e.HasMorePages = true;
}
// グリッドをレンダリングします。
else if (_g2.CurrentPage < _g2.PageCount)
{
_g2.PrintPage(e);
e.HasMorePages = _g2.CurrentPage < _g2.PageCount;
}
}
【新しい外観描画の仕組み
新しい外観描画の仕組み】
個々のセルスタイルを設定する代わりに、グリッドの外観描画を定義したC1FlexGridRenderer クラスを使用して外観を描画す
る方法です。定義した Renderer をプロパティに指定するだけで、複数のグリッド間で統一感のあるプロフェッショナルな外観
設定を簡単に共有できます。
Renderer プロパティは、VisualStyleプロパティの実装に使用されているレンダリングエンジンを利用したものです。Renderer
プロパティはC1FlexGridRendererオブジェクトで、すべてのグリッドのレンダラの継承元となる抽象ベースクラスです。
さらに、C1FlexGridRenderer クラスから継承し、MS Office 2007のVisual Style(blue, silver, black)で使用されているすべて
のグラデーションやイメージを作成可能な25色を使用するGridRendererOffice2007クラスも提供しています。
レンダラをによる描画に関する詳細は、リファレンスページおよび製品付属サンプルプロジェクト「GridRenderer」の
Documentation フォルダにある、GridRenderer.htmを参照してください。
【廃止された機能-
【廃止された機能-Redraw プロパティ】
以下のプロパティが廃止されました。
廃止されたプロパティ
代わりに使用
Redraw
BeginUpdateメソッド、EndUpdate メソッド
クラスメンバ
C1FlexGrid コンポーネントに追加された最新のメンバは以下のとおりです。
メンバ
説明
AllowFiltering プロパティ
ユーザーがデータをフィルタできるかどうかを取得または設定します。
AllowFiltering プロパティ
その列で使用するフィルタのタイプを取得または設定します。
Filter プロパティ
その列のフィルタリングに関与するIC1ColumnFilter を取得または設定します。
ApplyFilters メソッド
すべての列フィルタをグリッド上のデータに適用します。
24
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
BeforeFilter イベント
列フィルタがグリッドに適用される前に発生します。
AfterFilter イベント
列フィルタがグリッドに適用された後に発生します。
IC1ColumnFilter インタフェース
列のフィルタオブジェクトにより実装されるインタフェース。
IC1ColumnFilterEditor インタ
フェース
列のフィルタエディタコントロールにより実装されるインタフェース。
ValueFilter クラス
一連の値に基づくフィルタを表します。
ConditionFilter クラス
1つまたは2つの論理条件に基づくフィルタを表します。
ColumnFilter クラス
ValueFilter とConditionFilter を含むフィルタを表します。
Parent プロパティ
そのノードの親ノードを取得します。
PrevNode プロパティ
前の兄弟ノードを取得します。
NextNode プロパティ
次の兄弟ノードを取得します。
Nodes プロパティ
そのノードの子を含む配列を取得します。
Checked プロパティ
そのノードに関連したチェックボックスの値を取得または設定します。
BeginUpdate メソッド
BeginUpdateメソッドに対する呼び出し後、コントロールの更新を再開します。
EndUpdate メソッド
EndUpdate メソッドが呼び出されるまでコントロールの更新を抑制することで、パフォー
マンスを維持します。
DataMemberChanged イベント
DataMember プロパティの値が変更されたときに発生します。
DataSourceChanged イベント
DataSource プロパティの値が変更されたときに発生します。
DataBindingComplete イベント
データ連結操作が完了したときに発生します。
CellChecked イベント
ユーザーにより、セルのチェックボックスがチェックされた後、またはチェックがはずされ
た後に発生します。
StringFormat プロパティ
セルのテキスト内容の書式設定に使用するStringFormat オブジェクトを取得します。
GetTextRectangle メソッド
テキストが表示されているセルの部分(マージンとボーダーを差し引いた領域)を取得
します。
GetImageRectangle メソッド
イメージが表示されているセルの部分(マージン、ボーダーおよびテキストを差し引いた
領域)を取得します。
PrintDocumentGridRenderer ク PrintDocument オブジェクトへのグリッドのレンダリングに使用されるクラス。
ラス
C1FlexGridRenderer クラス
カスタムグリッドレンダラの抽象ベースクラス。
Renderer プロパティ
コントロールのルック&フィールのカスタマイズに使用されるC1FlexGridRenderer を
取得または設定します。
AfterMergingFixed プロパティ
スクロール不可のセルをマージする方法を取得または設定します。
AfterSubtotal イベント
各行がグリッドに追加された後に発生します。
BeforeSubtotal イベント
各行がグリッドに追加される前に発生します。
ClipboardCopyMode プロパティ
AutoClipboard プロパティが True に設定されている場合、クリップボードにコピーさ
れるグリッドの部品を取得または設定します。
NewRowWatermark プロパティ
AllowAddNew プロパティが True に設定されている場合、新しい行テンプレート上に
表示される文字列を取得または設定します。
25
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
RowValidated イベント
行がフォーカスを失って、検証が行われた後に発生します。
RowValidating イベント
行がフォーカスを失い、検証が必要になる場合に発生します。
ExitOnLeftRightKeys
(EditFlags 列挙体のメンバ)
ユーザーがコンテンツの末尾で右矢印キーを押すか、コンテンツの冒頭で左矢印キー
を押した場合、エディタを終了します。
EditOnRequest(EditFlags 列挙体 マウスまたはキーボードのイベントに応答する場合にのみ編集モードに入ります。この
のメンバ)
フラグを False に設定すると、コントロールがフォーカスを取得するか、ユーザーがカー
ソルを移動したときにグリッド
FilteredColumn(GlyphEnum 列
挙体のメンバ)
列が現在有効なフィルタを保持することを示します。
FilterEditor(GlyphEnum 列挙体
のメンバ)
列がドロップダウンフィルタエディタを保持することを示します。
サンプル
C1FlexGrid の製品付属のサンプルに以下が新しく追加されました。
サンプル
説明
ColumnFilters
新しいフィルタリング機能の使用方法に関するサンプルです。
このサンプルでは、AllowFiltering プロパティとAfterFilterイベントを使って、グリッドの組み込みフィル
タの制御や、カスタマイズを行う方法を紹介します。
CustomFilters
カスタムフィルタを実装する方法を紹介するサンプルです。
ExcelStyleFilter データのソートやフィルタリングをコンテキストメニューから行います。
FilterRow
フィルタ行を実装する方法を紹介します。
GridRenderer
Renderer プロパティを使用したカスタムレンダラの実装方法を紹介します。
NewFeatures
5.0Jで追加された機能をピックアップして紹介します。
4.0J で更新された内容
以下は、FlexGrid for .NET 4.0Jで追加された主な機能です。
スマートデザイナ
カスタムマージオプション
Excel ファイルの保存とロード
エディタの強化
スクロール関連
行/列ヘッダ関連
スタイル関連
ソート
データ連結関連
セルの編集関連
データマップ関連
SaveGrid/Excel 形式に対する最適化の追加
グリッドデザイナでのフォントサイズコントロールの動作の改善
NoFreezing フラグの外観と動作の設定を可能にする SaveExcel の動作の改善
GridTree.Sort メソッドへのオーバーロードの追加
26
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
印刷コードへの付加チェックの追加
VisualStyle プロパティの追加
Addメソッド (Int32) およびAdd メソッド (Int32) メソッドの追加
MouseEnterCell イベントおよび MouseLeaveCell イベントの追加
Grid プロパティの追加
SaveExcelメソッドのオーバーロード追加
追加機能概要
【スマートデザイナ
スマートデザイナ】
スマートデザイナの機能を実装しました。スマートデザイナの詳細や設計時の操作方法については、「設計時のサポート」を参照
してください。
【カスタムマージオプション
カスタムマージオプション】
新たにカスタムマージオプションを実装しました。以前のバージョンでは、カスタムマージを実現するためにグリッドをサブクラス
化して GetMergedRange メソッドをオーバーライドする必要がありました。カスタムマージオプションを使用すると、簡単にマー
ジ範囲のリストを提供できます。
AllowMergingEnum.Custom設定
設定
AllowMergingEnum.Custom設定は、C1FlexGrid.AllowMerging プロパティの新しい設定で、カスタムのマージセル範囲を指
定できます。これまでは、コントロールをサブクラス化して C1FlexGrid.GetMergedRange メソッドをオーバーライドする必要があ
りました。カスタム範囲は、C1FlexGrid.MergedRanges プロパティで指定します。
MergedRangesプロパティ
C1FlexGrid.MergedRanges プロパティは、サブクラス化せずにカスタムマージを可能にします。以前のバージョンでは、カスタム
マージにはグリッドをサブクラス化して C1FlexGrid.GetMergedRange メソッドをオーバーライドする必要がありました。このプロ
パティを使用すると、簡単にマージ範囲のリストを提供できます。
カスタムマージ範囲は、グリッドを Excel ファイル(C1FlexGridBase.SaveExcel/C1FlexGridBase.LoadExcel)、および XML ファイ
ル(C1FlexGridBase.WriteXml/C1FlexGridBase.ReadXml)の保存とロード時にサポートされます。
注意:
注意:新しいカスタムマージの機能については、製品付属の「CustomCellMergeNew サンプル」、
「CustomCellMergeNew2 サンプル」を参照してください。以前のカスタムマージの機能については、製品付属の
「CustomCellMerge サンプル」、「CustomCellMerge2 サンプル」を参照してください。
【Excel ファイルの保存とロード
ファイルの保存とロード】
Excel ファイルの保存とロード時に固定行(列)と静止行(列)をフリーズできるようになりました。この動作は、
FileFlags.NoFreezing プロパティを使用して変更できます。
ま
た、FileFlags.SaveMergedRanges、FileFlags.LoadMergedRanges、FileFlags.IncludeMergedRanges、FileFlags.NoFreezing
の各設定を新たに追加し、セルをマージした状態で Excel ファイルの保存とロードを行えるようになりました。
CellStyle.WordWrap プロパティが True に設定されているとき、埋め込みの改行を含む文字列を Excel ファイルに確実に保存
する(行の高さを適切に設定する)ように改善しました。WordWrap プロパティが False に設定されているときでも、常にハード
改行を使用可能にします。この変更により、Excel 出力がグリッドの内容により近いものになります。
FileFlags.SaveMergedRanges
新しい FileFlags.SaveMergedRanges フラグを使用し、マージ範囲を Excel ファイルに保存できます。たとえば、以下のようにな
ります。
Visual Basic コードの書き方
Visual Basic
27
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.SaveExcel(fileName, FileFlags.IncludeFixedCells Or
FileFlags.SaveMergedRanges)
C# コードの書き方
C#
flex.SaveExcel(fileName, FileFlags.IncludeFixedCells |
FileFlags.SaveMergedRanges);
FileFlags.LoadMergedRanges
FileFlags.LoadMergedRanges 設定は、C1FlexGridBase.LoadExcel フラグパラメータの新しい設定で、Excel シートからマージ
セルをロードできます。ロードする Excel シートにマージセルが含まれる場合、このフラグが C1FlexGrid.AllowMerging プロパ
ティを AllowMergingEnum.Custom に設定してマージセルを C1FlexGrid.MergedRanges コレクションにロードします。
FileFlags.IncludeMergedRanges
FileFlags.IncludeMergedRanges 設定は、FileFlags.SaveMergedRanges と FileFlags.LoadMergedRanges を組み合わせた
もので、マージ範囲を含む Excel ファイルを保存およびロードする場合に使用できます。
FileFlags.NoFreezing
FileFlags.NoFreezing 設定は、Excel ファイルの保存およびロード時にグリッドの行と列がフリーズされないようにする新しい設
定です。デフォルトでは、固定行(列)と静止行(列)は、Excel ファイルへのインポート時にフリーズされ、Excel ファイル内の静止
行と列はグリッドへのインポート時にフリーズされます。
【エディタの強化】
組み込み数値エディタを追加しました。また、ComboBoxEditor プロパティを新たに追加しました。
数値エディタ
数値の編集時、グリッドはデフォルトで組み込み数値エディタを使用します。数値エディタは、セルスタイル(列)に割り当てられた
Format プロパティを使用可能にし、(セル型に基づいて)キーチェック、入力時の書式、範囲チェックを提供します。
EditFlags.UseNumericEditor フラグを含めないことで、組み込み数値エディタを無効にできます。
ComboBoxEditor プロパティ
ComboBoxEditor プロパティは、アクティブな ComboBox エディタコントロールの主要なプロパティへの簡単アクセスを提供し
ます。以下のサブプロパティが含まれます。
プロパティ
説明
Items
現在アクティブな ComboBox エディタ内の項目のコレクションを取得します。
SelectedIndex
現在アクティブな ComboBox エディタ内で選択されたインデックスを取得または設定します。
SelectedItem
現在アクティブな ComboBox エディタ内で選択された項目を取得または設定します。
SelectedKey
現在アクティブな ComboBox エディタ内で選択された項目に対応するキーを取得します。
これらのプロパティは、現在アクティブな ComboBox エディタ上でプロパティを取得または設定します。これらはすべて現在のエ
ディタを ComboBox オブジェクトにキャストして、ComboBox オブジェクト上で適切なプロパティを取得または設定します。アク
ティブなエディタがない場合やエディタが ComboBox でない場合、 これらのプロパティは null または -1 を返し、設定できませ
ん。たとえば、以下のようになります。
Visual Basic コードの書き方
28
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic
' ComboBoxEditorプロパティを使用:
Console.WriteLine("ComboBoxのインデックス:{0}",
flex.ComboBoxEditor.SelectedIndex)
' ComboBoxEditorプロパティを使用しない:
If Not flex.Editor Is Nothing Then
Dim cb As ComboBox
cb = CType(flex.Editor, ComboBox)
Console.WriteLine("ComboBoxのインデックス:{0}", cb.SelectedIndex)
End If
C# コードの書き方
C#
// ComboBoxEditorプロパティを使用:
Console.WriteLine("ComboBoxのインデックス:{0}",
flex.ComboBoxEditor.SelectedIndex);
<// ComboBoxEditorプロパティを使用しない:
if (flex.Editor != null)
{
ComboBox cb;
cb = flex.Editor as ComboBox;
Console.WriteLine("ComboBoxのインデックス:{0}", cb.SelectedIndex);
}
注意 :このプロパティは、C# の 'as' のような条件分岐のキャスト演算子を現在持っていない Visual Basic で特に便利で
す。
【スクロール関連】
スクロールバーの常時表示、セル単位のスクロールが可能になりました。また、これまでの BeforeScrollTip イベント
を ShowScrollTip イベントに置き換えました。
ScrollOptions プロパティ
C1FlexGridBase.ScrollOptions は、ScrollFlags 列挙体フラグを使用してグリッドのスクロール動作をカスタマイズします。
ScrollFlags 列挙体には、次のフラグが含まれます。
フラグ
説明
AlwaysVisible
必要のない場合でも、スクロールバーを常に表示します。
ScrollByRowColumn
ピクセル単位ではなく、行または列単位でスクロールします。
DelayedScroll
スクロールバーがドラッグされている間スクロールしません。
ShowScrollTips
垂直スクロールバーの横にツールチップを表示します。
このプロパティは、以前のバージョンでは使用できなかったオプションを提供します。また、独自のプロパティを持ったオプションも
指定します。
ActiveX 製品 VS-FlexGrid Pro と同様のスクロール動作を実装するには、DelayedScroll と ScrollByRowColumn を実装装しま
す。
Visual Basic コードの書き方
29
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic
flex.ScrollOptions = ScrollFlags.DelayedScroll Or _
ScrollFlags.ScrollByRowColumn
C# コードの書き方
Visual Basic
flex.ScrollOptions = ScrollFlags.DelayedScroll |
ScrollFlags.ScrollByRowColumn;
以下のプロパティが廃止されました。
廃止されたプロパティ
代わりに使用
ScrollTrack
ScrollFlags.DelayedScroll フラグ
ScrollTips
ScrollFlags.ShowScrollTips フラグ
ScrollTipText
ShowScrollTipイベント
ScrollBarsVisible プロパティ
以前のバージョンでは、コントロールのサイズとそのクライアント領域を比較してスクロールバーの表示状態を検出する必要があ
りました。ScrollableControl.ScrollBarsVisible プロパティにより、それが不要となりました。
これまでの BeforeScrollTip イベントに代わって ShowScrollTip イベントを使用
BeforeScrollTip イベントの代わりに ShowScrollTip イベントが使用されるようになりました。古いイベントには次の2つの問題
点がありました。
外部プロパティ(ToolTipText)を使用してイベント引数を提供。
対応する After イベントを持たない Before イベント。
新しい ShowScrollTip イベントを使用すると、イベントパラメータを使用してツールチップテキストを提供できるようになり、ずっと
わかりやすくて使いやすいものになりました。たとえば、以下のようになります。
Visual Basic コードの書き方
Visual Basic
' 古いコード(旧式)
Private Sub _flex_BeforeScrollTip(ByVal sender As Object, ByVal e As
RowColEventArgs) Handles _flex.BeforeScrollTip
_flex.ToolTipText = String.Format("row {0}", e.Row)
End Sub
' 新しいコード
Private Sub _flex_ShowScrollTip(ByVal sender As Object, ByVal e As
ToolTipEventArgs) Handles _flex.ShowScrollTip
e.ToolTipText = String.Format("row {0}", e.Row)
End Sub
C# コードの書き方
C#
<// 古いコード(旧式)
private void _flex_BeforeScrollTip(object sender, RowColEventArgs e)
{
_flex.ToolTipText = string.Format("row {0}", e.Row);
30
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
<// 新しいコード
private void _flex_ShowScrollTip(object sender, ToolTipEventArgs e)
{
e.ToolTipText = string.Format("row {0}", e.Row);
}
【行/列ヘッダ】
ShowThemedHeaders プロパティ
ShowThemedHeaders プロパティは、行と列のヘッダを XP のテーマで表示するかどうかを個別に、また、
ScrollableControl.BorderStyle プロパティとも別個に制御します。
【スタイル関連】
スタイルの背景画像、配置方法を指定できるようになりました。また、選択したセルに対応する行ヘッダと列ヘッダの描画に使用
するスタイルを追加しました。
CellStyle.BackgroundImage/
/CellStyle.BackgroundImageLayout プロパティ
CellStyle.BackgroundImage/CellStyle.BackgroundImageLayout プロパティは、スタイルの背景画像、配置方法を指定しま
す。これを使用し、カスタムの境界線、グラデーション、透過度などの高度なテーマを提供できます。また、特にセルの背景をサ
ポートするために追加された新しい ImageAlignEnum.TileStretch 設定もあります。この設定は、画像の端部分の元のサイズ
を維持したまま中央部分を伸縮します。
SelectedColumnHeader/
/SelectedRowHeader プロパティ
選択したセルに対応する行ヘッダと列ヘッダの描画に使用するスタイルです。CellStyleCollection.SelectedColumnHeader プロ
パティとCellStyleCollection.SelectedRowHeader プロパティを使用して Excel ファイルのようなスタイルでカレントセルの位置を
わかりやすくすることができます。このプロパティは、ScrollableControl.BorderStyle/ShowThemedHeaders プロパティに影
響します。行または列のヘッダが XP のテーマで描画されていない場合のみ有効になります。
【ソート】
現在のソートを定義する列への参照を取得できるようになりました。
SortColumn プロパティ
SortColumn プロパティはグリッドに適用された現在のソートを定義する列への参照を取得します。これは、グリッドの
ソートに使用するメソッド(Sort メソッド、ヘッダ列のクリック、データソースオブジェクトのソート)に関係なく機能します。
ユーザーは、Column.Sort プロパティの値を確認してソート順を決定できます。
【データ連結関連】
CellChanged イベントを改良し、グリッドと DataTable オブジェクトの連結時に e.Col パラメータに変更された実際の列を
渡すようにした。
データ連結時に Column.Caption プロパティが使用可能になりました。
【セルの編集関連】
31
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
StartEdit と AfterEdit イベント動作の機能を強化ユーザーがセルボタンをクリックした場合、StartEdit イベント
とAfterEdit イベントが発生しないよう改善しました。この場合、CellButtonClick イベントのみが発生します。
C1FlexGridBase.AutoClipboard で切り取り/貼り付けするか、ドラッグ&ドロップした際に、StartEdit イベント
とAfterEdit イベントが発生するように改善しました。
EditFlags.DelayedCommit の設定を新たに追加しました。
EditFlags.DelayedCommit 設定は、EditOptions プロパティと共に使用し、変更が基のデータソースに適用されるタイミ
ングを決定します。
C1FlexGridBase.EditOptions 値にEditFlags.DelayedCommit フラグが含まれる(デフォルト設定)場合、
グリッドは標準の Windows Forms 動作を使用し、カーソルが新しい行に移動したかグリッドがフォーカスを失ったときに
のみ変更をコミットします。
C1FlexGridBase.EditOptions 値に EditFlags.DelayedCommit フラグが含まれない場合、変更は個々の編集の直後に
データソースにコミットされます。
【データマップ関連】
自動貼り付けロジックを改良し、データマップされたセルを使用可能にしました。
データマップ列の処理機能を強化
列のDataType プロパティを設定すると、データ型に基づいてその RowCol.TextAlign プロパティが自動的に設定されま
す。今回、
RowCol.DataMap プロパティを設定して同じ効果が得られるようになりました。これにより、コントロールはさらに使用し
やすくなります。 それは、標準的なシナリオの場合、DataMap を使用して数値(ID。デフォルトでは右揃え)を文字列(デ
フォルトでは左揃え)
に変換するからです。たとえば、グリッドが製品テーブルに連結された場合、数値の分類 ID 列はデフォルトで右揃えとな
ります。文字列を含む
DataMap をその列に割り当てると、列は自動的に左揃えになります。
大容量のデータマップ(500 アイテム以上)使用時のコンボボックスのパフォーマンスを改善しました。
【GridTree.Sort メソッドへのオーバーロードの追加】
新しいオーバーロードが GridTree.Sort メソッドに追加されました。この新しいオーバーロードは、_flex.Sort(IComparer コンペア
ラ)に類似したカスタムコンペアラをパラメータとして取得します。
【印刷コードへの付加チェックの追加】
印刷コードに付加チェックが追加されました。この結果、ユーザーが文書の半分ほどページサイズを変更したところで、新しい
ページサイズに合うようにグリッドイメージが適宜縮小されます。
【VisualStyle プロパティの追加】
VisualStyle プロパティが C1FlexGridBase クラスに追加されました。このプロパティは、VisualStyle 列挙体から値を取得し、一
般的に使用される視覚スタイルにマッチするようにグリッドの外観全体をカスタマイズします。VisualStyle プロパティを使用する
と、複数の個別プロパティやスタイルをカスタマイズしなくても、高品質なレイアウトを素早くかつ簡単に設定できます。
VisualStyle プロパティは、行/列ヘッダの描画や強調に使用するグラデーション、枠、および選択領域を制御します。フォント、
前景色など、外観に関連しないその他のプロパティには影響を与えません。
また、VisualStyle プロパティは ComponentOne Studio に含まれるすべてのコントロールに実装されているため、一貫性のあ
るプロフェッショナルな外観を持つアプリケーションを作成することが可能です。
VisualStyle で使用可能な設定は以下のとおりです。
VisualStyle
説明
Custom
視覚スタイルなし(通常のスタイルと外観のプロパティを使用します)
System
スタイルは現在のシステム設定に一致します。
Office2007Blue
スタイルは Office2007 Blue カラースキームに一致します。
Office2007Silver
スタイルは Office2007 Silver カラースキームに一致します。
32
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Office2007Black
スタイルは Office2007 Black カラースキームに一致します。
VisualStyle プロパティの設定方法に関する詳細は、「VisualStyle を使用して外観を変更する」を参照してください。
【RowCollection.Add メソッド (Int32) および ColumnCollection.Add メソッド (Int32) メソッドの追加】
Add メソッド (Int32)と Add メソッド (Int32)が、それぞれ RowCollection クラスと ColumnCollection クラスに追加されました。こ
れらのメソッドは InsertRange に似ていますが、特定の位置にエレメントを追加するのではなく、常にコレクションの最後に追加し
ます。
【MouseEnterCell イベントおよび MouseLeaveCell イベントの追加】
MouseEnterCell イベントと MouseLeaveCell イベントが C1FlexGridBase クラスに追加されました。これらのイベントは、非推
奨となった MouseHoverCell に置き換わるものです。MouseHoverCell は、入るか、離れるセルの行および列インデックスを
含む RowColEventArgs を渡します。
【RowCol.Grid プロパティの追加】
行または列オブジェクトからオーナーグリッドコントロールへの参照の取得を可能にする Grid を追加しました。?
【SaveExcelメソッドのオーバーロード追加】
メソッドのオーバーロード追加】
SaveExcel メソッドに以下のオーバーロードが追加されました。
C1FlexGridBase.SaveExcel(String, String, FileFlags, PrinterSettings)
【Microsoft® Office Excel 2007 ファイルの読み込みと保存をサポートする OpenXml の追加】
Microsoft® Office Excel 2007 ファイルの読み込みと保存をサポートする OpenXml の追加
FlexGrid for WinForms は、Open Xml Format をサポートするようになりました。これは Microsoft Excel ファイルに対応する
2007 Microsoft® Office System のデフォルトの XML ベースのファイル形式です。OpenXml ファイルには、ZIP 形式を使用して
圧縮された多くの XML ファイルが含まれています。これらのファイルは圧縮されているため、OpenXml ファイルは一般的な文書
ファイル(.doc および .xls など)よりも通常小さくなります。.xls ファイルの読み込みや保存と同じように、.xlsx ファイルまたは
OpenXml ファイルを別の拡張子を使用して、読み込み、保存することができます。詳細は、「OpenXml ファイルの読み込みと保
存」を参照してください。
【その他】
IC1EmbeddedEditor インタフェースを公開しました。
IC1EmbeddedEditor のメソッドはリフレクションを使用して呼び出されることに注意してください。コントロールはインタ
フェース全体を実装する必要はありません。一致する名前、パラメータ、および戻り値を持つパブリックメソッドはすべて、
グリッドによって認識されて呼び出されます。
AggregateFlags 列挙体に新しい値、AggregateFlags.ExcludeHiddenCells を追加しました。
小計行機能を改良して TimeSpan 値の操作を可能にしました。
C1FlexGridBase.AutoSizeCols メソッドを改良し、ヘッダセル内のソートグリフが占めるスペースを計算に入れるようにし
ました。
値の強制型変換のパフォーマンスを改善(書式付き文字列のロード時に特に著しく改善)しました。
コントロールの作成とロード時間の最適化を追加しました。
アクセシビリティを改良して ComponentOne True DBGrid と Microsoft DataGridView との整合性を保証します。
XP スタイルの境界線の描画を改良しました。
XP スタイルが有効にされ、ScrollableControl.BorderStyle プロパティ が XpThemes または FixedSingle に設定されて
いる場合、テーマの色が SystemColors.WindowFrame の代わりに使用されます。
UseCompatibleTextRendering プロパティ
UseCompatibleTextRendering プロパティは、コントロールが Graphics クラス(GDI+。旧バージョンと互換性を持ち、
デフォルトで true)、または新しい
TextRenderer(GDI。.NET 2.0 以上で使用可能)を使用してテキストを描画するかどうかを決定します。 TextRenderer ク
ラスは、複雑なスクリプトをサポートする GDI、およびいくつかの国際的アプリケーションにより対応させた Uniscribe API
を使用します。また、GDI はハードウェアアクセラレーションもサポートしていますが、テストでは、新しい GDI 描画では互
33
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
換(GDI+)モードより約 25% 処理が遅くなります。
このプロパティは、各自のアプリケーションの他のコントロールやダイアログに一致したモードを選択できるように追加さ
れました。
クラスメンバ
4.0J で追加されたメンバは以下のとおりです。
メンバ
説明
ComboBoxEditorプロパティ
現在アクティブな エディタのプロパティへの簡単なアクセスを提供する
ComboBoxEditor オブジェクトを取得します。
GetDataDisplay メソッド (Int32,
Int32, ByRef Image, ByRef
CheckEnum)
文字列として書式設定されたグリッドセルの値、およびセル内の画像またはチェック
ボックスを取得します。
GetDataDisplay メソッド (Int32,
String, ByRef Image, ByRef
CheckEnum)
文字列として書式設定されたグリッドセルの値、およびセル内の画像またはチェック
ボックスを取得します。
IsCellCheckBoxメソッド
セルの内容をチェックボックスとして表示するかどうかを決定する値を取得します。
IsCellSelectedメソッド
セルが選択されているかどうかを決定する値を取得します。
BackgroundImageプロパティ
スタイルの背景画像を取得または設定します。
LoadExcel メソッド (String,
FileFlags)
Microsoft Excel(.xls)ファイルの最初のワークシートからグリッドをロードします。
MergedRangesプロパティ
C1FlexGrid.AllowMerging プロパティが AllowMergingEnum.Custom 列挙体 に設
定されたときにマージするグリッドセルを決定する CellRangeCollection を取得しま
す。
SaveExcel メソッド (String,
FileFlags)
グリッドの内容を Microsoft Excel(.xls)ファイルに保存します。
ScrollOptionsプロパティ
グリッドのスクロール動作を指定する ScrollFlags 列挙体 値を取得または設定しま
す。
垂直スクロールチップを表示する前に発生します。
ShowScrollTipイベント
ShowThemedHeadersプロパティ
コントロールが行ヘッダまたは列ヘッダの表示に XP テーマを使用するかどうかを取得
または設定します。
SortColumnプロパティ
グリッドに適用された現在のソートを定義する列への参照を取得します。
Subtotal メソッド
(AggregateEnum, Int32, String,
String)
セルの内容に基づいて行をグループ化して集計値を計算します。
Subtotal メソッド
(AggregateEnum, Int32, String,
String, String)
セルの内容に基づいて行をグループ化して集計値を計算します。
Subtotal メソッド
(AggregateEnum, Int32, String,
String, String, String)
セルの内容に基づいて行をグループ化して集計値を計算します。
UseCompatibleTextRenderingプ テキスト描画が以前のリリースの Windows Forms と互換性を持つかどうかを指定し
ロパティ
ます。
34
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
CellRangeCollectionクラス
CellRange オブジェクトのコレクション。
新しい CellRange オブジェクトをコレクションに追加します。
Add メソッド (CellRange)
Add メソッド (CellRange, Boolean)
新しい CellRange オブジェクトをコレクションに追加します。オプションとして、他の重
複する範囲をコレクションから削除します。
Clearメソッド
コレクションからすべてのオブジェクトを削除します。
Containsメソッド
CellRange オブジェクトがコレクションのメンバかどうかを決定します。
Count プロパティ
コレクション内の CellRange の数を取得します。
IndexOf メソッド (CellRange)
コレクションの CellRange のインデックスを取得します。
IndexOf メソッド (Int32, Int32)
コレクション内で指定した行と列を含む最初の CellRange オブジェクトのインデックス
を取得します。
Insertメソッド
CellRange オブジェクトをコレクションの指定したインデックスに挿入します。
Itemプロパティ
指定したインデックスにある CellRange オブジェクトを取得または設定します。
Removeメソッド
CellRange オブジェクトをコレクションから削除します。
RemoveAtメソッド
コレクションから指定したインデックスにあるオブジェクトを削除します。
BackgroundImageLayoutプロパ
ティ
スタイルが背景画像を拡大縮小して配置する方法を決定する値を取得または設定し
ます。
SelectedColumnHeaderプロパ
ティ
選択した列ヘッダの描画に使用するスタイルを取得します。
SelectedRowHeaderプロパティ
選択した行ヘッダの描画に使用するスタイルを取得します。
BuildString メソッド
(StyleElementFlags)
この CellStyle の文字列表示を返します。
IndexOf メソッド (String, Boolean)
指定した名前を持つ のインデックスを取得します。オプションとして、列が見つからな
い場合例外をスローします。
ComboBoxEditorクラス
現在アクティブな ComboBox エディタに関する情報を提供するヘルパークラス。
Itemsプロパティ
現在アクティブな ComboBox エディタ内の項目のコレクションを取得します。
SelectedIndexプロパティ
現在アクティブな ComboBox エディタ内で選択されたインデックスを取得または設定
します。
SelectedItemプロパティ
現在アクティブな ComboBox エディタ内で選択された項目を取得または設定します。
SelectedKeyプロパティ
現在アクティブな ComboBox エディタ内で選択された項目に対応するキーを取得しま
す。
MaximumLevelプロパティ
アウトラインの最も深いノードのレベルを取得します。
ScrollBarsVisibleプロパティ
現在表示されているスクロールバーを示す ScrollableControl.ScrollBars 値を取得し
ます。
ExcludeHiddenCells
集計から非表示行と列を除外します。
(AggregateFlags列挙体のメンバ)
Custom(AllowMergingEnum列
挙体のメンバ)
C1FlexGrid.MergedRanges コレクションを使用してマージするセルを決定します。
BackgroundImage
スタイルの背景画像を指定します。
35
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
(StyleElementFlags列挙体のメン
バ)
BackgroundImageLayout
(StyleElementFlags列挙体のメン
バ)
スタイルの背景画像の配置を指定します。
DelayedCommit(EditFlags列挙体 行の変更、またはフォーカスの移動の場合のみデータソースへの変更をコミットしま
のメンバ)
す。
IncludeMergedRanges
(FileFlags列挙体のメンバ)
C1FlexGridBase.SaveExcel メソッドと C1FlexGridBase.LoadExcel メソッドを使用し、
マージ範囲を含めて Excel の保存およびロードします。
LoadMergedRanges(FileFlags列
挙体のメンバ)
C1FlexGridBase.LoadExcel メソッドを使用して Excel からのインポート時にマージ範囲
をロードします。このフラグは、テキストファイルのロード時には影響せず、Excel 入力
の場合のみに影響します。
NoFreezing(FileFlags列挙体のメ
ンバ)
C1FlexGridBase.SaveExcel メソッドと C1FlexGridBase.LoadExcel メソッドを使用し、
Excel のエクスポートとインポート時に行と列をフリーズしません。
SaveMergedRanges(FileFlags列
挙体のメンバ)
マージ範囲を xls 出力ファイルに保存します。このフラグは、テキストファイルの保存
のときは影響せず、Excel 出力のときにのみ影響します。
SelectedColumnHeader
(CellStyleEnum列挙体のメンバ)
選択した列ヘッダの描画に使用するスタイル。
SelectedRowHeader
(CellStyleEnum列挙体のメンバ)
選択した行ヘッダの描画に使用するスタイル。
ShowThemedHeadersEnum列挙 コントロールが行ヘッダまたは列ヘッダの表示にテーマを使用するかどうかを指定しま
体
す。
TileStretch(ImageAlignEnum列
挙体のメンバ)
画像を部分に分けてグリッドに入れ、隅部分はコピーし、中央はセルの大きさに合わ
せて伸縮します。
UseNumericEditor(EditFlags列挙 数値型を編集するときに組み込み数値エディタを使用します。
体のメンバ)
IC1EmbeddedEditorインタフェー
ス
エディタによって実装され、グリッドによってセル上の編集コントロールをホストするた
めに使用されるインタフェース。
C1EditorFormatメソッド
指定したマスクを使用して特定の値を書式設定します。
C1EditorGetStyleメソッド
編集前と編集中に表示するボタンの種類を決定するエディタスタイル(DropDown、
Modal、None)を取得します。
C1EditorGetValueメソッド
エディタの現在の値を取得します。
C1EditorInitializeメソッド
エディタの内容とスタイルを初期化するために呼び出されます。
C1EditorKeyDownFinishEditメ
ソッド
特定のキーが編集を終了するかどうかを決定する値を取得します。
C1EditorUpdateBoundsメソッド
エディタのサイズと位置を更新するために呼び出されます。
C1EditorValueIsValidメソッド
エディタの現在の内容が有効かどうかを決定する値を取得します。
OwnerDrawCellEventArgs コンス OwnerDrawCellEventArgs クラスの新しいインスタンスを初期化します。
トラクタ
MouseEnterCellイベント
マウスがセルに入ると発生します。
MouseLeaveCellイベント
マウスがセルから離れる発生します。
36
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ResetVisualStyleメソッド
VisualStyle プロパティの値をリセットします。
VisualStyleプロパティ
コントロールの外観全体を決定する値を取得または設定します。
Add メソッド (Int32)
Column オブジェクトの特定の数をコレクションに追加します。
Sort メソッド (Int32, IComparer)
指定されたIComparerを使用して、すべてのノードを特定のレベルでソートします。
Add メソッド (Int32)
Row オブジェクトの特定の数をコレクションに追加します。
VisualStyle列挙体
コントロールの描画時に使用する VisualStyle を指定します。
Grid プロパティ
この行または列を所有する C1FlexGridBase@C1FlexGridBase への参照を取得しま
す。
3.0Jで更新された内容
で更新された内容
以下は、 FlexGrid for .NET 3.0J で追加された主な機能です。
マルチカラムコンボボックスへの対応
XML ファイルのインポート/エクスポート(C1FlexGridBase.ReadXml/C1FlexGridBase.WriteXml メソッド)
セルラベルの表示(ShowCellLabels プロパティ)
エラー情報の表示(ShowErrors プロパティ、C1FlexGridBase.GetCellErrorInfo/C1FlexGridBase.GetRowErrorInfo
イベント)
XP のテーマを追加(ScrollableControl.BorderStyle プロパティ)
スタイルの保持メカニズムを改良
Excel エクスポートの現地通貨処理フィルタを改良
AddNew の動作を改良して他のグリッド(TrueDBGrid、Microsoft DataGrid、Microsoft Access)との整合性を向上
内部使用または保護されていた便利なメソッドを表示
PrintGridFlags 列挙体に ExtendLastCol 設定を追加
追加機能概要
【マルチカラムコンボボックスへの対応】
新しい IC1MulticolumnDictionary インタフェースを実装した DataMaps と共に、複数列コンボが実装されました。
MultiColumnDictionary クラスは、IC1MultiColumnDictionary を持っており、文字列データまたはデータソース(ITypedList
を実装する任意のオブジェクト)に基づく複数列データマップとして使用できます。
MultiColumnDictionary クラスには2つのコンストラクタがあります。
コンストラクタの1つは、パイプ区切り(|)の項目リストを格納する文字列を取ります。
各項目はタブ区切りの列リストを格納します。
Visual Basic コードの書き方
Visual Basic
' 文字列に基づく MultiColumnDictionary を作成して、列に割り当てます。
' 注意:これにより各項目に整数型のキーが自動的に生成され、
' キー値がグリッド内に格納されます。
Dim text As String = "Row1, Col1\tRow1, Col2
Dim map As MultiColumnDictionary = New MultiColumnDictionary(text,0,True)
_flex.Cols(1).DataMap = map
C# コードの書き方
37
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
// 文字列に基づく MultiColumnDictionary を作成して、列に割り当てます。
// 注意:これにより各項目に整数型のキーが自動的に生成され、
// キー値がグリッド内に格納されます。
string text = "Row1, Col1\tRow1, Col2|Row2, Col1\tRow2, Col2";
MultiColumnDictionary map = new MultiColumnDictionary(text, 0, true);
_flex.Cols[1].DataMap = map;
もう1つのコンストラクタは、4つの引数を取ります。すなわち、データソース、グリッドに格納されるデータの格納先の列の名
前、ドロップダウンリストに表示されるフィールドのリスト、リストを閉じたときにグリッドに表示される列インデックスです。たとえ
ば、次のようになります。
Visual Basic コードの書き方
Visual Basic
' データに基づく MultiColumnDictionary を作成して、列に割り当てます。
' 注意:データソースが変更されるとリストは自動的に更新されます。
Dim dt As DataTable = GetDataTable("employees")
Dim columnNames() As String = New String() {"FirstName", "LastName",
"Country"}
Dim map As MultiColumnDictionary = New
MultiColumnDictionary(dt,"EmployeeID",columnNames,1)
_flex.Cols(2).DataMap = map
C# コードの書き方
C#
// データに基づく MultiColumnDictionary を作成して、列に割り当てます。
// 注意:データソースが変更されるとリストは自動的に更新されます。
DataTable dt = GetDataTable("employees");
string[] columnNames = new string[] { "FirstName", "LastName", "Country"
};
MultiColumnDictionary map = new MultiColumnDictionary(dt, "EmployeeID",
columnNames, 1);
_flex.Cols[2].DataMap = map;
【AddNew の動作を改良して他のグリッド(
の動作を改良して他のグリッド(TrueDBGrid、
、Microsoft DataGrid、
、Microsoft Access)との整合性を向上】
)との整合性を向上】
これまで、新しい行はカーソルが新しい行テンプレート内に移動したときに追加されていましたが、今回のバージョンからは、
ユーザーが新しい行テンプレートの編集を開始したときに新しい行が追加されるようになりました。
【内部使用または保護されていた便利なメソッドを表示】
内部使用または保護されていた以下のメソッドが表示されるようになりました。
メソッド
説明
IsCellFixed(int row, int col)
ブール型
IsCellCursor(int row, int col)
ブール型
IsCellHighlighted(int row, int col)
ブール型
IsCellValid(int row, int col)
ブール型
HitTestInfo HitTest()
引数なし。現在のマウス位置を使用します。
38
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
SetCellStyle(int row, int col, string styleName)
void。名前によってスタイルを設定します。
Styles.Add(string name, string basedOn)
CellStyle。名前によってスタイルを作成します。
【PrintGridFlags 列挙体に ExtendLastCol 設定を追加】
この新しい設定により、グリッドは各印刷ページの最後の列を拡張します。C1FlexGridBase.PrintGrid メソッド、および
C1PrintDocument と共に使用できます。たとえば、次のようになります。
Visual Basic コードの書き方
Visual Basic
' PrintGrid メソッドを使用してグリッドを印刷します。
_flex.PrinGrid("mygrid", PrintGridFlags.ShowPreviewDialog Or
PrintGridFlags.ExtendLastCol)
' C1PrintDocument を使用してグリッドを印刷します。>
_flex.PrintParameters.PrintGridFlags = PrintGridFlags.ExtendLastCol
Dim c1pd As New C1PrintDocument()
c1pd.StartDoc()
c1pd.RenderBlockText("This is a C1PrintDocument.")
c1pd.RenderBlockText(" ")
c1pd.RenderBlockC1Printable(_flex, c1pd.BodyAreaSize.Width)
c1pd.EndDoc()
C# コードの書き方
C#
// PrintGrid メソッドを使用してグリッドを印刷します。
_flex.PrinGrid("mygrid", PrintGridFlags.ShowPreviewDialog
// C1PrintDocument を使用してグリッドを印刷します。
_flex.PrintParameters.PrintGridFlags = PrintGridFlags.ExtendLastCol;
C1PrintDocument c1pd = new C1PrintDocument();
c1pd.StartDoc();
c1pd.RenderBlockText("This is a C1PrintDocument.");
c1pd.RenderBlockText(" ");
c1pd.RenderBlockC1Printable(_flex, c1pd.BodyAreaSize.Width);
c1pd.EndDoc();
これは、グリッドの ExtendLastCol プロパティから完全に独立していることに注意してください。ExtendLastCol グリッドプロパ
ティは印刷に対して効力を持ちません。
2.0Jで更新された内容
で更新された内容
以下は、FlexGrid for .NET 2.0J で追加された主な機能です。
カスタムエディタへの対応
Excel ファイルの保存とロード
自動クリップボードへの対応
セルのマージとグループ化のカスタム動作
データソースオブジェクトへの簡単アクセス
CellStyle クラスのパワーアップ
新しいイベント
処理のスピードアップ
39
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
追加機能概要
【カスタムエディタへの対応】
任意の .NET コントロールをグリッドエディタとして使用できるようになりました。コントロールのインスタンスを列の
CellStyle.Editor プロパティに指定すれば、グリッドはそのコントロールを使用して列内のセルを編集できます。
IC1EmbeddedEditor インタフェースを実装して、グリッドと外部エディタの統合を改良することで、カスタムエディタの動作をカ
スタマイズできます。C1Input ライブラリ内のコントロールはすべて、IC1EmbeddedEditor を実装しており、グリッドエディタと
して使用できるようになりました(コードは必要ありません)。
また、UIType エディタクラスをグリッドエディタとして使用する方法を示すサンプルコードも用意されています(製品付属の
「CustomEditors サンプル」を参照してください)。
【Excel ファイルの保存とロード】
C1FlexGridBase.SaveGrid と C1FlexGridBase.LoadGrid の各メソッドは、Microsoft Excel ファイル(.xls)を保存およびロードで
きるバージョンをオーバーロードしました。グリッドでは、純正の .NET コードが使用されているため、Excel をコンピュータにイン
ストールする必要がありません。
さらに、C1FlexGridBase.SaveExcel と C1FlexGridBase.LoadExcel という特別のメソッドでは、コントロールを追加してグリッドを
Excel ワークブックの特定シートに保存できます。
【自動クリップボードへの対応】
新しい AutoClipboard プロパティでは、グリッドは標準のクリップボードキーを自動的に処理して、セル値の切り取り、コ
ピー、貼り付け、および削除を行えます。
【セルのマージとグループ化のカスタム動作】
新しい CustomComparer プロパティでは、隣接セルをマージまたはグループ化するかどうかを決定する場合に使用する
IComparer クラスを指定できます。
【データソースオブジェクトへの簡単アクセス】
新しい Row.DataSource プロパティでは、行のデータソースに簡単にアクセスできます。たとえば、グリッドを ADO.NET
DataView に連結している場合、各グリッド行に付加された DataViewRow オブジェクトを簡単に取得できます。 【CellStyle
クラスのパワーアップ】 CellStyle クラスには、CellStyle.Editor プロパティと CellStyle.Render メソッドが新たに加わりました。
CellStyle.Editor プロパティでは、カスタムエディタを指定できます。CellStyle.Render メソッドでは、スタイルを使用して文字列
やイメージを任意の Graphics オブジェクトに描画できます。
【新しいイベント】
グリッドは、ユーザーが行を追加または削除する前と後にイベントを発生させて、これらのアクション
(C1FlexGridBase.BeforeAddRow、C1FlexGridBase.AfterAddRow、C1FlexGridBase.CancelAddRow、
C1FlexGridBase.BeforeDeleteRow、C1FlexGridBase.AfterDeleteRow)を監視したり取り消したりできるようになりました。ま
た、非連結データ列をサポートするイベントも新たに追加されました(C1FlexGridBase.GetUnboundValue と
C1FlexGridBase.SetUnboundValue の各イベント)。
【処理のスピードアップ】
いくつかの最適化により、グリッドにおける描画やスクロールが旧バージョンに比べて飛躍的に高速化しました。
40
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
VS-FlexGrid Proから
からFlexGrid for WinForms へ
Visual Basic 6.0 の環境で、ActiveX 製品 VS-FlexGrid Pro を使用して作成したアプリケーションを、新たに.NET環境で構築し
直す場合、最適なツールとしてなにを選択するべきでしょうか?
答えは、FlexGrid for WinForms です。
FlexGrid for WinForms は、ActiveX コンポーネントである VS-FlexGrid Pro のソースをすべて書き直し、.NET Framework へ
シームレスにつながるオブジェクト構造を実現しました。そのため、ADO.NETをはじめとする.NET Framework の革新的な機能
を十二分に活用でき、開発工程の生産性を最大限に高めます。一方で、セルマージやソート、アウトライン表示など、長年に
渡り高い評価を得る、VS-FlexGrid Pro の特長が大切に継承されています。
FlexGrid for WinForms と ActiveX 製品の VS-FlexGrid Pro や MSFlexGrid との間には互換性はなく、移行ツールも用意され
ていません。そのため、残念ながら、ソースコードを変更せずに.NETアプリケーションに変換するといったことはできません。
ただし、「製品の特長が継承されている」、このことは思いのほか重要です。はじめて使用するコントロールの場合、使いこな
せるようになるまでには、それなりの学習期間が必要ですが、FlexGrid for WinForms を選択することで、これまでに培った
ActiveX製品VS-FlexGrid Pro の使用経験を最大限に生かしつつ、.NET での開発をスムーズに進めることができます。元来、
FlexGrid for WinForms はシンプルなオブジェクト構造を持っているため、製品を習得しやすいこともあります。.NETに慣れて
いない開発者でも、VS-FlexGrid Pro の経験を生かしつつ、新たな世界に挑戦できます。
このページでは、ActiveX 製品 VS-FlexGrid Pro を使用して作成したアプリケーションを、FlexGrid for WinForms を使用し
た.NETアプリケーションに再構築する際に参考となるよう、「.NETとActiveX製品の相違点」、「プロパティ、メソッド、イベント比
較」にて、お役に立てるような情報をご提供しております。ActiveX から .NET アプリケーションへの再構築をご検討中のお客
様は、是非ご覧ください。
FlexGridの
の.NET 製品と
製品とActiveX製品の相違点
製品の相違点
ここでは FlexGrid for WinForms と VS-FlexGrid Pro の大きな相違点、行と列のコレクション(Rows/Cols)、スタイル
(Styles)、セル範囲(CellRange)、型付けした列についてご紹介します。機能的に異なる点ではなく、.NET 製品と ActiveX 製
品の基本的な考え方の違いになります。
行と列のコレクション(
行と列のコレクション(Rows/
/Cols))
41
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
これは、VS-FlexGrid ProからFlexGrid for WinForms への恐らく最も顕著な変更点です。
スタイル(
スタイル(Styles))
42
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
43
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
44
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
セル範囲 (Cell Range)
45
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
46
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
型付けした列
C1FlexGridと
とC1FlexGridClassic
C1FlexGridClassic は、ユーザーサポートの対象外です。
VS-FlexGrid Pro は、複数の VSFlexGrid コントロール(ADO、DAO、アンバウンド、Unicode など)で構成されていますが、
FlexGrid for WinForms では、C1FlexGrid と C1FlexGridClassic の2種類になります。
C1FlexGrid は VS-FlexGrid Pro の ActiveX コントロールを単に移植しただけものではありません。C1FlexGridは、まったく新し
いタイプのグリッドコントロールとしてC#でゼロから記述されており、同じ設計原理を使用しながら ActiveX コントロールのオブ
ジェクトモデルよりさらに最新かつクリーンでパワフルな新しいオブジェクトモデルを採用しています。C1FlexGridコントロール
は、ADO.NET データソースに連結することも、非連結モードで使用することも可能です。
また、既存アプリケーションとのソースコードの互換性を最高レベルに維持するため、さらには、VS-FlexGrid Pro ユーザーの
学習曲線をできる限りスムーズなものにするため、C1FlexGridClassic コントロールも提供されています。
C1FlexGridClassic は、C1FlexGrid を基本クラスとして使用するコントロールで、VS-FlexGrid Pro 7.0J のオブジェクトモデルと
ほとんど同じオブジェクトモデルを提供します。C1FlexGridClassicのソースコードが提供されているため、新しいオブジェクトモ
デルの使い方を正確に理解することが可能です。あるいは、ソースコードを手本にして、C1FlexGridを基本クラスにした独自の
グリッドを作成できます。
新しく.NETアプリケーションを作成する場合は、C1FlexGrid コントロールをご利用ください。
カスタムコントロールを作成したい場合や、VS-FlexGrid Pro に動作を近づけたい場合などに、C1FlexGridClassic コントロール
47
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
のソースコードを参考にしてください。
プロパティ比較一覧
全般
VS-FlexGrid Pro
FlexGrid for WinForms
備考/機能概要
AllowBigSelection
SelectionModeプロパティ
SelectionModeEnum
(C1FlexGridBaseクラス)
行(列)のヘッダのクリックにより行(列)全体を選択できるようにします。
SelectionModeプロパティ
SelectionModeEnum
(C1FlexGridBaseクラス)
マウスやキーボードを使ってセルを範囲選択できるようにします。
AllowSelection
AllowUserFreezing AllowFreezingプロパティ
(C1FlexGridBaseクラス)
AllowUserResizing AllowResizingプロパティ
AllowFreezingEnum
マウスを使って静止行(列)数を変更できるかどうかを設定します。
AllowResizingEnum
(C1FlexGridBaseクラス)
マウスを使って行(列)の大きさを変更できるようにします。
BorderStyleプロパティ
BorderStyleEnum
(ScrollableControlクラス)
ボーダースタイルを取得または設定
AutoResize
AutoResizeプロパティ
(C1FlexGridBaseクラス)
データベースからデータを読み込んだときに、列の幅を自動的に調節
するかどうかを設定します。
AutoSearch
AutoSearchプロパティ
AutoSearchEnum
(C1FlexGridBaseクラス)
ユーザーが文字をタイプしたときに一致する項目を検索するかどうかを
設定します。
AutoSearchDelayプロパティ
AutoSearchプロパティで使用されるバッファがリセットされるまでの遅
延時間を秒単位で設定します。
Appearance
AutoSearchDelay
(C1FlexGridBaseクラス)
AutoSizeMode
AutoSizeRowsメソッド
AutoSizeFlags
AutoSizeRowメソッド
AutoSizeメソッドが有効のとき、列幅と行の高さのどちらを調整するか
を設定します。
AutoSizeColメソッド
AutoSizeColsメソッド
(C1FlexGridBaseクラス)
AutoSizeMouse
AllowResizingプロパティ
AllowResizingEnum
(C1FlexGridBaseクラス)
行ヘッダをダブルクリックすると、列内のデータに合わせて列幅が自動
調節されるかどうかを設定します。
BackColor
Styles.Normal.BackColorプ
ロパティ
スクロール可能領域の背景
色を設定します。
BackColorAlternate
Styles.Alternate.BackColorプロパティ
1行おきの背景色を設定します。
BackColorBkg
Styles.EmptyArea.BackColor グリッドの最後の列(最右列)または行(最下行)を越えた通常グレー表
プロパティ
示されている領域の背景色を設定します。
BackColorFixed
Styles.Fixed.BackColorプロ
48
固定列(行)の背景色を設定します。
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
パティ
BackColorFrozen
Styles.Frozen.BackColorプロ 静止列(行)の背景色を設定します。
パティ
CaseSensitive
(VSFlexString)
FindRowメソッド
(C1FlexGridBaseクラス)
文字検索において、大文字と小文字を区別するかどうかを設定しま
す。
引数caseSensitiveを使用
Clip
Clipプロパティ
選択範囲のセルの内容を設定します。
(C1FlexGridBaseクラス、
CellRange構造体)
ClipSeparators
ClipSeparatorsプロパティ
行(列)区切りに使用される文字を設定します。
(C1FlexGridBaseクラス)
Editable
AllowEditingプロパティ
コントロールを編集可能にするかどうかを設定します。
(C1FlexGridBase、RowColク
ラス)
EditMask
EditMaskプロパティ
セル編集に使用する入力マスクを設定します。
(C1FlexGridBase、
CellStyle、RowColクラス)
EditMaxLength
TextBoxのMaxLengthプロパ セルに入力可能な文字数を設定します。
ティを使用
製品ヘルプ:よくある質問
(FAQ)を参照
EditSel???
TextBoxのSelectionStartプ
ロパティなどを使用
セル内で範囲選択されたテキストの文字数/開始点/文字列を設定し
ます。
製品ヘルプ:よくある質問
(FAQ)を参照
EditText
Editor.Textプロパティ
編集するセルの内容を設定します。
(C1FlexGridBaseクラス)
EditWindow
Editor プロパティ
グリッドが現在編集モードかどうかを検査できます。
(C1FlexGridBaseクラス)
FillStyle
FlexDataSource
SelectionModeプロパティ
SelectionModeEnum
(C1FlexGridBaseクラス)
プロパティの設定対象をカレントセルにするか、選択されたすべてのセ
ルにするかを指定します。
DataSourceプロパティ
データソースを設定します。
(C1FlexGridBaseクラス)
FloodColor
オーナー描画を使用
インジケータのようにセルを塗りつぶす色を設定します。
製品ヘルプ:よくある質問
(FAQ)を参照
FontWidth
Font プロパティ
テキストフォントの幅を設定します。
(C1FlexGridBase、CellStyle
クラス)
49
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ForeColor
Styles.Normal.ForeColorプ
ロパティ
スクロール可能領域のテキスト色を設定します。
ForeColorFixed
Styles.Fixed.ForeColorプロ
パティ
固定列(行)のテキスト色を設定します。
ForeColorFrozen
Styles.Frozen.ForeColorプロ 静止列(行)のテキスト色を設定します。
パティ
FormatString
Styles.Fixed.TextAlign、
Caption プロパティ
列の幅、列の配置、固定行(列)の数およびそれらのヘッダとして表示
するテキストなどを設定します。 前バージョンとの互換のために用意さ
れています。
(Row、Column クラス)
Appearance
BorderStyleプロパティ
(ScrollableControlクラス)
ボーダースタイルを取得または設定
GridColor
GridColorFixed
Styles.Normal.Border.Color
Styles.Fixed.Border.Colorプロパティ
データセルまたは固定行(列)のグリッド線の色を設定します。
GridLines
GridLinesFixed
Styles.Normal.Border.Style
Styles.Fixed.Border.Styleプロパティ
通常セルまたは固定行(列)のグリッド線のスタイルを設定します。
GridLineWidth
Styles.Normal.Border.Width グリッド線の幅を設定します。
プロパティ
HighLight
HighLightプロパティ
選択したセルをハイライト表示します。
(C1FlexGridBase、
CellStyleCollecitionクラス)
OLEDragMode
OLEDropMode
OwnerDraw
Picture
DragModeプロパティ
DragModeEnum
(C1FlexGridBaseクラス)
OLEドラッグ&ドロップ操作の処理をコンポーネントが自動で行うか、ま
たはコードから手動で行うかを設定します。
DropModeプロパティ
DropModeEnum
(C1FlexGridBaseクラス)
コントロールが自動または手動のどちらのOLEドロップターゲットとして
使用できるかを設定します。
DrawModeプロパティ
DrawModeEnum
(C1FlexGridBaseクラス)
DrawCellイベントを発生させるタイミングを設定します。
BackgroundImageプロパ
ティ
VSFlexGridコントロールのピクチャ(表全体を表したビットマップ)を参照
します。
(C1FlexGridBaseクラス)
PictureType
該当なし
Pictureプロパティによって生成されるピクチャの形式を設定します。
Redraw
BeginUpdateメソッド、
EndUpdateメソッド
VSFlexGridコントロールの再描画を制御します。
(C1FlexGridBaseクラス)
RightToLeft
該当なし
テキストの表示方向(右から左へ/左から右へ)を設定します。
SelectionMode
SelectionModeプロパティ
SelectionModeEnum
(C1FlexGridBaseクラス)
行(列)単位、またはリストボックス方式でセルを選択できるようにしま
す。
50
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
SheetBorder
Border プロパティ
(CellStyleクラス)
TabBehavior
グリッド全体を囲むボーダーの色、および静止領域とスクロール可能領
域との境界線の色を設定します。
KeyActionTabプロパティ
KeyActionEnum
(C1FlexGridBaseクラス)
[Tab]キーでフォーカスを移動する対象を、コントロールとグリッドセル
のどちらにするかを指定します。
セル関連
VS-FlexGrid Pro
FlexGrid for WinForms
備考/機能概要
BackColorSel
Styles.Highlight.BackColorプ
ロパティ
選択されたセルのテキスト色の背景色を設定します。
Cell
CellRangeオブジェクト
任意の選択範囲の属性を設定します。
Cell???
GetCellRectメソッド
セルの高さ/幅/上端の位置/左端の位置を参照し、必要があ
れば、画面をスクロールしてそのセルを表示領域内に移動します。
CellAlignment
TextAlignプロパティ
TextAlignEnum
(CellStyleクラス、RowColクラ
ス)
セルまたは指定範囲のセルのどの位置にデータを表示するかを設
定します。
CellForeColor
BackColorプロパティ
セルまたは指定範囲のセルの背景色/文字色を設定します。
CellBackColor
ForeColorプロパティ
(CellStyleクラス)
CellButtonPicture
CellButtonImageプロパティ
セルボタンに使用されるピクチャを設定します。
(C1FlexGridBaseクラス)
CellChecked
CheckBoxプロパティ
CheckEnum
(CellRangeオブジェクト)
セルまたは指定範囲のセルにチェックボックスを表示するかどうか
を設定します。
GetCellCheckプロパティ、
SetCellCheckプロパティ、
GetCellCheckメソッド、
SetCellCheckメソッド
(C1FlexGridBaseクラス)
CellFloodColor
オーナー描画を使用
インジケータのようにセルを塗りつぶす色を設定します。
製品ヘルプ:よくある質問
(FAQ)を参照
CellFloodPercent
オーナー描画を使用
製品ヘルプ:よくある質問
(FAQ)を参照
CellFont???
Font プロパティ
セルを塗りつぶす領域を、セル全体に対する百分率で設定しま
す。
セルに使用されるテキストのフォントを設定します。
(CellStyleクラス)
CellPicture
Image プロパティ
セルまたは指定範囲に表示するピクチャを設定します。
(CellRangeオブジェクト)
51
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
SetCellImageメソッド、
GetCellImageメソッド
(C1FlexGridBaseクラス)
CellPictureAlignment ImageAlign プロパティ
CellTextStyle
ComboCount
ImageAlignEnum
(CellStyle、RowColクラス)
セルまたは指定範囲のセルのどの位置にピクチャを表示するかを
設定します。
TextEffect プロパティ
TextEffectEnum
(CellStyleクラス)
セルまたは指定範囲のセルのテキストの表示スタイルを設定しま
す。
ComboBoxEditor.Items.Count セルのコンボリストの項目数を参照します。
プロパティ
(ComboBoxEditorクラス)
ComboData
DataMapプロパティ
セルのコンボリストの項目に関連付けられたID文字を参照します。
(RowCol、CellStyleクラス)
ComboIndex
SelectedIndexプロパティ
(ComboBoxEditorクラス)
ComboItem
SelectedItemプロパティ
(ComboBoxEditorクラス)
ComboList
ComboListプロパティ
セルのコンボリストで現在選択されている項目のインデックスを設
定します。
リストを使って編集を行うときのみ、セルのコンボリストの項目に関
連付けられた文字列を参照します。
セルのコンボリストの項目を設定します。
(C1FlexGridBase、CellStyle、
RowColクラス)
ComboSearch
Ellipsis
EditOptionsプロパティ
EditFlags AutoSearchを使用
(C1FlexGridBase クラス)
コンボリストがユーザー入力文字の自動検索(インクリメンタル
サーチ)をサポートするかどうかを設定します。
Trimming プロパティ
StringTrimming
(CellStyleクラス)
セル内の文字列がすべて表示できないときに、省略符号(...)を表
示するようにするかどうかを設定します。
製品ヘルプ:よくある質問
(FAQ)を参照
FocusRect
FocusRect プロパティ
(C1FlexGridBaseクラス)
カレントセルの周囲に描画するフォーカス枠のスタイルを設定しま
す。
ForeColorSel
Styles.Highlight.ForeColorプ
ロパティ
選択されたセルのテキスト色を設定します。
PicturesOver
ImageAndTextプロパティ
セル内のテキストとピクチャを重ね合わせるかどうかを設定しま
す。
(RowColクラス)
Text(VSFlexGrid)
SetDataメソッド
カレントセルまたは指定範囲のセルのテキストを設定します。
(C1FlexGridBaseクラス)
TextArray
Item プロパティ
任意のセルのテキストを設定します。
(C1FlexGridBaseクラス)
TextMatrix
52
TextEffectプロパティ
任意のセルのテキストを設定します。
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
(CellStyleクラス)
TextStyle
TextEffectプロパティ
TextEffectEnum
TextStyleFixed
(CellStyleクラス)
標準のセルと固定列(行)のテキストを3D表示します。
Value
該当なし
カレントセルの数値を参照します。
ValueMatrix
該当なし
指定したセルの数値を参照します。
列関連
VS-FlexGrid Pro FlexGrid for WinForms
備考/機能概要
Col
カレント列を設定します。
Col プロパティ
(C1FlexGridBaseクラス)
ColAlignment
ColComboList
TextAlignプロパティ
TextAlignEnum
(RowColクラス)
セルのどの位置にデータを表示するかを列単位で設定します。
ComboListプロパティ
指定した列で使用するドロップダウンリストの項目を設定します。
(RowColクラス)
ColData
UserDataプロパティ
ユーザーデータを取得または設定します。
(RowColクラス)
ColDataType
DataTypeプロパティ
列のデータ型を設定します。
(RowColクラス)
ColEditMask
EditMaskプロパティ
セルの編集に使用する入力マスクを列単位で設定します。
(RowColクラス)
ColFormat
Format プロパティ
数値、ブール値、日付の表示書式を設定します。
(RowColクラス)
ColHidden
Visible プロパティ
列を表示するかどうかを設定します。
(RowColクラス)
ColImageList
ImageMapプロパティ
(RowColクラス)
ColIndex
Index プロパティ
データ値をイメージに変換するのに使用するデータマップを取得ま
たは設定します。
列のインデックスを参照します。
(RowColクラス)
ColIsVisible
LeftColプロパティ・RightColプロパ
ティにより判別
指定した列が表示領域内にあるかどうかを参照します。
(C1FlexGridBaseクラス)
ColKey
Name プロパティ
指定の列を識別するためのキーを設定します。
(Column クラス)
ColPos
Left プロパティ
コントロールの左端から指定列の左端までの距離を参照します。
(Column クラス)
ColPosition
53
Move メソッド
選択した列を指定した場所に移動します。
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
(Column、ColumnCollectionクラ
ス)
Cols
Count プロパティ
列の総数を設定します。
(ColumnCollectionクラス)
ColSel
ColSelプロパティ
列の選択範囲を設定します。
(C1FlexGridBaseクラス)
ColWidth
Width プロパティ
指定した列の幅を設定します。
(Column クラス)
ColWidthMax
MaxSizeプロパティ
列の幅の最大値を設定します。
(RowColCollectionクラス)
ColWidthMin
MinSizeプロパティ
列の幅の最小値を設定します。
(RowColCollectionクラス)
ExtendLastCol
ExtendLastColプロパティ
(C1FlexGridBaseクラス)
FixedAlignment TextAlignFixed プロパティ
FixedCols
最後(右端)の列の幅をコントロール幅に合わせて自動的に調節す
るかどうかを設定します。
TextAlignEnum
(RowColクラス)
固定列のどの位置にテキストを表示するかを設定します。
Fixed プロパティ
固定列の総数を指定します。
(ColumnCollectionクラス)
FrozenCols
Frozen プロパティ
静止列(編集可能かつスクロール不可の列)の総数を設定します。
(ColumnCollectionクラス)
LeftCol
LeftColプロパティ
コントロールの左端(固定列は除く)に表示する列を設定します。
(C1FlexGridBaseクラス)
MouseCol
MouseColプロパティ
現在マウスポインタが置かれている列番号を参照します。
(C1FlexGridBaseクラス)
RightCol
RightColプロパティ
コントロールの右端に表示されている列の番号を参照します。
(C1FlexGridBaseクラス)
行関連
VS-FlexGrid
Pro
FlexGrid for WinForms
備考/機能概要
BottomRow
BottomRowプロパティ
コントロールの最下部に表示されている行の番号を参照します。
(C1FlexGridBaseクラス)
FindRow
FindRowメソッド
指定した文字列を含む行インデックスを参照します。
(C1FlexGridBaseクラス)
FixedRows
Fixed プロパティ
固定行の総数を指定します。
(RowCollectionクラス)
FrozenRows
54
Frozen プロパティ
静止行(編集可能かつスクロール不可の行)の総数を設定しま
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
(RowCollectionクラス)
IsSelected
Selected プロパティ
(Row、RowCol、RowCollectionクラ
ス)
MouseRow
MouseRowプロパティ
す。
指定した行を選択状態にします。また、指定行が選択状態である
かどうかを参照します。
現在マウスポインタが置かれている行番号を参照します。
(C1FlexGridBaseクラス)
Row
Row プロパティ
カレント行を設定します。
(C1FlexGridBaseクラス)
RowData
UserDataプロパティ
ユーザーデータを取得または設定します。
(RowCol、CellStyleクラス)
RowHeight
Height プロパティ
指定した行の高さを設定します。
(Row クラス)
RowHeightMax MaxSizeプロパティ
行の高さの最大値を設定します。
(RowCollectionクラス)
RowHeightMin MinSizeプロパティ
行の高さの最小値を設定します。
(RowCollectionクラス)
RowHidden
Visible プロパティ
行を表示するかどうかを設定します。
(RowColクラス)
RowIsVisible
TopRow/BottomRowプロパティに
より判別
指定した行が表示領域内にあるかどうかを参照します。
(C1FlexGridBaseクラス)
RowPos
Top プロパティ
コントロールの上端から指定行の上端までの距離を参照します。
(Row クラス)
RowPosition
Move プロパティ
選択の行を指定の場所に移動します。
(Row、RowCol、RowCollectionクラ
ス)
Rows
Count プロパティ
行の総数を設定します。
(RowCollectionクラス)
RowSel
RowSelプロパティ
行の選択範囲を設定します。
(C1FlexGridBaseクラス)
RowStatus
FrameworkのDataRow.RowStateプ
ロパティを使用
行の状態(追加済み、削除済み、修正済み)を示す値を設定しま
す。
SelectedRow
SelectedRows
Selected プロパティ
(Row、RowCol、RowCollectionクラス)
選択された行の位置および行数を参照します。
TopRow
TopRowプロパティ
コントロールの上端(固定列は除く)に表示する行を設定します。
(C1FlexGridBaseクラス)
ソート
55
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
VS-FlexGrid
Pro
FlexGrid for WinForms
備考/機能概要
ColSort
Sort プロパティ
行を並べ替える方向を列ごとに設定します。
(Column クラス)
ExplorerBar
AllowDraggingプロパティ
ヘッダを使ってソートや移動ができるようにするかどうかを設定します。
AllowSortingプロパティ
(C1FlexGridBase、RowColクラ
ス)
Sort
Sort プロパティ
指定した列をソートのキーとして、選択範囲の行を並べ替える順番を設定
します。
(Column クラス)
マージ
VS-FlexGrid Pro FlexGrid for WinForms 備考/機能概要
MergeCells
AllowMergingプロパ
ティ
(C1FlexGridBaseクラ
ス)
MergeCol
MergeRow
MergeRow
AllowMergingプロパ
ティ
AllowMergingEnum
内容の同じセル間のグリッド線を削除し、複数のセルを1つのセルにまとめます
(マージします)。
AllowMergingEnum
指定した列(行)のセルをマージします。
(RowColクラス)
MergeCompare CustomComparerプロ
パティ
セルをマージする際の比較方法を設定します。
(C1FlexGridBaseクラ
ス)
スクロール
VS-FlexGrid
Pro
FlexGrid for
WinForms
ScrollBars
ScrollBarsプロパ 表示するスクロールバーの種類を選択します。
ティ
備考/機能概要
(C1FlexGridBase
クラス)
ScrollTips
ScrollOptionsプ
ロパティ
ユーザーが垂直方向にスクロールするときに、ツールチップを表示するかどうかを設定し
ます。
(C1FlexGridBase
クラス)
ScrollTipText ShowScrollTipイ
ベント
グリッドが垂直方向にスクロールしているときに表示するツールチップのテキストを設定し
ます。
(C1FlexGridBase
クラス)
56
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ScrollTrack
ScrollOptionsプ
ロパティ
ユーザーがスクロールのつまみを動かしたときに、それに合わせてVSFlexGridの内容を
スクロールするかどうかを設定します。
(C1FlexGridBase
クラス)
計算・小計行
VS-FlexGrid Pro
FlexGrid for WinForms
備考/機能概要
Aggregate
Aggregate プロパティ
AggregateEnum
(C1FlexGridBaseクラス)
AggregateFlags
特定範囲に対する集合関数(合計、平均など)を算出します。
IsSubtotal
該当なし
指定した行に小計を表示するのか、通常のデータを表示するのかを設定し
ます。
MultiTotals
該当なし
小計を1行にまとめて表示するかどうかを設定します。
SubtotalPosition SubtotalPositionプロパ
ティ
小計を挿入する位置(データの上または下)を設定します。
(C1FlexGridBaseクラス)
データ接続
VS-FlexGrid
Pro
FlexGrid for
WinForms
DataMember DataMemberプロパ
ティ
備考/機能概要
データメンバを設定します。
(C1FlexGridBaseクラ
ス)
DataMode
該当なし
コントロールをデータソースと連結した場合に、変更内容を同期させるかどうかを設
定します。
DataSource
DataSourceプロパ
ティ
(C1FlexGridBaseクラス)
データソースを設定します。
VirtualData
該当なし
データをまとめて一度にロードするか、または必要に応じてロードするかを設定しま
す。
階層
VS-FlexGrid Pro
FlexGrid for WinForms
備考/機能概要
Children
Children プロパティ
子ノードの総数を参照します。
(Node クラス)
Expanded
Expanded プロパティ
ノードの現在の状態(展開/縮小)を設定します。
(Node クラス)
Image
Image プロパティ
ノードのピクチャを設定します。
(Node クラス)
IsCollapsed
57
Collapsed プロパティ
行の表示状態(展開/縮小)を設定します。
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
(Node クラス)
Key
Key プロパティ
ノードキーを設定します。
(Node クラス)
Level
Level プロパティ
ノードのアウトラインレベルを参照します。
(Node クラス)
NodeClosedPicture NodeImageCollapsedプロパ 縮小されたアウトラインノードを表すピクチャを設定します。
ティ
(GridTreeクラス)
NodeOpenPicture
NodeImageExpandedプロパ 展開されたアウトラインノードを表すピクチャを設定します。
ティ
(GridTreeクラス)
OutlineBar
Tree プロパティ
(C1FlexGridBaseクラス)
OutlineCol
Level プロパティ
データの表示階層を切り替えるためのアウトラインバーのタイプを設
定します。
アウトラインツリーを表示する列を設定します。
(Node クラス)
RowOutlineLevel
Tree プロパティ
小計行の表示階層を設定します。
(C1FlexGridBaseクラス)
Text(VSFlexNode)
Data プロパティ
ノードのテキストを設定します。
(Node クラス)
TreeColor
LineColorプロパティ
データをツリー表示するときの線の色を設定します。
(GridTreeクラス)
メソッド比較一覧
VS-FlexGrid Pro
FlexGrid for WinForms
備考/機能概要
AddItem
AddItemメソッド
VSFlexGridコントロールに新しい行を追加します。
(C1FlexGridBaseクラス)
AddNode
AddNodeメソッド
(Node クラス)
AutoSize
AutoSizeCol メソッド
カレントノードに基づく特定位置(最初/最後の子ノードなど)にノード
を追加します。
セル項目に合わせて列幅または行の高さを自動的に調節します。
AutoSizeCols メソッド
AutoSizeRow メソッド
AutoSizeRows メソッド
(C1FlexGridBaseクラス)
BindToArray
該当なし
VSFlexGridコントロールをバリアント型の配列に連結します。
BuildComboList
該当なし
ColComboListプロパティに割り当てる文字列をレコードセットのデー
タから取得します。
CellBorder
Color プロパティ
カレントセルまたは選択範囲の周りや内側にボーダーを描画します。
58
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Direction プロパティ
Width プロパティ
(CellBorderクラス)
Clear
Clear メソッド
VSFlexGridコントロールの内容をクリアします。
(C1FlexGridBase、RowCol、
CellStyleクラスなど)
DataRefresh
Refresh メソッド
データソースのデータを強制的に再取得します。
(C1FlexGridBaseクラス)
DragRow
Move メソッド
ドラッグによる行の移動を開始します。
(Row、RowColクラスなど)
EditCell
StartEditingメソッド
(C1FlexGridBaseクラス)
コントロールをセル編集モードに切り替えます。
EnsureVisible
EnsureVisibleメソッド
必要に応じてグリッドをスクロールし、指定のノードを表示領域に表示
します。
(Node クラス)
FinishEditing
FinishEditingメソッド
(C1FlexGridBaseクラス)
GetMergedRange GetMergedRangeメソッド
保留中のすべての編集を終了し、グリッドをブラウズモードに戻しま
す。
指定のセルを含むマージ範囲を参照します。
(C1FlexGridクラス)
GetNode
GetNodeメソッド
NodeTypeEnum
(Node クラス)
指定の小計行に対するアウトラインノードオブジェクトを参照します。
GetNodeRow
該当なし
アウトラインモードの特定行における親または子ノードなどの行番号
を参照します。
GetSelection
Selection プロパティ
row1引数(col1引数)の値がrow2引数(col2引数)の値を超えないよ
うに、現在の選択範囲を参照します。
(C1FlexGridBaseクラス)
LoadArray
該当なし
バリアント配列または他のVSFlexGridコントロールからデータをロード
します。
LoadGrid
LoadExcel メソッド
グリッドのデータと形式をファイルから読み込みます。
LoadExcelSheetNames メソッド
LoadGrid メソッド
(C1FlexGridBaseクラス)
Move
Move メソッド
(Node クラス)
アウトラインツリー上で指定のノードを上位または下位レベルに移動
します。
OLEDrag
FrameworkのDoDragDropメ
ソッドを使用
OLEドラッグ操作を開始します。
Outline
Subtotal メソッド
小計の表示階層を設定します。
(C1FlexGridBaseクラス)
PrintGrid
PrintGridメソッド
グリッドをプリンタに出力します。
(C1FlexGridBaseクラス)
59
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
RemoveItem
RemoveItemメソッド
VSFlexGridコントロールから行を削除します。
(C1FlexGridBaseクラス)
RemoveNode
RemoveNodeメソッド
指定のノードおよびそのすべての子ノードをグリッドから削除します。
(Node クラス)
SaveGrid
SaveExcel メソッド
グリッドのデータと形式をファイルに保存します。
SaveGrid メソッド
(C1FlexGridBaseクラス)
Select
Select メソッド
ノードを選択します。
(C1FlexGridBaseクラス)
ShowCell
ShowCellメソッド
(C1FlexGridBaseクラス)
Sort
Sort メソッド
(C1FlexGridBaseクラス)
Subtotal
Subtotal メソッド
必要に応じて内容をスクロールし、指定セルを表示領域に表示しま
す。
指定した列をソートのキーとして、選択範囲の行を並べ替える順番を
設定します。
(C1FlexGridBaseクラス)
小計を算出します。
イベント比較一覧
VS-FlexGrid Pro
FlexGrid for
WinForms
AfterCollapse
AfterCollapseイベント
アウトラインモードにおいて、1つまたは複数の行が展開(縮小)された後
に発生します。
AfterDataRefresh
AfterDataRefreshイベ
ント
レコードソースからデータが読み込まれた後に発生します。
AfterEdit
AfterEditイベント
ユーザーがセルの内容を変更した後に発生します。
AfterMoveColumn
AfterDragColumnイベ エクスプローラバー上で、列をドラッグして移動した後に発生します。
ント
AfterMoveRow
AfterDragRowイベント エクスプローラバー上で、行のドラッグまたはDragRow メソッドの呼び出し
によって行を移動した後に発生します。
AfterRowColChange
AfterRowColChange
イベント
カレントセル(RowおよびColプロパティの値)が他のセルに変更された後
に発生します。
AfterScroll
AfterScrollイベント
コントロールがスクロールされた後に発生します。
AfterSelChange
AfterSelChangeイベン 選択したセル範囲(RowSelおよびColSelプロパティの値)が変更された後
ト
に発生します。
AfterSort
AfterSortイベント
エクスプローラバー上で、列ヘッダのクリックによって列をソートした後に発
生します。
AfterUserFreeze
AfterFreezeRow イベ
ント
静止列(行)の総数が変更された後に発生します。
備考/機能概要
AfterFreezeColumn イ
ベント
60
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
AfterUserResize
AfterResizeRow イベ
ント
ユーザーが行や列の大きさを変更した後に発生します。
AfterResizeColumn イ
ベント
BeforeCollapse
BeforeCollapseイベン
ト
アウトラインモードにおいて、1つまたは複数の行が展開(縮小)される直
前に発生します。
BeforeEdit
BeforeEditイベント
コントロールがセル編集モードに切り替わるときに発生します。
BeforeMouseDown
BeforeMouseDownイ
ベント
コントロールがMouseDownイベントを処理する前に発生します。
BeforeMoveColumn
BeforeDragColumnイ
ベント
エクスプローラバー上で、ドラッグして列を移動する前に発生します。
BeforeMoveRow
BeforeDragRowイベン エクスプローラバー上で、行のドラッグまたはDragRowメソッドの呼び出し
ト
によって行が移動される直前に発生します。
BeforePageBreak
BeforePageBreakイベ
ント
VSFlexGridコントロールの印刷中に発生し、改ページを制御します。
BeforeRowColChange BeforeRowColChange カレントセル(RowおよびColプロパティの値)が他のセルに変更される直
イベント
前に発生します。
BeforeScroll
BeforeScrollイベント
コントロールがスクロールされる直前に発生します。
BeforeScrollTip
BeforeScrollTipイベン
ト
スクロール時のツールチップを表示する前に発生します。
BeforeSelChange
BeforeSelChangeイベ
ント
選択したセル範囲(RowSel、ColSelの値)が変更される直前に発生しま
す。
BeforeSort
BeforeSortイベント
エクスプローラバー上で、クリックして列をソートする前に発生します。
BeforeUserResize
BeforeResizeRow イベ ユーザーが行や列の大きさを変更する前に発生します。
ント
BeforeResizeColumn
イベント
CellButtonClick
CellButtonClickイベン
ト
ユーザーがセルのボタンをクリックする前に発生します。
CellChanged
CellChangedイベント
セルの内容が変更された後に発生します。
ChangeEdit
ChangeEditイベント
エディタ内のテキストが変更された後に発生します。
ComboCloseUp
ComboCloseUpイベン コンボボックスが閉じる前に、発生します。
ト
ComboDropDown
ComboDropDownイ
ベント
コンボボックスが閉じる前に、発生します。
Compare
Compare イベント
Sort プロパティが「9-ユーザー定義」に設定されたときに行を比較するた
めに発生します。
DrawCell
OwnerDrawCellイベン セルのカスタム描画を行う前に発生します。
ト
EnterCell
EnterCellイベント
別のセルがアクティブセルになったときに発生します。
Error
GridErrorイベント
データバウンド時にデータベースエンジンからエラーが返された後に発生
61
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
します。
KeyDownEdit
KeyDownEditイベント
編集モード中にキーが押されたときに発生します。
KeyPressEdit
KeyPressEditイベント
編集モード中に文字が入力されたときに発生します。
KeyUpEdit
KeyUpEditイベント
編集モード中にキーが離されたときに発生します。
LeaveCell
LeaveCellイベント
カレントセルが別のセルに移る直前に発生します。
RowColChange
RowColChangeイベン アクティブセルが別のセルに移ったときに発生します。
ト
SelChange
SelChangeイベント
選択範囲が別のセルや別の範囲に変更されたときに発生します。
SetupEditWindow
SetupEditorイベント
編集ウィンドウを作成して表示する前に、発生します。
StartEdit
StartEditイベント
コントロールがセル編集モードに切り替わったとき(BeforeEditイベントの
後)に発生します。
StartPage
該当なし
グリッドの印刷中、各ページの印刷が開始される直前に発生します。
ValidateEdit
ValidateEdit イベント
コントロールがセル編集モードから通常のモードに切り替わる前に発生し
ます。
62
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
クイックスタート
このセクションでは、基本的な C1FlexGrid 機能を使用して、簡単なグリッドアプリケーションを作成する方法について学習しま
す。このセクションでは、C1FlexGrid のすべての機能の包括的なチュートリアルを意図するものではありませんが、クイックス
タートについて説明し、製品を使用するためのいくつかの一般的な方法に重点を置いて説明します。詳細なチュートリアルに
ついては、「チュートリアル
チュートリアル」を参照してください。
手順 1: C1FlexGrid を使用したアプリケーションを作成する
次の手順では、簡単なグリッドアプリケーションの作成方法を順を追って説明します。
1. 新しいプロジェクトを作成します。
2. C1FlexGrid コントロールをフォームに追加します。フォームに追加する方法についての詳細は、「コンポーネントをプロ
ジェクトに組み込む方法」を参照してください。
3. C1FlexGrid タスク メニューを開きます。C1FlexGrid タスク
タスクメニューへのアクセスについての詳細は、「C1FlexGrid タ
スク」を参照してください。
4. C1FlexGrid タスク
タスクメニューで、[親コンテナへのドッキング
親コンテナへのドッキング]をクリックします。これにより、グリッドの Dock プロパティ
が Fill に設定され、グリッドがフォーム領域いっぱいに表示されます。
5. プログラムを実行し、簡単なグリッドアプリケーションが表示されます。
おめでとうございます ! 簡単なグリッドアプリケーションが正常に作成されました。次のトピックでは、C1FlexGrid コントロール
をデータソースに連結する方法について学習します。
手順 2: C1FlexGrid をデータソースに連結する
次の手順では、「手順 1: C1FlexGrid を使用したアプリケーションを作成する」トピックで作成したグリッドアプリケーションにデータ
ソースを連結する方法を順を追って説明します。
1. C1FlexGrid タスク メニューを開きます。C1FlexGrid タスク
タスクメニューへのアクセスについての詳細は、「 C1FlexGrid タスク 」
を参照してください。
2. C1FlexGrid タスク
タスクメニューで、[データソースの選択
データソースの選択]ドロップダウン矢印をクリックして、ドロップダウンボックスから[プロジェ
プロジェ
クトデータソースの追加
クトデータソースの追加]リンクを選択します。
63
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
3. [データソース構成ウィザード
データソース構成ウィザード]が表示されます。[データソースの種類を選択
データソースの種類を選択]ページで選択されたデフォルトの設定[データ
データ
ベース
ベース]をそのままにして、[次へ
次へ]をクリックします。
4. [データソース
データソース モデルの選択
モデルの選択]ページで[データセット
データセット]を選択のままにして[次へ
次へ]をクリックします。
5. [新しい接続
新しい接続]ボタンをクリックして、新しい接続を作成するか、ドロップダウンリストから接続を選択します。[接続の追加
接続の追加]ダイ
アログボックスが表示されます。
64
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
6. [Microsoft Access データベースファイル
データベースファイル]をデータソース
データソースにします。
7. [参照
参照]をクリックします。[Microsoft Access データベースファイルの選択
データベースファイルの選択]ダイアログボックスで、製品に収録されている
NWind.mdb データベースファイルを選択し、[開く
開く]をクリックします。
8. [接続の追加
接続の追加]ダイアログボックスで、[接続テスト
接続テスト]ボタンをクリックして、データベースまたはサーバーに正常に接続されてい
ることを確認します。[データ接続の選択
データ接続の選択]ページに新しい文字列が表示されます。
65
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
9. [OK]をクリックして、[接続の追加
接続の追加]ダイアログボックスを閉じます。
10. [次へ
次へ]ボタンをクリックして、手順を続行します。データファイルをプロジェクトに追加し、接続文字列を変更するかどうかを確
認するダイアログボックスが表示されます。データベースをプロジェクトにコピーする必要がないので、[いいえ
いいえ]をクリックしま
す。
11. アプリケーションの設定ファイルに接続文字列を保存するには、[次の名前で接続を保存する
次の名前で接続を保存する]チェックボックスをオンにして、
名前を入力します。[次へ
次へ]ボタンをクリックして、手順を続行します。
66
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
12. [データベースオブジェクトの選択
データベースオブジェクトの選択]ページで、[テーブル
テーブル]ノードを展開して、[製品
製品]テーブルを選択し、すべてのフィールドを
オンにします。[データセット名
データセット名]ボックスに[NwindDataSet]を入力し、[終了
終了]をクリックしてウィザードを終了します。
67
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
13. データセットと接続文字列がプロジェクトに追加されます。さらに、Visual Studio が次のコードを自動的に作成してデータセッ
トに入力します。
Visual Basic コードの書き方
Visual Basic
Me.ProductsTableAdapter.Fill(Me.ProductsDS.Products)
C# コードの書き方
C#
this.productsTableAdapter.Fill(this.productsDS.Products);
プログラムを実行し、次の点に注目します。
[Products]テーブルのデータがグリッドに表示されます。
68
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
おめでとうございます ! グリッドアプリケーションがデータソースに正常に連結されました。次のトピックでは、書式スタイル、
VisualStyle、および組み込みスタイルをカスタマイズする方法について学習します。
手順 3: C1FlexGrid の設定をカスタマイズする
次の手順では、グリッドの書式スタイル、VisualStyle、および組み込みスタイルの設定を順を追って説明します。
1. デザイナを表示し、最初の列ヘッダーの右端に表示される水平方向の二重矢印を[UnitPrice]列が表示されるまで左
にドラッグして、グリッドの最初の列のサイズを変更します。
2. [UnitPrice]列をクリックして、[Column タスク
タスク]メニューを開きます。
69
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
3. [書式設定
書式設定]テキストボックスの横にある省略符号ボタンをクリックして、[書式文字列のダイアログボックス
書式文字列のダイアログボックス]を開きま
す。
4. [書式文字列のダイアログボックス
書式文字列のダイアログボックス]で、[形式の種類
形式の種類]の下にある[通貨
通貨]を選択して、[OK]をクリックします。
5. [プロパティ
プロパティ]ウインドウで、 VisualStyle プロパティを Office2007Blue に設定します。
6. C1FlexGrid タスク メニューを開きます。直前にタスクメニューを使用して列を編集したので、[Column タスク
タスク]メニュー
が表示されます。[C1FlexGrid タスク
タスク]を選択して、C1FlexGrid タスク
タスクメニューに戻ります。
7. [C1FlexGrid タスク
タスク]メニューで、[スタイルエディタ]を選択して、スタイル
スタイルエディタ を開きます。
8. [組み込みスタイル
組み込みスタイル]の下にある[Fixed]を選択します。
9. 右ペインの[Font]ノードを展開して、Bold プロパティを True に設定します。
10. ForeColor プロパティを「Web」タブの CornflowerBlue に設定し、[OK]をクリックしてダイアログボックスを閉じます。
プログラムを実行し、次の点に注目します。
グリッドアプリケーションに書式文字列、C1FlexGridBase.VisualStyle、および組み込みスタイルを使用した[Products]テーブ
ルが表示されます。
70
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
グリッドの書式文字列、C1FlexGridBase.VisualStyle、および組み込みスタイルが正常に設定されました。これでクイックスター
トは終了です。
71
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
設計時のサポート
設計時に Visual Studio のプロパティグリッド、メニュー、デザイナを使用して FlexGrid for WinForms を構成できます。以下
のセクションでは、C1FlexGrid の設計時環境を使用し、C1FlexGrid コントロールを設定する方法について説明します。
エディタ
C1FlexGrid のレイアウトと外観を制御できる設計時エディタとして、列エディタとスタイルエディタ
列エディタとスタイルエディタの2つがあります。さらに、特
定列のキャプションおよび列の外観を変更できる設計時エディタとして、キャプションスタイルと列スタイル
キャプションスタイルと列スタイルの2つがあります。
列エディタ
コードを記述するかわりに、設計時にグリッド列の設定をすることができます。デザイナは、次の3つの方法のいずれかでアク
セスできます。
フォームに貼り付けたグリッドを選択し、プロパティウィンドウの Cols プロパティの隣に表示される省略ボタン(…)をク
リックする
コントロールを右クリックし、コンテキストメニューから列エディタ
列エディタを選択します。
グリッドの右上隅にあるスマートタグ ( ) をクリックし、C1FlexGrid タスク メニューから列エディタ
列エディタを選択します。
以下のような列エディタ
エディタが表示されます。
連結モードでは、DataSource のフィールドの表示や、列のキャプション、幅、表示位置などの設定が行えます。非連結モード
では、列のデータタイプを選択するために同じく使用します。
FlexGrid 列エディタで行える操作は次のとおりです。
列の移動: マウスでヘッダセルを新しい位置へドラッグすることで、列の移動が行えます。
列幅調整: マウスでヘッダセルの右端をドラッグすることで、列幅を変更できます。また、〈Shift〉キーを押しながら他の
72
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ヘッダセルをクリックすることで複数列を選択でき、プロパティウィンドウを用いて同時にセル幅を変更できます。列幅
を-1に設定すると、デフォルトの幅に戻ります。
列プロパティの設定: 1つ以上の列が選択されている場合、エディタの左にあるプロパティグリッドで、選択されている
列のプロパティを確認したり編集が行えます。
列の挿入、または削除: 選択した列の前、または後に新しい列の挿入や(主にアンバウンドモードで有用)、選択した
列を削除するためにツールバーを使用してください。
一般的な操作を行うためのツールバー: 下記はツールバー上のボタンの機能について説明しています。
ボタン
説明
フォント: ドロップダウンリストで選択したフォントを設定します。
フォントサイズ: ドロップダウンリストで選択したフォントサイズを設定します。
フォントの書式設定: フォントに太字、斜体、下線を適用します。
位置揃え: フォントの配置を左、中央、右、標準に設定します。
配置: 列の内容を、上詰め、中央揃え、下詰めに整列させます。これらは、グリッドの列のヘッダ以
外の領域に反映されます。列のヘッダの配置を設定するには、列を選択して、TextAlignFixed プロ
パティを設定してください。
背景色: 選択した列の背景色を設定します。
前景色: 選択した列の前景色を設定します。
固定行を対象とする: 固定行に設定を適用します。
ヘルプ: プロパティグリッドで選択したプロパティの説明を表示するかどうかを決めます。
全ての変更を元に戻す: 変更をすべて取り消し、デフォルトの状態に戻します。
ロード後に列幅を調整: このボタンは、グリッドがデータソースに連結される場合に、データの内容
にあわせてグリッドが自動的にすべての列幅を調整するかどうかを決めます。
データソースから再ロード: 現在のデータソースから取得した情報ですべての列をリセットします。グ
リッドがデータソースに連結され、最初から編集し始めたい場合に、このボタンは有用です。グリッド
がデータソースに連結されない場合、ボタンは無効になります。
列の選択: ドロップダウンリストから設定する列を選択します。
列の挿入: 選択した列の左側、もしくは右側に列を挿入します。これらのボタンはグリッドのみに機
能し、データソースには影響を及ぼしません。
列の削除: 選択した列を削除します。
列幅: 選択しているすべての列の幅を同じ幅に揃えるか、広げるか狭くします。
列の表示/非表示: 列の表示/非表示を切り替えます。
すべての列を表示: すべての列を表示します。
非表示列を表示: 非表示の列を見えるように表示します。列の Visible プロパティをFalseに変更す
ると列は非表示になります。こうすることで、マウスで列を選択できなくなります。それらを選択し編
集することができるように、列をすべて表示するためにはこのボタンを使用してください。
これらのボタンは、プロパティグリッドを制御します。選択した列のプロパティをアルファベット順に表
示するか分類された順に表示するかどうかを決めます。
73
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
スタイルエディタ
必要に応じて、スタイルをコードの記述時ではなく設計時に設定できます。スタイルエディタ
スタイルエディタは、次の3つの方法のいずれかで
アクセスできます。
該当するグリッドを選択し、プロパティウィンドウを開いて Styles プロパティの隣に表示される省略ボタン(…)をクリック
します。
グリッドを右クリックし、コンテキストメニューからスタイル
スタイルエディタを選択します。
グリッドの右上隅にあるスマートタグ ( ) をクリックし、C1FlexGrid タスク メニューからスタイルエディタ
スタイルエディタを選択します。
次のスタイルエディタのダイアログが表示されます。
スタイルエディタを使用すると、既存のスタイル変更や新しいカスタムスタイルを追加して、それらをセル、行、および列に後か
ら設定することができます。
〈追加
追加〉と〈削除
削除〉ボタンは、カスタムスタイルを追加および削除します。リスト内でカスタムスタイルを選択して新しい名前を入力
すると、カスタムスタイルの名前を変更できます。〈クリア
クリア〉ボタンは、すべてのカスタムスタイルを削除して組み込みスタイルを
デフォルト値に戻します。
〈オートフォーマット
オートフォーマット〉ボタンは、定義済みスタイルの完全セットを選択できる2番目のダイアログを表示します。[オートフォー
オートフォー
マット
マット]ダイアログの外観は次のとおりです。
74
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
キャプションスタイルと列スタイル
選択した列のキャプションスタイル
キャプションスタイルエディタと列スタイル
列スタイルエディタを使用し、それぞれ、キャプションテキストと列テキストのプロ
パティ、および配置、背景、境界線を指定できます。
キャプションスタイル
キャプションスタイルエディタと列スタイル
列スタイルエディタは、Column タスク
タスクメニューでのみアクセスできます。Column タスク
タスクメ
ニューの詳細については、「Column タスク」を参照してください。
キャプションスタイル
キャプションスタイルエディタと列スタイル
列スタイルエディタには、「テキスト
テキスト」、「配置
配置」、「背景
背景」、「罫線
罫線」の4つのタブがあります。[プレ
プレ
ビュー
ビュー]領域では、グリッドに適用する前の設定を確認できます。
テキスト
「テキスト
テキスト」タブは、キャプションのフォントと書式を設定します。
75
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
フォント
フォント領域では、次のオプションが使用できます。
フォント名: フォント名を選択します。
サイズ: フォントサイズを選択します。
色: フォント色を選択します。
文字の方向: Normal(標準)、Up(上方向)、Down(下方向)から選択します。
フォントの効果: ボタンを使用し、太字、斜体、下線の ON/OFF を切り替えます。
フォーマット
フォーマット領域では、次のオプションが使用できます。
書式設定: 〈...〉ボタンをクリックし、[書式文字列
書式文字列]ダイアログボックスを開きます。[書式文字列
書式文字列]ダイアログの詳細につ
いては、セルの内容 を参照してください。
入力マスク: 〈...〉ボタンをクリックし、[定型入力
定型入力]ダイアログボックスを開きます。[定型入力
定型入力]ダイアログの詳細につい
ては、マスク . を参照してください。
3D効果:
効果: Flat(フラット)、Raised(浮出し)、Inset(くぼみ)のいずれかを選択します。テキストの効果オプションの詳細
については、TextEffectEnum 列挙体を参照してください。
トリミング: None、Character、Word、EllipsisCharacter、EllipsisWord、EllipsisPath から選択し、長い文字列をセ
ルに合わせてトリミングする方法を設定します。トリミングの詳細については、Visual Studio のヘルプ
「StringTrimming 列挙体(System.Drawing)」 を参照してください。
折り返して全体を表示する: キャプションのワードラップを有効にするには、このボックスを ON にします。
配置
76
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
「配置
配置」タブは、キャプションのテキストと画像の両方の配置を設定します。
文字の配置領域では、次のオプションが使用できます。
横位置: ボタンをクリックし、左揃え、中央揃え、右揃え、標準
左揃え、中央揃え、右揃え、標準を切り替えます。
縦位置: ボタンをクリックし、上揃え、中央揃え、下揃え
上揃え、中央揃え、下揃えを切り替えます。
画像の配置領域では、次のオプションが使用できます。
配置: ボタンをクリックし、セル内の画像配置を切り替えるか、画像のスケール、タイル、ストレッチ、タイルストレッチ
スケール、タイル、ストレッチ、タイルストレッチ、
非表示を切り替えます。画像の配置オプションの詳細については、ImageAlignEnum 列挙体を参照してください。
サンプルイメージの表示: [プレビュー]領域にサンプル画像を表示するには、[サンプルイメージの表示]ボックスを
ON にします。
表示領域では、次のオプションが使用できます。
テキスト
テキスト/画像の間隔:
画像の間隔:この値を増減し、テキストと画像の間の間隔を調整します。
表示方法: TextOnly、ImageOnly、Overlay、Stack、None から選択します。表示方法の詳細については、
DisplayEnum列挙体を参照してください。
77
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
背景
「背景
背景」タブは、背景色と背景画像を設定します。
背景色領域では、次のオプションが使用できます。
色: セルの背景色を選択します。
背景画像領域では、次のオプションが使用できます。
画像: 画像を選択するには〈選択〉ボタンをクリックし、画像を削除するには〈クリア〉ボタンをクリックします。
レイアウト: スケール、タイル、ストレッチ、タイルストレッチ、非表示を切り替えます。
罫線
「罫線
罫線」タブは、罫線と余白を設定します。
78
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
罫線領域では、次のオプションが使用できます。
スタイル: None(なし)、
(なし)、Flat(フラット)、
(フラット)、Double(2重線)、
(2重線)、Raised(浮出し)、
(浮出し)、Inset(くぼみ)、
(くぼみ)、Groove,(溝付き)、
(溝付き)、Fillet
(フィレット)、
(フィレット)、Dotted(点線)
(点線)から選択します。各種の罫線スタイルオプションの詳細については、
C1.Win.C1FlexGrid.BorderStyleEnum Enumeration列挙体を参照してください。
幅: 値を増減し、罫線の幅を調整します。
色: 罫線の色を選択します。
文字の方向: Both(両方向)、
(両方向)、Horizontal(水平方向)、
(水平方向)、Vertical(垂直方向)
(垂直方向)から選択します。各種の罫線の方向オプ
ションの詳細については、BorderDirEnum 列挙体を参照してください。
余白領域では、次のオプションが使用できます。
左: 値を増減し、左余白を調整します。
上: 値を増減し、上余白を調整します。
右: 値を増減し、右余白を調整します。
下: 値を増減し、下余白を調整します。
スマートタグ
スマートタグ()は、各コントロールで通常使用されるプロパティを提供するショートカット[タスク
タスク]メニューを表します。
C1FlexGrid を通じて使用可能なスマートタグには、[C1FlexGrid タスク]メニューと[Column タスク]メニューの2種類のがあ
ります。
79
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C1FlexGrid タスク
C1FlexGrid タスク
タスクメニューでは、列エディタ と スタイルエディタ にすばやくアクセス
し、AllowAddNew、AllowDelete、AllowEditing、AllowDragging の各プロパティを設定できます。
C1FlexGrid タスク
タスクメニューにアクセスするには、グリッドの右上隅にあるスマートタグ ( ) をクリックします。C1FlexGrid タス
クメニューが開きます。C1FlexGrid タスク
タスクメニューは以下のように操作します。
データソースの選択
[データソースの選択
データソースの選択]ボックスのドロップダウン矢印をクリックし、使用可能なデータソースのリストを開きます。新しいデータ
ソースを追加できるようになります。プロジェクトに新しいデータソースを追加するには、〈プロジェクトデータソースの追加
プロジェクトデータソースの追加…〉〉を
クリックして[データソース構成ウィザード
データソース構成ウィザード]を開きます。
80
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
プロジェクトに新しいデータソースを追加する方法の詳細については、データソースへの連結 を参照してください。
追加を有効にする
[追加を有効にする
追加を有効にする]チェックボックスを ON にすると、AllowAddNew プロパティが True になり、グリッドに新しい行を追加で
きるようになります。デフォルトは、OFF となっています。
削除を有効にする
[削除を有効にする
削除を有効にする]チェックボックスを ON にすると、AllowDelete プロパティが True になり、グリッドの行を削除できるよう
になります。デフォルトは、OFF となっています。
編集を有効にする
[編集を有効にする
編集を有効にする]チェックボックスを ON にすると、AllowEditing プロパティが True になり、グリッドの行を編集できるよう
になります。デフォルトは、ON となっています。
列の順序変更を有効にする
[列の順序変更を有効にする
列の順序変更を有効にする]チェックボックスを ON にすると、AllowDragging プロパティが True になり、グリッドの列をド
ラッグできるようになります。デフォルトは、ON となっています。
VisualStyle
VisualStyle については、「VisualStyle を使用して外観を変更する」を参照してください。
列エディタ
〈列エディタ…〉をクリックすると、列エディタ を開きます。
81
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
スタイルエディタ
〈スタイルエディタ…〉をクリックすると、スタイルエディタ を開きます。
82
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
.
Column タスク
〈Column タスク
タスク〉をクリックすると、Column タスク メニューが開きます。
C1FlexGridのバージョン情報
のバージョン情報
クリックすると、[C1FlexGrid のバージョン情報
のバージョン情報]ダイアログボックスが開きます。ここで、C1FlexGrid のバージョン番号を見る
ことができます。
親コンテナにドッキング/ドッキング解除
〈親コンテナにドッキングする
親コンテナにドッキングする〉をクリックすると、C1FlexGrid コントロールの Dock プロパティが Fill に設定されます。
C1FlexGrid が親コンテナにドッキングされると、親コンテナから C1FlexGridをドッキング解除するオプションが使用可能にな
ります。〈親コンテナでドッキングを解除する
親コンテナでドッキングを解除する〉をクリックすると、C1FlexGridの Dock プロパティが None に設定されます。
Column タスク
Column タスク
タスクメニューでは、列のキャプション、データフィールド、データ型、入力マスク、書式文字列、列のコンボリストを設
定し、 AllowSorting、AllowEditing、AllowResizing、AllowDragging、AllowMerging、Visible の各プロパティを設定す
ることもできます。
Column タスク
タスクメニューにアクセスするには、グリッドの列をクリックするか、C1FlexGrid タスク メニューから[Column タスク
タスク]
83
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
を選択します。
列キャプション
[列キャプション
列キャプション]ボックスにキャプションを入力すると、列の Captionプロパティが設定されます。
データフィールド
[データフィールド
データフィールド]ボックスのドロップダウン矢印をクリックすると、データソースで使用可能なフィールドのリストが開きます。
データ型
[データ型
データ型]ボックスのドロップダウン矢印をクリックすると、使用可能なデータ型のリストが開きます。
84
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
入力マスク
[入力マスク
入力マスク]ボックスの〈...〉ボタンをクリックすると、[定型入力
定型入力]ダイアログボックスが開きます。
85
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
書式設定
[書式設定
書式設定]ボックスの〈...〉ボタンをクリックすると、[書式文字列
書式文字列]ダイアログボックスが開きます。
コンボリスト
86
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
[コンボリスト
コンボリスト]ボックスの〈...〉ボタンをクリックすると、[コンボリスト
コンボリスト]ダイアログボックスが開きます。
ソートを有効にする
[ソートを有効にする
ソートを有効にする]チェックボックスを ON にすると、AllowSorting プロパティが True に設定され、列のソートが可能になり
ます。デフォルトは、ON となっています。
編集を有効にする
[編集を有効にする
編集を有効にする]チェックボックスを ON にすると、AllowEditing プロパティが True に設定され、列の編集が可能になり
ます。デフォルトは、ON となっています。
サイズ変更を有効にする
[サイズ変更を有効にする
サイズ変更を有効にする]チェックボックスを ON にすると、AllowResizing プロパティが True に設定され、列のサイズ変更
が可能になります。デフォルトは、ON となっています。
順序変更を有効にする
[順序変更を有効にする
順序変更を有効にする]チェックボックスを ON にすると、AllowDragging プロパティが True に設定され、グリッドの列のド
ラッグが可能になります。デフォルトは、ON となっています。
マージを有効にする
[マージを有効にする
マージを有効にする]チェックボックスを ON にすると、AllowMerging プロパティが True に設定され、列でのマージが可能
になります。デフォルトは、OFF となっています。
表示
[表示
表示]チェックボックスを ON にすると、Visibleプロパティが True に設定され、列はグリッド内で表示状態になります。デフォ
ルトは、ON となっています。
87
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
キャプションスタイル
〈キャプションスタイル
キャプションスタイル…〉をクリックすると、選択した列のキャプション
キャプションスタイルエディタが開きます。ここで、配置、背景、罫線を
含む、キャプションテキストの各プロパティを指定できます。
列スタイル
〈列スタイル
列スタイル…〉をクリックすると、選択した列の列スタイル
列スタイルエディタが開きます。ここで、テキスト、配置、背景、罫線を含む、列
の各プロパティを指定できます。
88
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C1FlexGrid タスク
〈C1FlexGrid タスク
タスク〉をクリックすると、C1FlexGrid タスク メニューに戻ります。
親コンテナにドッキング/ドッキング解除
〈親コンテナにドッキングする
親コンテナにドッキングする〉をクリックすると、C1FlexGrid コントロールの Dock プロパティが Fill に設定されま
す。C1FlexGrid が親コンテナにドッキングされると、親コンテナから C1FlexGrid をドッキング解除するオプションが使用可能
になります。〈親コンテナでドッキングを解除する
親コンテナでドッキングを解除する〉をクリックすると、C1FlexGrid の Dock プロパティが None に設定されます。
89
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
基本操作
基本操作
C1FlexGridコントロールを使用すると、グリッド形式のデータを表示、編集、グループ化、あるいは集計できます。グリッドは
ADO.NETデータソースに連結することも、グリッド独自のデータを管理することもできます。
C1FlexGrid コントロールは、以下の要素で構成された多機能なオブジェクトモデルを用意しています。
90
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
以下の各トピックでは、C1FlexGrid コントロールの主な機能について紹介します。
行と列
グリッドの寸法とレイアウトの設定方法について説明します。
データの取 グリッドへのデータ設定、および取得について説明します。
得と設定
セルの選
91
「カレントセル」と「セル範囲」の概念について説明します。
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
択
セルの範
囲
任意のセルグループを単一の単位として使用する方法について説明します。
セルのイ
メージ
セル内に画像を表示する方法について説明します。
セルの
フォーマッ
ト
数値、日付、およびブール値の書式設定、あるいは個々のセルまたは範囲のフォント、色、配置、およびピク
チャの変更により、グリッドの外観をカスタマイズする方法について説明します。
セルの編
集
簡単なテキスト編集、ドロップダウンリストおよびコンボリスト、セルボタン、マスク編集、およびデータ検証を実
装する方法について説明します。
セルの
マージ
グリッドの表示を変更して同じ内容のセルをマージし、データ内での関係をハイライト表示する「グループ化し
た」ビューを作成する方法について説明します。
アウトライ
ンとデータ
の集計
グリッドに小計行を追加し、アウトラインツリーを構築する方法について説明します。
保存とロー グリッドの内容または書式設定を保存し、後で再読み込みしたり、グリッドデータを Microsoft Access および
ド、および Excel などの他のアプリケーションと交換する方法について説明します。このセクションでは、グリッドを印刷す
印刷
る方法についても説明します。.
プロパティ
グループ
主要な C1FlexGridプロパティ一覧。機能別に相互参照可能.
行と列
C1FlexGrid コントロールは、行と列で構成されます。行および列の各コレクションは、Rows プロパティと Colsプロパティに
よって提供されます。
グリッドをデータソースに連結する場合、行および列の数はデータソースで使用できるデータ量によって決まります。非連結
モードでは、コレクション内で Count プロパティを使用し、それらを任意の値に設定できます。たとえば、次のコードでは、グ
リッドの行数と列数を、500行と10列に設定します。
Visual Basic コードの書き方
Visual Basic
_flex.Rows.Count = 500
_flex.Cols.Count = 10
C# コードの書き方
C#
_flex.Rows.Count = 500;
_flex.Cols.Count = 10;
行と列には、「固定
固定」と「スクロール可能
スクロール可能」の2つの基本タイプがあります(Count プロパティが返すカウントは、固定セルおよび
スクロール可能なセルの数を含みます)。固定行は、ユーザーがグリッドを垂直方向にスクロールしても常にグリッドの一番上
に、固定列は、ユーザーがグリッドを水平方向にスクロールしても常にグリッドの左端に表示されます。この他にも、行と列に
はスクロールされませんが、編集が可能な「静止」タイプ(Frozen プロパティ)があります。
92
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
固定セルは、行や列のヘッダ情報を表示する場合に便利です。
Rows および Cols コレクションの RowColCollection.Fixed プロパティを使用すると、固定の行および列の数を設定できま
す。たとえば、次のコードは固定行および非固定列を持ったグリッドを作成します。
Visual Basic コードの書き方
Visual Basic
_flex.Rows.Fixed = 1
_flex.Cols.Fixed = 0
C# コードの書き方
C#
_flex.Rows.Fixed = 1;
_flex.Cols.Fixed = 0;
また、Rows および Cols コレクションには、グリッド上で行や列を挿入、削除、および移動するメソッドも含まれます。 Item プ
ロパティ(インデクサ)を使用すると、各コレクションの個々の要素(行と列)にアクセスできます。
コードではなく、設計時に 列エディタ を使用して列に関するさまざまな設定することもできます。列エディタを使用して列の設
定を行う方法の詳細については、「列エディタ」を参照してください.
列のサイズ変更
列の幅は、その Width プロパティで指定します。設計時に、Width プロパティは、グリッド内で直接設定することも、列エディ
列エディ
タから設定することもできます。デザイン画面で変更する場合、列ヘッダの右端に表示される水平方向の二重矢印をクリックし
てドラッグすると、列のサイズを変更できます。
93
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
点線の垂直線は、グリッドのサイズがどのように変更されるかを示します。ポインタを左にドラッグすると、列のサイズは小さく
なり、右にドラッグすると列のサイズは大きくなります。列の Width プロパティは、サイズ変更操作が完了したときに調整され
ます。
列エディタまたはコードによって、列の Width プロパティを指定します。列エディタの詳細については、列エディタ を参照してく
ださい。次のコードは、列の Width プロパティを 10 に設定します。
Visual Basic コードの書き方
Visual Basic
_flex.Cols(1).Width = 10
C# コードの書き方
C#
_flex.Cols(1).Width = 10
特定の列のサイズ変更を禁止するには、Column タスク
タスクメニュー、列エディタ、コードのいずれかを使用し、列の
AllowResizing プロパティを False に設定します。Column タスクメニューの詳細については、Column タスク を参照してくだ
さい。次のコードは、Column1 の AllowResizing プロパティを False に設定します。
Visual Basic コードの書き方
Visual Basic
_flex.Cols(1).AllowResizing = False
C# コードの書き方
C#
_flex.Cols(1).AllowResizing = False
セルの選択
グリッドはカレントセル
カレントセルを持っています。グリッドがアクティブの間、カレントセルの周囲にはフォーカス長方形が表示されます。ユーザーはキーボードやマウスでカー
ソルを移動し、グリッドが編集可能であればセルの内容を編集できます。
94
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Office の視覚スタイルが、カーソルセルの位置の行および列ヘッダーをハイライトして、カーソルのロケーションも表します。VisualStyle の設定については、
「VisualStyle を使用して外観を変更する」を参照してください。
Row および Col プロパティを使用して、カレントセルをコードで取得または設定することができます。これらのプロパティのいずれかを –1 に設定すると、カーソルが
非表示になります。
グリッドは、拡張セル選択をサポートしています。これは、2つの対角(カレントセルと、セル選択セル
カレントセルと、セル選択セル)によって定義されるセルの長方形範囲です。セル範囲をコード
によって取得または設定するには、RowSel と ColSel プロパティを使用します。あるいは、Selection プロパティを使用し、セル範囲を設定することもできます。
注意:
注意:カレントセルを変更すると、セル範囲が自動的にリセットされます。コーディングによって拡張セル範囲を作成するには、RowSel と ColSel の前に Row
と Col を設定するか、Select メソッドを使用します。
セル範囲の外観は、次の各プロパティが制御します。
FocusRect カレントセルを表示するために描画されるフォーカス長方形の種類を決定します。
HighLight deセル範囲をハイライト表示するタイミング(常に、コントロールにフォーカスを持つときと、持たないときはハイライト表示しない)を指定します。
HighLight と Focus これは、セル範囲の外観(フォント、色、ボーダー)を指定するセルスタイルです。
使用可能なセル範囲の種類は、SelectionMode プロパティで決定します。デフォルトでは、グリッドは通常のセル範囲をサポートします。この動作を変更して拡張セ
ル範囲ができないようにすると、行や列ごと、あるいはリストボックスモードで選択できます(リストボックスモードでは個々の行を選択できます)。
リストボックスモードを使用した場合、Selected プロパティを使用して、個々の行のセル範囲状態を取得または設定できます。あるいは、Selected プロパティを使用
して、選択した行のコレクションを取得することもできます。たとえば、次のコードでは一定の条件を満たすすべての行を選択します。
Visual Basic コードの書き方
Visual Basic
' Sales列が8000以上の行をすべて選択します
_flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox
Dim index As Integer
For index = _flex.Rows.Fixed To _flex.Rows.Count - 1
If Val(_flex(index, "Sales")) > 80000 Then
_flex.Rows(index).Selected = True
End If
Next
Console.WriteLine("There are now {0} rows selected", _flex.Rows.Selected.Count)
C# コードの書き方
C#
// Sales列が8000以上の行をすべて選択します
_flex.SelectionMode = SelectionModeEnum.ListBox;
for (int index = _flex.Rows.Fixed ; index < _flex.Rows.Count; index++)
{
if
(Microsoft.VisualBasic.Conversion.Val(System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(_flex[index,
"Sales"])) > 80000)
{
_flex.Rows[index].Selected = true;
}
}
95
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Console.WriteLine("There are now {0} rows selected", _flex.Rows.Selected.Count);
セルの範囲
CellRange オブジェクトでは、任意のセルグループを単一の単位として操作できます。たとえば、次のサンプルコードは
CellRange オブジェクトを作成し、範囲内のデータをクリアし、それにカスタムスタイルを設定します。
Visual Basic コードの書き方
Visual Basic
Dim rg As CellRange = _flex.GetCellRange(3, 3, 10, 10)
rg.Data = Nothing
rg.Style = _flex.Styles("MyRangeStyle")
C# コードの書き方
C#
CellRange rg = _flex.GetCellRange(3, 3, 10, 10);
rg.Data = null;
rg.Style = _flex.Styles["MyRangeStyle"];
CellRange オブジェクトは、StyleNew プロパティを持っています。このプロパティは、既存の範囲スタイルが存在すればそれ
を取得します。存在しない場合は、新しい範囲スタイルを作成し、それに範囲を設定して返します。このプロパティは、書式設
定するときにフル装備の制御を必要としない場合に便利です。たとえば、指定範囲に赤い背景色を指定するだけであれば、次
のように記述できます。
Visual Basic コードの書き方
Visual Basic
Dim rg As CellRange = _flex.GetCellRange(3, 3, 10, 10)
rg.StyleNew.BackColor = Color.Red
C# コードの書き方
C#
CellRange rg = _flex.GetCellRange(3, 3, 10, 10);
rg.StyleNew.BackColor = Color.Red;
セルのイメージ
各グリッドセルは、セル内に格納されているデータのほか、画像も表示できます。これは、次の2つの方法で行うことができま
す。
SetCellImage メソッドを使用して Image オブジェクトをセルに設定する方法。このメソッドを使用すると、任意のイメー
ジを各セルに設定することができるため、イメージがセルのデータに関連付けられていない場合に便利です。たとえ
ば、ピクチャをセルのデータが無効である場合のインジケータとして使用できます。
ImageMapプロパティを列に設定する方法。グリッドは、自動的にセルデータを関連付けられているイメージにマッピン
グします。このメソッドは、イメージにデータの絵などの表現が含まれている場合に便利です。たとえば、イメージは、製
品の種類を表すアイコンを含むことができます。
96
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
セルのフォーマット
C1FlexGrid コントロールの主なパワフルな機能の1つは、グリッド全体と個々のセルの外観のほとんどあらゆる要素をカスタ
マイズできる点です。
セルの内容
セルの内容を書式設定する方法を制御するには、Format プロパティを .NET Framework の String.Format メソッドで使用
するのと同じ書式文字列に設定します。たとえば、次のコードは列1に short date (短い日付)、列2に Currency (通貨)の値
を示しています。
Visual Basic コードの書き方
Visual Basic
' Short date (短い日付)
_flex.Cols(1).Format = "d"
' Currency (通貨)
_flex.Cols(2).Format = "c"
C# コードの書き方
C#
// Short date (短い日付)
_flex.Cols[1].Format = "d";
// Currency (通貨)
_flex.Cols[2].Format = "c";
セルの内容の書式設定は、設計時に[書式文字列
書式文字列]ダイアログボックスを使用して設定することもできます。
97
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
[書式文字列
書式文字列]ダイアログボックスは、Column タスク メニューまたは列エディタ からアクセスできます。
Column タスク メニューで、[書式設定
書式設定]ボックスの〈...〉ボタンをクリックします。
列エディタ で、左ペインの Format プロパティを探し、その横の〈...〉ボタンをクリックします。
注意:
注意:[書式文字列
書式文字列]ダイアログボックスは列固有で、選択した列の Format プロパティのみを変更します。
Visual Basic の Format 関数で使用するようなカスタム書式("#,###"、など)も使用できます。
セルデータの取得
インデクサまたは GetData メソッドを使用して、グリッドのデータ自体を取得できます。書式設定したデータを取得するに
は、GetDataDisplayメソッドを使用します。たとえば、次のようになります。
Visual Basic コードの書き方
Visual Basic
' Short date (短い日付)
_flex.Cols(1).Format = "d"
' Currency (通貨)
_flex.Cols(2).Format = "c"
_flex(1, 2) = 10000
Console.WriteLine("Raw value: {0}", _flex(1, 2))
Console.WriteLine("Display value: {0}", _flex.GetDataDisplay(1, 2))
' Raw value: 10000
' Display value: $10,000.00
98
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
// Short date (短い日付)
_flex.Cols[1].Format = "d";
// Currency (通貨)
_flex.Cols[2].Format = "c";
_flex[1, 2] = 10000;
Console.WriteLine("Raw value: {0}", _flex[1, 2]);
Console.WriteLine("Display value: {0}", _flex.GetDataDisplay(1, 2));
// Raw value: 10000
// Display value: $10,000.00
セルの外観
セルの外観(配置、フォント、色、ボーダーなど)は、CellStyle オブジェクトで処理します。グリッドには Stylesプロパティがあ
り、このプロパティにグリッドの書式設定に使用するスタイルのコレクションが格納されています。このコレクションは、グリッド
要素(固定セル、スクロール可能セル、セル範囲、フォーカスセルなど)の外観を定義する組み込みメンバを持っています。こ
れらのスタイルを変更し、グリッドの外観を変更できます。また、独自のカスタムスタイルを作成し、セル、行、または列に設定
することができます。
グリッドの外観を変更する最も簡単な方法は、組み込みスタイルを変更することです。たとえば、次のサンプルコードは、範囲
指定したセルを赤い背景に緑のボールド文字で表示します。
Visual Basic コードの書き方
Visual Basic
Dim cs As CellStyle = _flex.Styles.Highlight
cs.Font = New Font(_flex.Font, FontStyle.Bold)
cs.ForeColor = Color.Green
cs.BackColor = Color.Red
C# コードの書き方
C#
CellStyle cs = _flex.Styles.Highlight;
cs.Font = new Font(_flex.Font, FontStyle.Bold);
cs.ForeColor = Color.Green;
cs.BackColor = Color.Red;
あるいは、独自のスタイルを作成して、セル、行、および列に設定することもできます。たとえば、次のサンプルコードは、カスタ
ムのセルスタイルを作成して、それを5行ごとに指定します。
Visual Basic コードの書き方
Visual Basic
Dim cs As CellStyle = _flex.Styles.Add("Fifth")
cs.BackColor = Color.Gray
Dim idex%
99
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
For idex = _flex.Rows.Fixed To _flex.Rows.Count - 1 Step 5
_flex.Rows(idex).Style = cs
Next
C# コードの書き方
C#
CellStyle cs = _flex.Styles.Add("Fifth");
cs.BackColor = Color.Gray;
for (int index = _flex.Rows.Fixed ; index <= _flex.Rows.Count - 1; index += 5)
{
_flex.Rows[index].Style = cs;
}
カスタムスタイルを作成して、それらを列、行、およびセル範囲に割り当てるには、次のように記述します。
Visual Basic コードの書き方
Visual Basic
' 新しいカスタムスタイルを作成します。
Dim s As CellStyle = _flex.Styles.Add("MyStyle")
s.BackColor = Color.Red
s.ForeColor = Color.White
' 列に新しいカスタムスタイルを適用します。
_flex.Cols(3).Style = _flex.Styles("MyStyle")
' 行に新しいカスタムスタイルを適用します。
_flex.Rows(3).Style = _flex.Styles("MyStyle")
' セル範囲に新しいカスタムスタイルを適用します。
Dim rg As CellRange = _flex.GetCellRange(4, 4, 6, 6)
rg.Style = _flex.Styles("MyStyle")
C# コードの書き方
C#
/// 新しいカスタムスタイルを作成します。
CellStyle s = _flex.Styles.Add("MyStyle");
s.BackColor = Color.Red;
s.ForeColor = Color.White;
/// 列に新しいカスタムスタイルを適用します。
_flex.Cols[3].Style = _flex.Styles["MyStyle"];
// 行に新しいカスタムスタイルを適用します。
_flex.Rows[3].Style = _flex.Styles["MyStyle"];
// セル範囲に新しいカスタムスタイルを適用します。
CellRange rg = _flex.GetCellRange(4,4,6,6);
rg.Style = _flex.Styles["MyStyle"];
100
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
コードではなく、設計時にスタイルエディタ
スタイルエディタを使用してスタイルを設定することもできます。スタイルエディタ
スタイルエディタを使用してセルの外
観を設定する方法の詳細については、「スタイルエディタ」を参照してください。
条件付きの書式設定
セルをその内容に基づいて書式設定するには、CellChangedイベントを使用して、内容に基づいたセルスタイルを選択しま
す。たとえば、次のサンプルコードは、新しいスタイルを作成し、それをセルの内容に基づいてセルに適用します。
Visual Basic コードの書き方
Visual Basic
Dim cs As C1.Win.C1FlexGrid.CellStyle
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 大きな値の場合に設定するカスタムスタイルを作成します
cs = _flex.Styles.Add("LargeValue")
cs.Font = New Font(Font, FontStyle.Italic)
cs.BackColor = Color.Gold
End Sub
' 内容によってスタイルを設定します
Private Sub _flex_CellChanged(ByVal sender As Object, ByVal e As RowColEventArgs)
Handles _flex.CellChanged
' 50,000より大きい場合スタイルを設定します
'(それ以外の場合、スタイルには Nothing が設定されます)
Dim cs As CellStyle
If _flex(e.Row, e.Col).ToString >= 50000 Then
cs = _flex.Styles("LargeValue")
_flex.SetCellStyle(e.Row, e.Col, cs)
End If
End Sub
C# コードの書き方
C#
CellStyle cs;
private void Form1_Load(object sender, EventArgs e)
{
// 大きな値の場合に設定するカスタムスタイルを作成します
cs = _flex.Styles.Add("LargeValue");
cs.Font = new Font(Font, FontStyle.Italic);
cs.BackColor = Color.Gold;
}
// 内容によってスタイルを設定します
private void _flex_CellChanged( object sender, RowColEventArgs e)
{
101
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// 50,000より大きい場合スタイルを設定します
'(それ以外の場合、スタイルには Null が設定されます)
if (Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(_flex[e.Row,
e.Col].ToString()) >= 50000)
{
cs = _flex.Styles["LargeValue"];
_flex.SetCellStyle(e.Row, e.Col, cs);
}
}
オーナー描画セル
CellStyleオブジェクトがセルの外観(背景および前景色、配置、フォント、マージン、ボーダーなど)の多くを制御している場合
でも、それだけでは十分ではないことがあります。グラデーションの背景を使用したり、カスタムグラフィックを直接セルに描画
したい場合があります。こうした場合には、 DrawModeプロパティと OwnerDrawCell イベント使用すると、各セルの描画方
法を完全に制御できます。
DrawMode プロパティは、OwnerDrawCell イベントを発生させるかどうかを決定します。このイベントを使用すると、セルの
あらゆる視覚的な外観を変更できます。OwnerDrawCellイベントの引数を使用すると、表示データやデータの表示に使用す
るスタイルを変更できます。また、完全に継承したり、希望のものはすべてセルに描画できます。
イベントハンドラ内の e.Text と e.Image の各引数を設定すると、セルに表示するテキストとイメージを変更できます。ま
た、e.Style プロパティを設定すると、セルの表示に使用するスタイルも変更できます。
Style 引数のプロパティは変更できないことに注意してください。変更すると他のセルに影響する場合があるからです。代わり
に、新しい CellStyle オブジェクトを Style 引数に割り当てます。たとえば、e.Style.ForeColor = Color.Red を設定する代わ
りに、e.Style = _flex.Styles["RedStyle"] を使用してまったく新しいスタイルをこの引数に割り当てます。
また、独自の描画コードを使用してセルに描画することも、カスタムコードを e.DrawCell メソッドへの呼び出しと組み合わせる
ことさえできます。たとえば、GDI呼び出しを使用してセルの背景を描画して、次に、e.DrawCell を呼び出してセルのボーダー
や内容を表示できます。
注意:
注意:上級の OwnerDraw コードの例については、製品付属の「RtfGrid サンプル」を参照してください。
次のサンプルコードでその一例を示します。グラデーションブラシを使用して、選択したセルの背景を描画します。まず、コード
では次のように DrawMode プロパティの指定と LinearGradientBrush オブジェクトの宣言をし、グリッドがリサイズされるた
びにブラシを更新します。
Visual Basic コードの書き方
Visual Basic
Dim m_GradientBrush As System.Drawing.Drawing2D.LinearGradientBrush
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' オーナー描画セルで使用するブラシを定義します
m_GradientBrush = New
System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.SteelBlue,
Color.White, 45)
' グラデーションを行うためにオーナー描画を使用します
_flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
End Sub
102
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Private Sub _flex_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles
_flex.Resize
' コントロールのリサイズ時にグラデーションブラシを更新します
m_GradientBrush = New
System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.SteelBlue,
Color.White, 45)
End Sub
C# コードの書き方
C#
System.Drawing.Drawing2D.LinearGradientBrush m_GradientBrush;
private void Form1_Load(object sender, EventArgs e)
{
// オーナー描画セルで使用するブラシを定義します
m_GradientBrush = new
System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.SteelBlue,
Color.White, 45);
//グラデーションを行うためにオーナー描画を使用します
_flex.DrawMode = DrawModeEnum.OwnerDraw;
}
private void _flex_Resize( object sender, System.EventArgs e)
{
// コントロールのリサイズ時にグラデーションブラシを更新します
m_GradientBrush = new
System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.SteelBlue,
Color.White, 45);
}
次に、OwnerDrawCell イベントを処理し、カスタムブラシを使用してセルの背景を描画します。次のサンプルコードでは、前
景はグリッド自身がイベント引数内で DrawCell メソッドを使用して処理します。
Visual Basic コードの書き方
Visual Basic
Private Sub _flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles _flex.OwnerDrawCell
' 選択セルの背景にグラデーションブラシを使用して描画します
If _flex.Selection.Contains(e.Row, e.Col) Then
' 背景を描画します
e.Graphics.FillRectangle(m_GradientBrush, e.Bounds)
' セルの内容を描画します
e.DrawCell(C1.Win.C1FlexGrid.DrawCellFlags.Content)
103
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' セル描画の終了
e.Handled = True
End If
End Sub
C# コードの書き方
C#
private void _flex_OwnerDrawCell( object sender, OwnerDrawCellEventArgs e)
{
// 選択セルの背景にグラデーションブラシを使用して描画します
if (_flex.Selection.Contains(e.Row, e.Col))
{
// 背景を描画します
e.Graphics.FillRectangle(m_GradientBrush, e.Bounds);
// セルの内容を描画します
e.DrawCell(DrawCellFlags.Content);
// セル描画の終了
e.Handled = true;
}
}
セルの編集
デフォルトでは、C1FlexGrid コントロールのセルにユーザーが入力して編集できます。ユーザーがグリッドを編集できないよう
にするには、AllowEditing プロパティを False に設定します。特定列をユーザーが編集できないようにするに
は、AllowEditing プロパティを False に設定します。特定行をユーザーが編集できないようにするには、AllowEditing プロ
パティを False に設定します(グリッドがデータソースに連結している場合、どの列が編集可能であるかを検出して自動的に
AllowEditing プロパティが設定されます)。
セルの編集を開始するには、次の方法のどれかを使用できます。
セルに直接入力。入力すると、セルの内容は入れ替わります。
[F2]キーまたは[Enter]キーを押す。すると、グリッドは編集モードになり、カレントセルの内容が編集できます。
セルをダブルクリック。これは[F2]キーを押した場合と同じことになりますが、クリックした場所の近くから入力が行われ
ます。
基本編集モードを使用すると、ユーザーはセルに値を入力できます。編集中の列に、特定のデータ型が設定されている場合、
ユーザーが入力した値は自動的に適切なデータ型に変換されます。適切なデータ型に変換できない値をユーザーが入力した
場合、グリッドは GridError イベントを発生させてユーザーによる編集は無視します。
多くのアプリケーションでは、基本編集機能で十分間に合いますが、C1FlexGrid では、編集プロセスを制御できるプロパティ
やイベントを装備しており、選択範囲リスト、エディットボタン、高度な正当性検査の制御が行えます。Ver.2.0から
は、C1FlexGrid には外部エディタのサポートも組み込まれました。これにより、任意のコントロールをグリッドエディタとして使
用できます(たとえば、C1Input コントロールをグリッドエディタとして使用できるようになりした)。これらの機能を以下に説明し
ます。
リストボックスとコンボボックス
多くのアプリケーションでは、セルは使用可能な値を定義したリストを持っています。このような場合、ユーザーに値をドロップ
ドロップ
104
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ダウンリスト
ダウンリストから選択させることができます。これを行うには、各選択肢をパイプ文字("|")で区切った文字列
(例:"True|False|Don't know"など)を作成して、それを C1FlexGrid の ComboList プロパティやC1FlexGridBase.Cols
(Index).RowCol.ComboList プロパティに設定します。C1FlexGridBase.Cols(Index).RowCol.ComboList プロパティに設定す
ると、列ごとに異なるリストを持つことができます。これらの ComboList プロパティを設定すると、セルの横にドロップダウンが
表示されます。リストボックス、コンボボックスをクリックするか、または[F2]キーを押すと、そのセルで使用できる選択肢のリス
トが表示されます。
さらに通常、セルは共通値のリストを持っていますが、もちろんユーザーは別の値を入力することもできます。入力は、テキスト
ボックスとドロップダウンリスト
ドロップダウンリストを組み合わせたドロップダウンコンボボックスを使用して行います。コンボボックスを作成するに
は、パイプ文字("|")で区切った選択肢のリスト(例:"|True|False|Don't know")を開き、それを前と同様に C1FlexGridの
ComboList プロパティや RowCol.ComboList プロパティに設定します。
たとえば、次のサンプルコードでは、グリッドは列1に色の名前を含むドロップダウンコンボリスト、および列2にドロップダウン
コンボボックスを表示します。列1を編集するとき、ユーザーはリストから値を選択する必要があります。列2を編集するとき、
ユーザーは、値を選択することも別の値を入力することもできます。
Visual Basic コードの書き方
Visual Basic
' ドロップダウンリスト
_flex.Cols(1).ComboList = "赤|緑|青|黄
' ドロップダウンコンボ
_flex.Cols(2).ComboList = " |赤|緑|青|黄
C# コードの書き方
C#
//ドロップダウンリスト
flex.Cols[1].ComboList = "赤|緑|青|黄
//ドロップダウンコンボ
_flex.Cols[2].ComboList = "|赤|緑|青|黄
RowCol.ComboList プロパティは、設計時に[コンボリスト
コンボリスト]ダイアログボックスを使用して設定することもできます。[コンボリ
スト]ダイアログボックスでは、リストを[ドロップダウンリスト
ドロップダウンリスト]、[ドロップダウンコンボ
ドロップダウンコンボ]、[セルボタン
セルボタン]、[セルボタン(入力可
セルボタン(入力可)]
のいずれで表示するかを選択できます。
105
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
[コンボリスト
コンボリスト]ダイアログボックスは、Column タスク メニューまたは 列エディタ からアクセスできます。
Column タスク
タスクメニューで、[コンボリスト
コンボリスト]ボックスの〈...〉ボタンをクリックします。
列エディタ
列エディタで、左ペインの RowCol.ComboList プロパティを探し、その横の〈〈...〉〉ボタンをクリックします。
注意:
注意:[コンボリスト]ダイアログボックスは列固有で、選択した列の RowCol.ComboList プロパティのみを変更し
ます。
同じ列であっても、セルごとに異なるリストを設定したい場合もあります。たとえば、行1にはプロパティリストを表示し、行2には
その値を表示させたい場合です。この場合、行2の値は行1で選択されたプロパティに依存するため、有効な選択肢は行ごと
に変わります。このような場合には、BeforeEdit イベントをトラップし、このイベント内で Column オブジェクトの ComboList
プロパティをカレントセルの適切なリストに指定する必要があります。C1FlexGrid の ComboList プロパティはグリッド全体に
適用されます。
組み込みコンボボックスは、デフォルトで自動検索機能を提供します。ユーザーが値を入力すると、選択は次に一致するところ
へ移動します。EditOptions プロパティを使用してこの機能を無効にし、AutoSearchDelay プロパティを使用してグリッドが
自動検索バッファをリセットするまでの時間を制御できます。
また、組み込みコンボボックスは Visual Studio プロパティウィンドウのエディタのような自動循環機能も備えています。関連付
けられたリストを持つセルをダブルクリックすると、グリッドは自動的に次の値を選択します。EditOptions プロパティを使用し
てこの機能を無効にすることもできます。
チェックボックス
デフォルトでは、グリッドはブール型の列(列タイプは Column オブジェクトの DataTypeプロパティで指定)の値をチェック
ボックスとして表示します。ブール値をチェックボックスとして表示したくない場合、列の Format プロパティを True/False 値
で表示する値を含む文字列に設定します。たとえば、次のようになります。
Visual Basic コードの書き方
Visual Basic
_flex.Cols["bools"].Format = "Yes;No"
C# コードの書き方
C#
106
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
_flex.Cols["bools"].Format = "Yes;No";
非連結モードでは、 SetCellCheck メソッド(GetCellCheckメソッド)を使用して、チェックボックスを任意のセルに追加(取得)
できます。チェックボックスは、セル内のテキストと並べて表示されます。列の RowCol.ImageAlign プロパティを使用すると、
配置を指定できます。
チェックボックスには、2値式(ブール型)と3値式の2つの種類があります。ブール型のチェックボックスで
は、CheckEnum.Checked と CheckEnum.Unchecked 状態が切り替わります。3値式チェックボックスでは、
、
CheckEnum.TSChecked、CheckEnum.TSUnchecked、および CheckEnum.TSGrayed の設定値が順に設定されます(参
照:CheckEnum)。
セルがチェックボックスを持ち、AllowEditing プロパティが True に設定されている場合、チェックボックスの状態を変更する
には、マウスでチェックボックスをクリックするか、[スペース]キーまたは[Enter]キーを押します。
デフォルトでは、マウスまたはキーボードでチェックボックスの値を切り替えると、選択されているすべてのチェックボックスの値
が切り替わります。EditOptions プロパティを使用してこの機能を無効にできます。
マップリスト
「リストボックスとコンボボックス」で説明した Combolist プロパティや Column オブジェクトの RowCol.ComboList プロパティ
によって、セル値は確実にリストから選択されます。ユーザーが選択した値は、列に適合した型に変換され、あたかもユー
ザーが入力したようにグリッドに格納されます。
多くの場合、セルは定義済みリストから値を取得できますが、実際の値に即したユーザーフレンドリな値の表示が要求されま
す。たとえば、列に製品コードが含まれている場合、コードは保存しておき、表示は製品名にしたいことがあります。
このようにするには、RowCol.ComboList プロパティを使用します。このプロパティには、IDictionary オブジェクトへの参照を
含みます。IDictionary オブジェクトは、グリッド内に格納したものとユーザー側に表示されるものとの間のマッピングを確立し
ます(IDictionary インタフェースは System.Collections 名前空間で定義され、特に Hashtable クラスによって実装されます)。
たとえば、次のサンプルコードは、色の値と名前を含むデータマップを作成します。色の値はグリッドに格納され、ユーザーに
は名前が表示されます。
Visual Basic コードの書き方
Visual Basic
Dim dtMap As Hashtable = New Hashtable()
dtMap.Add(Color.Red, "りんごの赤")
dtMap.Add(Color.Green, "森林の緑")
dtMap.Add(Color.Blue, "空の青")
dtMap.Add(Color.Black, "石炭の黒")
dtMap.Add(Color.White, "雪の白")
flex.Cols(1).DataType = GetType(Color)
flex.Cols(1).DataMap = dtMap
C#コードの書き方
Visual Basic
Hashtable Hashtable dtMap = new Hashtable();
dtMap.Add(Color.Red, "りんごの赤");
dtMap.Add(Color.Green, "森林の緑");
dtMap.Add(Color.Blue, "空の青");
dtMap.Add(Color.Black, "石炭の黒");
dtMap.Add(Color.White, "雪の白");
flex.Cols[1].DataType = typeof(Color);
flex.Cols[1].DataMap = dtMap;
107
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
IDictionary を実装しているクラスは、DataMap として使用できます。たとえば、Hashtable、ListDictionary、および
SortedList です。これらのクラスはすべて、有効なデータマップを提供します。相違点は、それらのクラスが編集可能な列内で
使用されるときドロップダウンリスト内の各項目の順序がクラスによって異なることです。
SortedList クラスは、キーで項目をソートします。Hashtable は、任意の順序を使用します。ListDictionary は、項目がリスト
に追加された順序を維持します。このため、ListDictionary が通常、DataMaps の最適な選択肢となります。
データマップ内のキーは、編集対象のセルと同じ型でなければならないことに注意してください。たとえば、列が短整数(Int16)
を含む場合、この列に関連付けられているデータマップは短整数型のキーである必要があります。正規の整数(Int32)をキー
として使用すると機能しません。
次のサンプルコードはその違いを示します。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' キーで項目をソート
Dim sl As New SortedList()
sl.Add("0", "Zero")
sl.Add("1", "One")
sl.Add("2", "Two")
sl.Add("3", "Three")
' リストに追加された順序を維持
Dim ld As New ListDictionary()
ld.Add(0, "Zero")
ld.Add(1, "One")
ld.Add(2, "Two")
ld.Add(3, "Three")
' 任意の順序
Dim ht As New Hashtable()
ht.Add(0, "Zero")
ht.Add(1, "One")
ht.Add(2, "Two")
ht.Add(3, "Three")
flex.Cols(1).DataMap = sl
flex.Cols(1).Caption = "SortedList"
flex.Cols(2).DataMap = ld
flex.Cols(2).Caption = "ListDictionary"
flex.Cols(3).DataMap = ht
flex.Cols(3).Caption = "HashTable"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, System.EventArgs e);
{
// キーで項目をソート
SortedList sl = new SortedList();
sl.Add("0", "Zero");
sl.Add("1", "One");
sl.Add("2", "Two");
108
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
sl.Add("3", "Three");
// リストに追加された順序を維持
ListDictionary ld = new ListDictionary();
ld.Add(0, "Zero");
ld.Add(1, "One");
ld.Add(2, "Two");
ld.Add(3, "Three");
// 任意の順序
Hashtable ht = new Hashtable();
ht.Add(0, "Zero");
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
flex.Cols[1].DataMap = sl;
flex.Cols[1].Caption = "SortedList";
flex.Cols[2].DataMap = ld;
flex.Cols[2].Caption = "ListDictionary";
flex.Cols[3].DataMap = ht;
flex.Cols[3].Caption = "HashTable";
}
さらに、列の DataType プロパティに列挙体を設定すると、グリッドは、各列挙値と名前とのデータマップを自動的に構築して
使用します。たとえば、次のサンプルコードは地域から成る列挙を作成します。地域の値はグリッドに格納され、ユーザーには
地域名が表示されます。
Visual Basic コードの書き方
Visual Basic
Private Enum Countries
NewYork
Chicago
NewOrleans
London
Paris
End Enum
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex.Cols(1).DataType = GetType(Countries)
End Sub
C# コードの書き方
C#
private enum Countries
{
NewYork;
Chicago;
NewOrleans;
London;
Paris;
}
private void Form1_Load(object sender, EventArgs e)
{
109
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Cols[1].DataType = typeof(Countries);
}
セルボタン
セルの種類によっては、テキストボックスまたはドロップダウン以外の高機能のエディタが必要な場合もあります。たとえば、列
にファイル名や色が含まれていると、ダイアログボックスを使用して編集する必要があります。
こうした場合、ComboList プロパティに省略符号("…")を設定します。そうすると、コントロールはセルの横にボタンを表示し、
これをユーザーがクリックすると CellButtonClick イベントを発生させます。イベントをトラップしてダイアログを表示させ、ユー
ザーが選択した値でセルの内容を更新できます。
また、省略符号("…")の前にパイプ文字(|)を追加すると、ユーザーはボタンが表示されたセルに入力して、セルの内容を編集
できるようになります。
デフォルトでは、セルボタンに省略符号("…")が表示されます。CellButtonImage プロパティを使用すると、セルボタンにピク
チャを設定することができます。
次のサンプルコードは、セルボタンを使用して列を編集する方法を示しています。
Visual Basic コードの書き方
Visual Basic
' 列を設定します。
Dim c As C1.Win.C1FlexGrid.Column = _flex.Cols(1)
c.DataType = GetType(Color)
c.ComboList = "..." ' << セルボタンを表示
c.ComboList = "..."
C# コードの書
C#
' 列を設定します。
Column c = _flex.Cols[1];
c.DataType = typeof(Color);
c.ComboList = "...";
c.ComboList = "...";
// << セルボタンを表示
そして次のサンプルコードでは、セルボタンのクリックを処理します。ユーザーがセルボタンをクリックし、カラーダイアログボッ
クスから色を選択できるようにしています。
Visual Basic コードの書き方
Visual Basic
Private Sub _flex_CellButtonClick(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles _flex.CellButtonClick
' カラーダイアログボックスを生成します。
Dim clrDlg As New ColorDialog()
' ダイアログを初期化します。
If _flex(e.Row, e.Col) Is GetType(Color) Then
clrDlg.Color = _flex(e.Row, e.Col)
110
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
End If
' ダイアログから新しい色を取得し、それをセルに割り当てます。
If clrDlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
_flex(e.Row, e.Col) = clrDlg.Color
End If
End Sub
C# コードの書き方
C#
private void _flex_CellButtonClick( object sender, RowColEventArgs e)
{
// カラーダイアログボックスを生成します。
ColorDialog clrDlg = new ColorDialog();
// ダイアログを初期化します。
if (_flex[e.Row, e.Col] == typeof(Color))
{
clrDlg.Color = (Color)_flex[e.Row, e.Col];
}
// ダイアログから新しい色を取得し、それをセルに割り当てます。
if (clrDlg.ShowDialog() == DialogResult.OK)
{
_flex[e.Row, e.Col] = clrDlg.Color;
}
}
マスク
C1FlexGridコントロールは、マスクによる編集をサポートします。マスク編集とは、テンプレートとして入力マスクを使用し、
ユーザーが入力した値の正当性を自動的に検査します。マスクは、EditMask 、または EditMask プロパティで指定します。
このプロパティは、通常のテキストフィールドおよびドロップダウンコンボボックスフィールドに使用できます。
マスク文字列には、次の2種類の文字を使用できます。1つはリテラル文字で、入力の一部を表します。もう1つはテンプレート
文字で、特定のカテゴリ(数値やアルファベットなど)に属する文字のプレースホルダの役割を果たします。たとえば、次のコー
ドでは、列1に電話番号を入力させるために"(999) 999-9999"というマスクを設定します。この"9"は、任意の数値を表すプレー
スホルダです。
Visual Basic コードの書き方
Visual Basic
' 電話番号を入力するためのマスクを設定します
_flex.Cols(1).EditMask = "(999) 999-9999"
C# コードの書き方
C#
// ' 電話番号を入力するためのマスクを設定します
_flex.Cols[1].EditMask = "(999) 999-9999";
111
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
EditMask プロパティを空以外の文字列に設定すると、列は日付/時刻値を含む(通常これらの列の編集には
DateTimePicker コントロールを使用)場合でも組み込みマスクエディタの使用を強制されます。これは特に、(日付を含まず)
時刻のみを含む DateTime 列を持っている場合に便利です。こうした場合、次のプロパティを設定して DateTimePicker コン
トロールの代わりにマスクエディタを使用できます。
Visual Basic コードの書き方
Visual Basic
_flex.Cols(1).DataType = GetType(DateTime)
_flex.Cols(1).Format = "hh:mm tt"
_flex.Cols(1).EditMask = "99:99 LL"
C# コードの書き方
C#
_flex.Cols[1].DataType = typeof(DateTime);
_flex.Cols[1].Format = "hh:mm tt";
_flex.Cols[1].EditMask = "99:99 LL";
EditMask プロパティは、設計時に[定型入力
定型入力]ダイアログボックスを使用して設定することもできます。
[定型入力
定型入力]ダイアログボックスは、Column タスク メニューまたは 列エディタ からアクセスできます。
Column タスク
タスクメニューで、[入力マスク
入力マスク]ボックスの〈...〉ボタンをクリックします。
列エディタ
列エディタで、左ペインの RowCol.EditMask プロパティを探し、その横の〈...〉ボタンをクリックします。
注意:
注意:[定型入力]ダイアログボックスは列固有で、選択した列の EditMask プロパティのみを変更します。
112
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
マスク文字を設定するための有効な書式についての詳細は、EditMask プロパティの説明を参照してください。
同列内の個々のセルにそれぞれ異なるマスクを設定するには、BeforeEditイベントをトラップして、このイベント内
でEditMask プロパティにカレントセルに対する適切なマスクを設定します。
入力値の正当性検査
多くの場合、マスクを設定するだけではユーザーの入力値に対する十分な正当性検査を行えません。たとえばマスクでは、値
の有効範囲を定義することや、カレントセルの値を他のセル値に基づいて正当性検査することはできません。
このような場合は、ValidateEdit イベントをトラップし、カレントセルのEditor.Textプロパティの値が有効であるかどうかを検査
します。この時点では、セルにはまだ元の値が保持されています。入力値が不正であれば、Cancel 引数を True に設定しま
す。そうすることで、ユーザーが有効な値を入力するまでグリッドは編集モードを維持します。
たとえば、次のサンプルコードでは、通貨型の列に入力した値の正当性を検査し、入力値が確実に1,000~10,000の範囲にあ
るようにします。
Visual Basic コードの書き方
Visual Basic
Private Sub _flex_ValidateEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.ValidateEditEventArgs) Handles _flex.ValidateEdit
' Decimal 型の列のみ正当性検査を行います.
If _flex.Cols(e.Col).DataType Is GetType(Decimal) Then
Try
Dim dec As Decimal = Decimal.Parse(_flex.Editor.Text())
If (dec < 1000) Or (dec > 10000) Then
MessageBox.Show("Value must be between 1,000 and 10,000")
e.Cancel = True
End If
Catch
MessageBox.Show("数値として認識できません。")
e.Cancel = True
End Try
End If
End Sub
C# コードの書き方
C#
private void _flex_ValidateEdit( object sender, ValidateEditEventArgs e)
{
//Decimal 型の列のみ正当性検査を行います
if (_flex.Cols[e.Col].DataType == typeof(Decimal))
{
try
{
Decimal dec = Decimal.Parse(_flex.Editor.Text);
if ( dec < 1000 || dec > 10000 )
{
MessageBox.Show("Value must be between 1,000 and 10,000");
e.Cancel = true;
113
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
}
catch
{
MessageBox.Show("数値として認識できません。");
e.Cancel = true;
}
}
}
カスタムエディタ
組み込みエディタでは多種多様な柔軟性と機能を提供していますが、外部コントロールを特定のエディタとして使用したい場
合もあります。たとえば、複数の列リストから選択するためのエディタ、またはビジネスオブジェクトの編集用に記述した特別の
コントロールを使用したい場合があります。
Control 基本クラスから派生する任意のコントロールを基本的なグリッドエディタとして使用できます。IC1EmbeddedEditor
インタフェースを実装しているコントロールは、グリッドとのより優れた統合を提供し、より高度な機能を提供しま
す。IC1EmbeddedEditor インタフェースについては、Editor プロパティも参照してください。
コントロールをカスタムエディタとして使用するには、Editor プロパティを使用してコントロールのインスタンスをグリッド列また
はスタイルに関連付けるだけで済みます。設計時(列エディタを使用
列エディタを使用)または実行時にこれを行うことができます。これで、グ
リッドでこのコントロールが自動的に使用されるようになります。
設計時にカスタムエディタを定義するには、フォームにエディタコントロールのインスタンスを追加し、C1FlexGrid タスク メ
ニューから[列エディタ]を選択して 列エディタ を開きます。カスタムエディタを使用する列を選択し、その Editor プロパティを
新しいエディタコントロールの名前に設定します。
たとえば、NumericUpDown コントロールをグリッドエディタとして使用するには、次の手順に従います。
1. C1FlexGrid コントロールをフォームに追加します。
2. NumericUpDown コントロールをフォームに追加し、そのBorderStyle プロパティを None に設定します.
3. C1FlexGrid タスク メニューから[列エディタ
列エディタ]を選択します。[列エディタ
列エディタ]へのアクセス方法の詳細については、列エ
ディタ を参照してください。
4. 列エディタ
列エディタで、最初のスクロール可能なグリッド列を選択し、その Editor プロパティを「numericUpDown1」に設定し
ます。
114
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
プロジェクトを実行し、最初の列にある値を編集します。グリッドがどのように NumericUpDown コントロールを配置して初期
化し、ユーザーによるセル値の編集を可能にするかに注意してください。セルの編集が完了したら、別のセルをクリックするか
[Enter]キーを押して次のセルに移動します。新しい値がどのようにセルに適用されるかに注意してください。
また、コードを使用してカスタムエディタをグリッドに割り当てることもできます。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' カスタムエディタを作成します
Dim editor as New NumericUpDown()
editor.BorderStyle = BorderStyle.None
' カスタムエディタをグリッドに割り当てます
_flex.Cols(1).Editor = editor
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, System.EventArgs e)
{
// カスタムエディタを作成します
NumericUpDown editor = new NumericUpDown();
editor.BorderStyle = BorderStyle.None;
// ' カスタムエディタをグリッドに割り当てます
_flex.Cols[1].Editor = editor;
}
115
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
カスタムエディタの作成
Control 基本クラスから派生する任意のコントロールをグリッドエディタとして使用できます。これが可能となるのは、グリッド
が Text や Bounds などの各プロパティと Leave や TextChanged などの各イベントにアクセスできる基本クラスに関する十
分な知識を持っているからです。多くの場合、このレベルのサポートで十分です。
しかし、基本クラスにそれほど厳密に従わないコントロールを使用したい場合があります。たとえば、DateTimePicker コント
ロールは、Text の代わりに編集値の取得に使用する Value プロパティを持っています。この場合、IC1EmbeddedEditor イ
ンタフェースに1つまたは複数のメソッドを実装してデフォルト動作を変更できます。たとえば、C1Input ライブラリ内のコント
ロールはすべて IC1EmbeddedEditor をサポートしているため、C1FlexGrid (およびC1TrueDBGrid)と緊密に統合します。
IC1EmbeddedEditor インタフェースは非常に単純で、グリッドは最近の連結を使用してこのインタフェースに連結するため全
メンバを実装することも必要ありません。エディタコントロールに必要なメンバのみを実装します。
このインタフェースは、非常に柔軟性が高く事実上ほとんどのコントロールをグリッドエディタとして使用できます。
UITypeEditor クラスをグリッドエディタとして使用することも可能です。これを行うには、下記のようなラッパクラスが必要です。
1. Control から派生している(UITypeEditor は派生していない)
2. IC1EmbeddedEditor インタフェースを実装している
3. 適切な UITypeEditor をカプセル化している
このようなラッパクラスのソースコードは、製品付属の「CustomEditors」サンプルにあります。
UITypeEditorラッパクラスを使用し、C1FlexGrid で任意の UITypeEditors を使用できます。.NET は、色、フォント、ファイル名
などを編集するためのいくつかの UITypeEditors を提供しています。また、コントロールを記述するより簡単な場合は、独自の
UITypeEditors を記述することもできます。
注意:
注意:C1FlexGrid で組み込み、カスタム、UITypeEditor の各エディタを使用する例については、製品付属の
「CustomEditorsサンプル」を参照してください。
編集モードの制御
グリッドが現在編集モードかどうかは、Editor プロパティの値で確認します。このプロパティが null(VBの場合はNothing)を
返す場合、グリッドは編集モードではありません。null 以外であれば、グリッドは編集モードであり、プロパティはセルの編集に
使用中のコントロール(TextBox、ComboBox、またはその他のコントロールタイプが可能)への参照を返します。
プログラムによってグリッドを編集モードに切り替えるには、 StartEditing メソッドを使用します。また、編集を終了するに
は、FinishEditingメソッドを使用します。
グリッドで発生する編集の各イベントを処理し、さらに編集処理を制御できます。セル編集のプロセスで、次の各イベントが発
生します。
イベント
説明
BeforeEdit
このイベントは、編集可能なセルが選択されたときに発生します。このイベントの
Cancel 引数を True に設定すると、セルの編集を禁止できます。ま
た、ComboListプロパティを変更して、適切なドロップダウンボタンをセル内に描
画することもできます。このイベントの後にユーザーが実際に編集を開始せず
に、単に選択を別のセルまたはコントロールに移動できることに注意してくださ
い。
StartEdit
このイベントは、BeforeEdit と同じですが、ユーザーがキーを実際に入力するか
セル内のドロップダウンボタンをクリックして、実際に編集を開始しようとする点が
異なります。この段階では、まだ編集を取り消すことができます。
StartEdit イベント発生時点では、Editor プロパティがまだ未確定な状態である
ことに注意してください。これは、使用するエディタタイプをコントロールがまだ決
116
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
イベント
説明
定していないからです。この段階で、カスタムエディタを Editor プロパティに割り
当てることができます。
SetupEditor
このイベントは、セル編集のエディタコントロールが作成および設定された後、そ
れが表示される前に発生します。この時点で、エディタのプロパティを変更できま
す(たとえば、TextBoxエディタ内で使用する最大長またはパスワード文字を設定
します)。また、独自のイベントハンドラをエディタに付加することもできます。
ValidateEdit
このイベントは、ユーザーが編集を完了したとき、エディタ値がグリッドにコピーさ
れる前に発生します。グリッドから元の値を取得して確認できます(イベントはこ
のセルの座標値を提供します)。Editor プロパティ(Editor.Text など)を介して、
グリッドに割り当てようとしている新しい値を確認できます。新しい値がセルに有
効でない場合、Cancel 引数を True に設定するとグリッドは編集モードを維持し
ます。
セルを編集モードのままにする代わりに、元の値を復元して編集モードから抜け
るには、Cancel を True に設定して FinishEditing メソッドを呼び出します。
AfterEdit
このイベントは、新しい値がセルに適用されてエディタが非アクティブ化した後に
発生します。このイベントを使用し、このセル値に依存しているすべて(小計値、
ソートなど)を更新できます。
セルのマージ
C1FlexGrid コントロールでは、複数のセルを1つにマージすることで、複数行または列を1つのセルのように扱うことができま
す。この機能によって、グリッドに表示されるデータをより見やすく整えることができます。これは、HTMLにおける"
<ROWSPAN>"および"<COLSPAN>"タグの機能と似ています。
セルマージを有効にするには、次の2つの操作を行う必要があります。
1. グリッドの AllowMerging プロパティに AllowMergingEnum None 以外の値を設定します(各設定の機能について
はリファレンスの項に説明があります)。
2. 列をマージしたい場合、マージしたい各列の AllowMerging プロパティを True に設定します。行をマージしたい場
合、マージしたい各行の RowCol.AllowMerging プロパティを True に設定します。
マージは、隣接するセル内に同一文字列(長さ0の文字列を除く)が格納されていると発生します。2つのセルを強制的にマー
ジする手段はありません。セルマージは、セルの内容に応じて自動的に行われます。この機能を使用すると、データをソートし
て表示する際、重複する隣接行のデータをマージすることで、同一データの連続を表すことができます。
セルマージには、いくつかの利用方法があります。たとえば、セルマージによってテーブルのヘッダやデータビューを作成した
り、または隣接する列にテキストをはみ出して表示させることなどができます。
テーブルヘッダのマージ
セルをマージしてテーブルのヘッダを作成するには、まずグリッドの AllowMerging プロパティを FixedOnly に設定します。
次に、マージしたい各列の AllowMerging プロパティと、マージしたい各行の AllowMerging プロパティを設定します。最
後に、マージするセルの内容がすべて同じになるように、ヘッダセルにテキストを設定します。
このサンプルコードを次に示します。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
117
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Dim i%
' コントロールを初期化します。
_flex.Styles.Normal.WordWrap = True
_flex.Cols.Count = 9
_flex.Rows.Fixed = 2
_flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.FixedOnly
' 行ヘッダを作成します。
_flex.Rows(0).AllowMerging = True
' 同一内容の4つのセルをマージします。
Dim rng As C1.Win.C1FlexGrid.CellRange = _flex.GetCellRange(0, 1, 0, 4)
rng.Data = "North"
' 同一内容の4つのセルをマージします。
rng = _flex.GetCellRange(0, 5, 0, 8)
rng.Data = "北"
For i = 1 To 4
_flex(1, i) = "Qtr " & i
_flex(1, i + 4) = "Qtr " & i
Next
' 列ヘッダを作成します。
_flex.Cols(0).AllowMerging = True
' 同一内容の2つのセルをマージします。
rng = _flex.GetCellRange(0, 0, 1, 0)
rng.Data = "Sales by Product"
' セルの配置と自動サイズの調整を行います。
_flex.Styles.Fixed.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter
_flex.AutoSizeCols(1, _flex.Cols.Count - 1, 10)
End Sub
C# コードの書き方
C#
private void Form1_Load(System.object sender, System.EventArgs e)
{
int i;
// コントロールを初期化します。
_flex.Styles.Normal.WordWrap = true;
_flex.Cols.Count = 9;
_flex.Rows.Fixed = 2;
_flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.FixedOnly;
// 行ヘッダを作成します。
_flex.Rows[0].AllowMerging = true;
// 同一内容の4つのセルをマージします。
118
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C1.Win.C1FlexGrid.CellRange rng = _flex.GetCellRange(0, 1, 0, 4);
rng.Data = "北";
// 同一内容の4つのセルをマージします。
rng = _flex.GetCellRange(0, 5, 0, 8);
rng.Data = "南";
for ( i = 1 ; i <= 4; i++)
{
_flex[1, i] = "Qtr " + i;
_flex[1, i + 4] = "Qtr " + i;
}
// 列ヘッダを作成します。
_flex.Cols[0].AllowMerging = true;
// 同一内容の2つのセルをマージします。
rng = _flex.GetCellRange(0, 0, 1, 0);
rng.Data = "Sales by Product";
// セルの配置と自動サイズの調整を行います。
_flex.Styles.Fixed.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter;
_flex.AutoSizeCols(1, _flex.Cols.Count - 1, 10);
}
以下の図のような結果になります:
データビューのマージ
セルマージは、グリッドをデータソースに連結したときも同じように機能します。次のコードは、設計時にデータソースに連結さ
れたグリッドの例を示します。データソースへの連結方法の詳細については、「データソースへの連結」を参照してください。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim i%
' マージ対象のセルを設定します
119
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
_flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.RestrictCols
For i = _flex.Cols.Fixed To _flex.Cols.Count - 1
_flex.Cols(i).AllowMerging = True
Next
End Sub
C# コードの書き方
C#
private void Form1_Load( System.object sender,
{
int i;
System.EventArgs e)
// マージ対象のセルを設定します
_flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.RestrictCols;
for (int i = _flex.Cols.Fixed; i <= _flex.Cols.Count - 1; i++)
{
_flex.Cols(i).AllowMerging = true;
}
}
このコードの実行結果は次のとおりです。
セルマージによって、データが視覚的にグループ化され、テーブルの情報が非常にわかりやすくなる点に注目してください。
注意:
注意:データを自動マージする例については、製品付属の「CellMerging サンプル」を参照してください。
セルをはみだして表示
AllowMerging プロパティには、他の設定とは異なる特殊な動作を定義する2つの設定値を持っており、この設定値を使用す
る場合は、特定の行の AllowMerging プロパティや特定の列の AllowMerging プロパティを設定する必要はありません。
Spill 設定
このプロパティを AllowMergingEnum.Spill に設定すると、1つのセル内に収まらない長いデータが、隣のセル(空白の場合
120
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
に限り)にはみ出して表示されます。その結果の動作は Microsoft Excel の場合と同じです。長いデータをセルに入力するとき
に隣接するセルが、空白であればデータは、はみ出して必要なだけのスペースを占領します。
たとえば、下の図は、C1FlexGrid.AllowMerging を AllowMergingEnum.Spill に設定した場合、ユーザーがさまざまな長さ
のデータを入力したときのグリッドの外観を示します。
Nodes 設定
AllowMergingEnum.Nodes 設定は、AllowMergingEnum.Spill と同じですが、アウトラインノードだけに適用されます。こ
の設定は、データをグループ化して、ノード行にデータ行とは異なる書式を設定した場合に便利です。
たとえば、下の図は、Subtotal メソッドを使用してデータのグループ化と集計を行い、C1FlexGrid.AllowMerging を
AllowMergingEnum.Nodes に設定したときのグリッドの外観を示します。
この図は、トピック: 小計行の作成の場合と同じです。違いは、小計行(ノード)がここでは空白の隣接セルにはみ出して、グ
リッドの外観が改善されている点です。
カスタムマージ
カスタムマージ
これまでの自動マージを行いつつ、デフォルトのマージ動作を次の2つの方法でカスタマイズすることもできます。
カスタムIComparerクラスをCustomComparer プロパティに割り当てます。デフォルトでは、グリッドは同じ Null 以外
の値を含んでいる隣接セルをマージします。文字列の比較は、大文字と小文字を区別し、空白を含めます。大文字と
小文字を区別しない比較を使用し、空白を取り除いてグリッドのセルをマージしたい場合、IComparerを実装しているカ
121
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
スタムクラスを記述し、それを CustomComparer プロパティに割り当てることができます。
C1FlexGrid から派生する新しいクラスを記述し、GetMergedRange 仮想メソッドを変更して独自のカスタムマージロ
ジックを提供します。
注意:
注意:C1FlexGrid を継承したカスタムマージロジックの実装方法の例については、製品付属の「CustomMerge
サンプル」、「CustomMerge2 サンプル」を参照してください。
アウトラインとデータの集計
C1FlexGrid コントロールには、データを集計して階層表示するためのメソッドとプロパティが用意されています。データを集計
し、小計行を追加するには、Subtotal メソッドを使用します。データを階層表示するには、Tree プロパティを使用します。
小計行の作成
Subtotal メソッドを使用すると、通常(小計以外)のデータ行を集合計算した小計行を追加できます。
Subtotal メソッドは、階層的な集合計算をサポートします。たとえば、グリッドに売上データが含まれる場合、
C1FlexGridBase.Subtotal を呼び出して「製品」「販売地域」および「販売員」ごとの売上計を算出します。これを以下のコードで
示します。
Visual Basic コードの書き方
Visual Basic
Private Sub ShowTotals()
' 既存の小計をクリアします
_flex.Tree.Column = 0
_flex.Tree.Style = TreeStyleFlags.Simple
' グリッドをソートします
_flex.Subtotal(AggregateEnum.Clear)
' 総計(特定の列インデックスの変わりに-1を使用)を算出します.
_flex.Subtotal(AggregateEnum.Sum, -1, -1, 3, "Grand Total")
' 列0(製品)ごとの合計を算出します
_flex.Subtotal(AggregateEnum.Sum, 0, 0, 3, "Total {0}")
' 列1(地域)ごとの合計を算出します
_flex.Subtotal(AggregateEnum.Sum, 1, 1, 3, "Total {0}")
' 内容に合わせて列の幅を調整します
_flex.AutoSizeCols()
End Sub
C# コードの書き方
C#
private void ShowTotals()
{
// 既存の小計をクリアします
_flex.Tree.Column = 0;
122
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
_flex.Tree.Style = TreeStyleFlags.Simple;
// グリッドをソートします
_flex.Subtotal(AggregateEnum.Clear);
// 総計(特定の列インデックスの変わりに-1を使用)を算出します
_flex.Subtotal(AggregateEnum.Sum, -1, -1, 3, "Grand Total");
// 列0(製品)ごとの合計を算出します
_flex.Subtotal(AggregateEnum.Sum, 0, 0, 3, "Total {0}");
// 列1(地域)ごとの合計を算出します
_flex.Subtotal(AggregateEnum.Sum, 1, 1, 3, "Total {0}");
// 内容に合わせて列の幅を調整します
_flex.AutoSizeCols();
}
Subtotal メソッドによって小計行が追加されると、その行には自動的に小計行用のスタイルが割り当てられます(5レベルの
小計行用の組み込みスタイルがあります)。設計時にスタイルエディタ
スタイルエディタを使用するか、もしくは実行時にコードを使用してアウト
ラインスタイルのプロパティを変更すると、小計行の外観をカスタマイズできます。たとえば、次のようになります。
Visual Basic コードの書き方
Visual Basic
' 小計のスタイルを設定します
Dim cs As C1.Win.C1FlexGrid.CellStyle
cs = _flex.Styles(C1.Win.C1FlexGrid.CellStyleEnum.GrandTotal)
cs.BackColor = Color.Black
cs.ForeColor = Color.White
cs.Font = New Font(Font, FontStyle.Bold)
cs = _flex.Styles(C1.Win.C1FlexGrid.CellStyleEnum.Subtotal0)
cs.BackColor = Color.DarkRed
cs.ForeColor = Color.White
cs.Font = New Font(Font, FontStyle.Bold)
cs = _flex.Styles(C1.Win.C1FlexGrid.CellStyleEnum.Subtotal1)
cs.BackColor = Color.DarkBlue
cs.ForeColor = Color.White
C# コードの書き方
C#
//小計のスタイルを設定します
CellStyle cs;
cs = _flex.Styles[CellStyleEnum.GrandTotal];
cs.BackColor = Color.Black;
cs.ForeColor = Color.White;
cs.Font = new Font(Font, FontStyle.Bold);
cs = _flex.Styles[CellStyleEnum.Subtotal0];
cs.BackColor = Color.DarkRed;
123
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
cs.ForeColor = Color.White;
cs.Font = new Font(Font, FontStyle.Bold);
cs = _flex.Styles[CellStyleEnum.Subtotal1];
cs.BackColor = Color.DarkBlue;
cs.ForeColor = Color.White;
このコードを実行すると、グリッドの外観は次のようになります。
総計行は、すべての製品、販売地域、および販売員の総売上を含みます。この行は Subtotal メソッドの呼び出し時、
groupOn 引数に -1 を使用することで作成されます。その他の小計行は、製品と販売地域ごとの合計を示します。これらは、
groupOn 引数に 0 または 1 を指定することで作成されます。
また、合計以外の集合計算(平均や百分率など)を算出したり、行ごとに複数の集合計算(総売上、純売上)を算出することも
できます。
Subtotal メソッドによって作成された小計行は、次の4点で通常の行と異なります。
1. Subtotal メソッドに AggregateEnum.Clear 引数を指定して呼び出すと、小計行を自動消去できます。これは、データ
を動的に表示するための便利な機能です。この機能によって、ユーザーが列の移動やデータの再ソートをしても、小計
行が自動的に再計算されます。
2. 小計行をアウトラインのノードとして使用できます。グリッドをアウトライン表示すると、グループごとの小計行を縮小す
ることでデータ全体の概要を把握したり、必要に応じて小計行を展開し、データの詳細を閲覧したりできます。アウトラ
インツリーを表示するには、Column および Tree.Style の各プロパティを設定してアウトラインツリーの位置と外観を
定義します。
3. 小計行をツリーのノードとして処理できます。Node プロパティを介して、小計行の Node オブジェクトを取得できます。
4. グリッドをデータソースに連結しているとき、小計行は実際のデータと関連付けられていません。したがって、カーソル
をデータソース内で移動すると、グリッドの小計行は無視されます。
アウトラインツリーのノードをクリックすると、グリッドの各セクションを縮小および展開できます。これは、集合計算値だけでな
く、さまざまな種類のデータ表示に便利な機能です。次のトピックでは、カスタムアウトラインツリーを作成してディレクトリ情報
を表示する方法を紹介します。
カスタムツリーの作成
Subtotal メソッドを使用せずにアウトラインツリーを作成するには、次の手順に従います。
1. グリッドにデータを供給します。
124
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
2. アウトラインノードとして定義したい行の IsNodeプロパティを True に設定します。
3. 各ノード行の Nodeオブジェクトを取得し、そのLevel プロパティを設定して各ノードの階層レベルを定義します。大きい
値ほど、アウトラインツリー上のより深い(よりインデントした)階層レベルを意味します。
たとえば、次のサンプルコードは、ディレクトリツリーを作成します。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' グリッドレイアウトの初期化を行います
fg.Cols.Fixed = 0
fg.Cols.Count = 1
fg.Rows.Count = 1
fg.ExtendLastCol = True
fg.Styles.Normal.TextAlign = TextAlignEnum.LeftCenter
fg.Styles.Normal.Border.Style = BorderStyleEnum.None
' アウトラインツリーを表示します
fg.Tree.Column = 0
fg.Tree.Style = TreeStyleFlags.SimpleLeaf
' グリッドにデータをセットします
AddDirectory("c:\", 0)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, System.EventArgs e)
{
// グリッドレイアウトの初期化を行います
fg.Cols.Fixed = 0;
fg.Cols.Count = 1;
fg.Rows.Count = 1;
fg.ExtendLastCol = true;
fg.Styles.Normal.TextAlign = TextAlignEnum.LeftCenter;
fg.Styles.Normal.Border.Style = BorderStyleEnum.None;
// アウトラインツリーを表示します
fg.Tree.Column = 0;
fg.Tree.Style = TreeStyleFlags.SimpleLeaf;
// グリッドにデータをセットします
AddDirectory("c:\\", 0);
}
上記のサンプルではグリッドのレイアウトを初期化してから、AddDirectory ルーチンを呼び出し、グリッドにデータを供給して
ツリー構造を設定させます。
Visual Basic コードの書き方
Visual Basic
Private Sub AddDirectory(ByVal dir As String, ByVal level As Integer)
' ディレクトリを追加します
Dim thisDir As String
125
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
thisDir = Path.GetFileName(dir)
If thisDir.Length = 0 Then thisDir = dir
fg.AddItem(thisDir.ToUpper())
' 新たに行を作成し、ノードとします
Dim row As Row
row = fg.Rows(fg.Rows.Count - 1)
row.IsNode = True
' ノードレベルを設定します
Dim nd As Node
nd = row.Node
nd.Level = level
' ファイル情報を取得し、ツリーに追加します
Dim file As String, cnt As Integer
cnt = 1
For Each file In Directory.GetFiles(dir)
fg.AddItem(Path.GetFileName(file).ToLower())
cnt = cnt + 1
If cnt > 10 Then Exit Fo
' 最大10個までのファイルを追加します
Next
' ディレクトリ情報を取得し、ツリーにサブディレクトリ
'(最大4階層まで)を追加します
If level < = 4 Then
Dim subdir As String
cnt = 1
For Each subdir In Directory.GetDirectories(dir)
AddDirectory(subdir, level + 1)
cnt = cnt + 1
If cnt > 10 Then Exit For
' 最大10個までのサブディレクトリを追加します
Next
End If
End Sub
C# コードの書き方
C#
private void AddDirectory(string dir, int level)
{
// ディレクトリを追加します
string thisDir;
thisDir = Path.GetFileName(dir);
if (thisDir.Length == 0)
{
thisDir = dir;
}
fg.AddItem(thisDir.ToUpper());
// 新たに行を作成し、ノードとします
Row row;
row = fg.Rows[fg.Rows.Count - 1];
row.IsNode = true;
// ノードレベルを設定します
126
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
//
//
//
//
//
Node nd;
nd = row.Node;
nd.Level = level;
ファイル情報を取得し、ツリーに追加します
int cnt;
cnt = 1;
foreach (string file in Directory.GetFiles(dir))
{
fg.AddItem(Path.GetFileName(file).ToLower());
cnt = cnt + 1;
最大10個までのファイルを追加します
if (cnt > 10)
{
break;
}
}
ディレクトリ情報を取得し、ツリーにサブディレクトリ
(最大4階層まで)を追加します
if (level <= 4)
{
cnt = 1;
foreach (string subdir in Directory.GetDirectories(dir))
{
AddDirectory(subdir, level + 1);
cnt = cnt + 1;
最大10個までのサブディレクトリを追加します
if (cnt > 10)
{
break;
}
}
}
}
AddDirectory は、カレントディレクトリおよびすべてのサブディレクトリをトラバースする再帰ルーチンです。このサンプルで
は、時間の節約のため、ツリーサイズを4つのディレクトリレベルに制限しています。実際のアプリケーションでは、展開したと
きにのみ、ツリーの分枝を読み込むようにルーチンを変更する必要があります(後述の 「チュートリアル」を参照してください)。
このコードは次のような外観のグリッドを作成します。
127
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
コントロールによるアウトラインとツリーの作成
C1FlexGrid コントロールのユニークで定評のある機能の1つは、階層的なグループ化を通常の非構造化データに追加する
能力です。
これを達成するために、C1FlexGrid は Node 行の概念を導入しています。 Node 行は、通常のデータを格納しません。代わ
りに、これらは、通常の TreeView コントロールのノードとまったく同様に、類似のデータをグループ化するヘッダーとして機能
します。 TreeView コントロールのノードと同様に、ノード行は縮小/展開したり、格納しているデータを非表示/表示にしたり
できます。また、TreeView コントロールと同様に、ノード行もノード階層を定義する Level プロパティを持っています。下位レベ
ルノードは上位レベルノードを格納します。
たとえば、顧客名、国、都市、および売上高を表示するグリッドがあるとします。この標準的なグリッドは通常、次のような表示
になります。
A情報はすべてそこにありますが、国や顧客ごとの総売上額が見てあまり明瞭ではありません。 C1FlexGrid のアウトライン
機能を使用すると、データを国(レベル0)別にグループ化してから、各国の都市(レベル1)別にグループ化した後、各都市の
顧客(レベル2)別にグループ化できます。以下に、アウトラインを追加した後の同じグリッドを示します。
128
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
このグリッドは、前と同じ情報を表示(同じデータソースにバインド)していますが、各ノードがその下にデータの概要を格納す
るツリーを追加します。ノードは、縮小して概要のみを表示したり、展開して詳細を表示したりできます。各ノード行は、複数の
列の概要(この場合は販売合計数と合計金額)を表示できることに注意してください。
この項では、通常のグリッドをより機能豊富なアウトライングリッドに変える手順をガイドします。
データのロード
アウトライングリッドへのデータのロードは、通常のグリッドへのロードとまったく同じです。データソースがデザイン時に使用可
能な場合、Visual Studio のプロパティウィンドウを使用し、1行のコードを記述せずに、グリッドの DataSource プロパティを設
定して、グリッドをデータにバインドできます。
データソースがデザイン時に使用可能でない場合、コードでグリッドの DataSource プロパティを設定できます。一般に、デー
タバインディングコードは次のようになります。
C# コードの書き方
C#
public Form1()
{
InitializeComponent();
//データを取得します。
var fields = @"
Country,
City,
SalesPerson,
Quantity,
ExtendedPrice";
var sql = string.Format("SELECT {0} FROM Invoices ORDER BY {0}", fields);
var da = new OleDbDataAdapter(sql, GetConnectionString());
da.Fill(_dt);
//グリッドをデータにバインドします。
this._flex.DataSource = _dt;
// ExtendedPrice 列をフォーマットします。
_flex.Cols["ExtendedPrice"].Format = "n2";
}
このコードは、OleDbDataAdapter を使用して、DataTable にデータを入力した後、この DataTable をグリッドの
DataSource プロパティに割り当てます。
このコードを実行すると、最初の画像に示した「通常のグリッド」が得られます。この通常のグリッドを2番目の画像に示したア
ウトライングリッドに変えるには、アウトラインを構成するノード行を挿入する必要があります。
129
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ノード行の作成
ノード行は、以下の点を除き、通常行とほぼ同じです。
ノード行はデータバインドされません。グリッドがデータソースにバインドされると、各通常行はデータソース内の項目に
対応します。ノード行は対応しません。代わりに、ノード行は類似データを格納する通常行をグループ化します。
ノード行は縮小または展開できます。ノード行が縮小すると、すべてのデータと子ノードは非表示になります。アウトライ
ンツリーが表示されている場合、ユーザーはマウスやキーボードを使用してノードを縮小および展開できます。アウトラ
インツリーが表示されていない場合、ノードはコードによってのみ展開または縮小できます。
行がノードかどうかを決定するには、次のように IsNode プロパティを使用できます。
C# コードの書き方
C#
var row = _flex.Rows[rowIndex];
if (row.IsNode)
{
//行はノードです。
var node = row.Node;
DoSomethingWithTheNode(node);
}
else
{
//この行はノードではありません。
}
ノード行は次の3つの方法で作成できます。
1. Rows.InsertNodeメソッドを使用します。これにより、新しいノード行が指定したインデックスに挿入されます。ノード行
が作成されたら、それを他の任意の行と同様に使用できます(列ごとのデータの設定やスタイルの適用など)。これは、
合計を挿入してアウトラインを構築するための「低レベル」の方法です。この方法は、最大の制御と柔軟性を提供し、以
下に示されています。
2. Subtotalメソッドを使用します。このメソッドは、グリッド全体をスキャンし、グリッドデータが変化する位置にオプションの
小計を持つノード行を自動的に挿入します。これは、合計を挿入してアウトラインを構築するための「高レベル」の方法
です。この方法は、コードがほとんど不要ですが、グリッド上でデータを構造化する方法とアウトラインの外観について
いくつかのことを前提しています。
3. グリッドが非バインドの場合、IsNode を true に設定することで、通常行をノード行に変えることができます。これはグ
リッドが非バインドの場合にのみ機能することに注意してください。通常のデータバインド行をノードに変えようとする
と、グリッドは例外をスローします。
下のコードに、指定の列の同じ値をグループ化するノード行を挿入する GroupBy メソッドを実装する方法を示します。
C# コードの書き方
C#
//指定レベルのノードを挿入する指定の列をグループ化します。
void GroupBy(string columnName, int level)
{
object current = null;
for (int r = _flex.Rows.Fixed; r < _flex.Rows.Count; r++)
{
if (!_flex.Rows[r].IsNode)
{
130
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
var value = _flex[r, columnName];
if (!object.Equals(value, current))
{
// value changed: ノードを挿入します。
_flex.Rows.InsertNode(r, level);
//最初のスクロール可能な列にグループ名を表示します。
_flex[r, _flex.Cols.Fixed] = value;
//現在の値を更新します。
現在の値。
}
}
}
}
このコードは、すべての列をスキャンし、既存のノード行をスキップして(これにより複数レベルのノードを追加するためにコード
を呼び出すことが可能)、グループ化されている列の現在の値のトラッキングを維持します。 現在の値が変更されると、最初
のスクロール可能な列に新しいグループ名を表示するノード行が挿入されます。
例に戻り、このメソッドを使用し、次を呼び出すことで、2レベルのアウトラインを作成できます。
C# コードの書き方
C#
void _btnGroupCountryCity_Click(object sender, EventArgs e)
{
GroupBy("Country", 0);
GroupBy("City", 1);
}
非常に単純ですが、いくつかの注意点があります。最初に、このメソッドは、データがアウトライン構造に従ってソートされること
を前提としています。この例では、[国]ではなく、[販売員
販売員]によってソートされた場合、アウトラインは、おそらく不必要な国ごと
の複数のレベル0ノードを含むことになります。
また、GroupBy メソッドは、多くの行を挿入できますが、グリッドのちらつきの原因にもなります。これを回避するには、通常
は、更新を実行する前に Redrawプロパティを false に設定して、更新が完了した後に設定を true に戻します。
これらの問題を処理するには、アウトラインを作成するコードを次のように記述し直す必要があります。
C# コードの書き方
C#
void _btnGroupCountryCity_Click(object sender, EventArgs e)
{
//更新中の再描画を中断します。
using (new DeferRefresh(_flex))
{
//元のソート(国、都市別など)を復元します
ResetBinding();
//国、都市によってグループ化します。
GroupBy("Country", 0);
GroupBy("City", 1);
}
}
DeferRefresh クラスは、グリッドの Redraw プロパティを false に設定し、それが破棄されたときに元の値を復元する単純な
131
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ユーティリティです。これにより、更新中に例外が発生しても Redraw が正しく復元されるようになります。以下
に、DeferRefresh クラスの実装を示します。
C# コードの書き方
C#
/// Redraw ブロック内のグリッドの長い演算をカプセル化するために使用される Utility クラス。
///これにより、ちらつきが回避され、万一の場合に Redraw プロパティが正しくリセットされるようになります。
///演算中に例外がスローされます。
class DeferRefresh : IDisposable
{
C1FlexGrid _grid;
bool _redraw;
public DeferRefresh(C1FlexGrid grid)
{
_grid = grid;
_redraw = grid.Redraw;
grid.Redraw = false;
}
public void Dispose()
{
_grid.Redraw = _redraw;
}
}
BindGrid メソッドは、グリッドがアウトライン構造で要求された順序でソートされるようにします。例では、ソート順は[国
国]、[都
都
市]、[販売員
販売員]別の順となります。コードは次のようになります。
C# コードの書き方
C#
// グリッドのバインドを解除して再バインドし、すべてをリセットします。
void ResetBinding()
{
//グリッドのバインドを解除します。
_flex.DataSource = null;
//任意のカスタムソートをリセットします。
_dt.DefaultView.Sort = string.Empty;
//グリッドを再バインドします。
_flex.DataSource = _dt;
// ExtendedPrice 列をフォーマットします。
_flex.Cols["ExtendedPrice"].Format = "n2";
//コンテンツの大きさに合わせて列のサイズを自動調整します。
_flex.AutoSizeCols();
}
132
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
この時点でこのコードを実行すると、ノード行が予想どおりに作成されますが、アウトラインツリーが表示されていないため、
ノードを展開したり縮小できないことが分かります。アウトラインツリーは次のセクションで説明します。
アウトラインツリー
アウトラインツリーは、通常の TreeView コントロールで目にするものと非常に類似しています。アウトラインツリーは、インデ
ントした構造を表示し、各ノード行の横には縮小/展開アイコンがあるため、ユーザーはアウトラインを展開および縮小して希
望レベルの詳細を表示できます。
アウトラインツリーは、Tree.Column プロパティで定義された任意の列に表示できます。デフォルトでは、このプロパティは-1
に設定され、ツリーはまったく表示されません。上記の例でアウトラインツリーを表示するには、次のコードを使用します。
C# コードの書き方
C#
void _btnTreeCountryCity_Click(object sender, EventArgs e)
{
using (new DeferRefresh(_flex))
{
//前と同様に国と都市別にグループ化します。
_btnGroupCountryCity_Click(this, EventArgs.Empty);
//アウトラインツリーを表示します。
_flex.Tree.Column = 0;
//ツリーに合わせてサイズを自動調整します。
_flex.AutoSizeCol(_flex.Tree.Column);
//詳細ノードを縮小します。
_flex.Tree.Show(1);
}
}
このコードは、前のメソッドを呼び出してアウトラインを構築した後、Tree.Column プロパティをゼロに設定して、最初の列にア
ウトラインツリーを表示させます。また、C1FlexGrid.AutoSizeColメソッドも呼び出して、列がアウトラインツリーを収めるのに
十分な広さになるようにします。最後に、Tree.Show メソッドを呼び出して、すべてのレベル0ノード(この場合は都市)を表示
してすべての詳細を隠します。
Treeプロパティは、アウトラインツリーのカスタマイズに使用するいくつかのメソッドとプロパティを公開する GridTree オブジェ
クトへの参照を返します。主なメソッドとプロパティは以下のとおりです。
Column: アウトラインツリーを格納する列のインデックスを取得または設定します。このプロパティを -1に設定すると、
アウトラインツリーはユーザーから非表示になります。
Indent: 隣接するノードレベル間のインデントをピクセル単位で取得または設定します。インデントレベルが高いほど、
ツリーは広くなります。
Style: 表示するアウトラインツリーのタイプを取得または設定します。このプロパティを使用し、ツリーが上部にボタン
バーを含めてユーザーがツリー全体を縮小/展開できるようにするかどうか、線および/または記号を表示するかどう
か、およびツリーをデータ行やノード行と結ぶ線を表示するかどうかを決定します。
LineColor: ツリーの結合線の色を取得または設定します。
LineStyle: ツリーの結合線のスタイルを取得または設定します。
たとえば、上のコードを変更することで、これらの2行を含めます。
C# コードの書き方
C#
133
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
//アウトラインツリーを表示します。
_flex.Tree.Column = 0;
_flex.Tree.Style = TreeStyleFlags.CompleteLeaf;
_flex.Tree.LineColor = Color.White;
_flex.Tree.Indent = 30;
アウトラインツリーは次のように変わります。
左上セルのラベル「1」、「2」、および「*」というラベルのボタンに注意してください。これらのボタンをクリックすると、ツリー全体
が対応するレベルに縮小または展開します。また、大幅に広くなったインデントや、ツリーを通常行(「Anne Dodsworth」)や
ノード行と結ぶ線にも注意してください。
小計の追加
ここまで、ノード行とアウトラインツリーの作成をカバーしました。しかし、アウトラインを本当に有益なものにするには、ノード行
は格納しているデータの概要情報を含める必要があります。
Subtotal メソッドを使用してアウトラインツリーを作成すると、小計が自動的に追加されます。これは後述のセクションで説明
されます。
上述した Rows.InsertNode メソッドを使用してアウトラインツリーを作成した場合、Aggregate メソッドを使用し、各行グルー
プの小計を計算して、その結果をノードに直接挿入する必要があります。
以下の Subtotal メソッドはこれを行う方法を示します。
C# コードの書き方
C#
//小計を指定レベルの各ノードに追加します。
void AddSubtotals(int level, string colName)
{
//合計する列を取得します。
int colIndex = _flex.Cols.IndexOf(colName);
//行をスキャンして該当レベルのノードを探します。
for (int r = _flex.Rows.Fixed; r < _flex.Rows.Count; r++)
{
if (_flex.Rows[r].IsNode)
{
var node = _flex.Rows[r].Node;
if (node.Level == level)
134
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
{
//ノードを見つけて、明細金額の合計を計算します。
var range = node.GetCellRange();
var sum = _flex.Aggregate(AggregateEnum.Sum,
range.r1, colIndex, range.r2, colIndex,
AggregateFlags.ExcludeNodes);
//グリッドに合計を表示します。
//(自動的に列形式を使用します。)
_flex[r, colIndex] = sum;
}
}
}
}
AddSubtotals メソッドは、グリッド行をスキャンしてノード行を探します。 希望レベルのノード行が見つかると、メソッドは
GetCellRangeメソッドを使用してノードの子行を取得します。次に、Aggregate メソッドを使用し、範囲全体のターゲット列の
値の合計を計算します。 Aggregate への呼び出しには、既存のノードの二重計算を回避するために ExcludeNodes フラグ
が組み込まれます。小計が計算されると、小計は通常の _flex[row, col] インデクサでノード行のセルに割り当てられます。
ノード行がデータにバインドしていないため、これがデータソースにまったく影響しないことに注意してください。
また、このメソッドを使用して、複数の合計を各ノード行に追加できることにも注意してください。この例では、[数量
数量]および[明
明
細金額
細金額]列に合計を追加します。合計に加えて、平均、最大、最小など、他の集計も追加できます。
これで、このメソッドを使用して、ノード行、アウトラインツリー、および小計を持つ完全なアウトラインを作成できるようになりま
した。
C# コードの書き方
C#
void _btnTreeCountryCity_Click(object sender, EventArgs e)
{
using (new DeferRefresh(_flex))
{
//元のソート(国、都市、販売員別など)を復元します。
ResetBinding();
//国、都市によってグループ化します。
GroupBy("Country", 0); //国(レベル0)によってグループ化します。
GroupBy("City", 1);
//都市(レベル1)によってグループ化します。
//国、都市ごとの合計を追加します。
AddSubtotals(0,
AddSubtotals(0,
AddSubtotals(1,
AddSubtotals(1,
"ExtendedPrice");
"Quantity");
"ExtendedPrice");
"Quantity");
//国(レベル0)ごとの明細金額
//国(レベル0)ごとの数量
//都市(レベル1)ごとの明細金額
//都市(レベル1)ごとの数量
//アウトラインツリーを表示します。
_flex.Tree.Column = 0;
_flex.AutoSizeCol(_flex.Tree.Column);
_flex.Tree.Show(1);
135
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
}
この時点でプロジェクトを実行すると、国と都市ごとの販売した合計数と合計金額を表示するノード行を持つツリーが表示され
ます。これは非常に洗練されていますが、小さな問題があります。ノード行のどれかを展開すると、多数の重複した値が表示さ
れます。指定の都市の下のすべての行が同じ国と都市を持っています。
これは正確ですが、画面サイズの浪費にもなります。これらの重複した値を消去するのは簡単で、グループ化されている列の
Width をゼロに設定するだけで済みます。ただし、これを行う際は、グリッドの AllowMerging プロパティを Nodes に設定
することも忘れないようにする必要があります。これにより、ノード行に割り当てられたテキストが表示列にはみ出して表示され
ます。(別のオプションは、ノードテキストを最初の表示列に割り当てる方法ですが、通常、マージの方が、より長いテキストを
ノード行に使用できるため、より良いソリューションです)
以下に、修正したコードと最終結果を示します。
C# コードの書き方
C#
void _btnTreeCountryCity_Click(object sender, EventArgs e)
{
using (new DeferRefresh(_flex))
{
//元のソート(国、都市、販売員別など)を復元します。
ResetBinding();
//国、都市によってグループ化します。
GroupBy("Country", 0); //国(レベル0)によってグループ化します。
GroupBy("City", 1);
//都市(レベル1)によってグループ化します。
//グループ化した列を隠します。
//(これらはツリーノードに既に表示されている重複した値のみ持っています。)
//(ただし、これらを非表示にはできません。非表示にするとノードテキストも非表示になります。)
136
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
_flex.Cols["Country"].Width = 0;
_flex.Cols["City"].Width = 0;
//ノードのコンテンツを次のセルにはみ出して表示できるようにします。
_flex.AllowMerging = AllowMergingEnum.Nodes;
//国、都市ごとの合計を追加します。
AddTotals(0, "ExtendedPrice");
AddTotals(0, "Quantity");
AddTotals(1, "ExtendedPrice");
AddTotals(1, "Quantity");
//国(レベル0)ごとの明細金額
//国(レベル0)ごとの数量
//都市(レベル1)ごとの明細金額
//都市(レベル1)ごとの数量
//アウトラインツリーを表示します。
_flex.Tree.Column = 0;
_flex.AutoSizeCol(_flex.Tree.Column);
_flex.Tree.Show(1);
}
}
今、[国]と[都市
国]と[都市]列は非表示になっていますが、それらの値はまだノード行に表示されています。ツリーを縮小すると、国と都
市ごとの合計が表示されます。
Subtotal メソッドの使用
C1FlexGrid の Subtotal メソッドを使用しても、ツリーを作成できることを前に説明しました。Subtotal メソッドは、上述した
GroupBy および AddSubtotals メソッドと同じタスクを実行します。ただし、1つの手順で両方の作業を実行するため、効率
が少し向上します。
下のコードに、
、Subtotal メソッドを使用して前に行ったのと同じことを実行できることを示します。処理が少しスピードアップし、
どのヘルパーメソッドも使用されていないだけです。
C# コードの書き方
137
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
void _btnTreeCountryCity_Click(object sender, EventArgs e)
{
using (new DeferRefresh(_flex))
{
//元のソート(国、都市、販売員別など)を復元します。
ResetBinding();
//国と都市ごとにグループ化し、合計します。
_flex.Subtotal(AggregateEnum.Sum,
_flex.Subtotal(AggregateEnum.Sum,
_flex.Subtotal(AggregateEnum.Sum,
_flex.Subtotal(AggregateEnum.Sum,
0,
0,
1,
1,
"Country", "ExtendedPrice");
"Country", "Quantity");
"City", "ExtendedPrice");
"City", "Quantity");
//グループ化した列を隠します。
//(これらはツリーノードに既に表示されている重複した値のみ持っています。)
//(ただし、これらを非表示にはできません。非表示にするとノードテキストも非表示になります。)
_flex.Cols["Country"].Width = 0;
_flex.Cols["City"].Width = 0;
_flex.AllowMerging = AllowMergingEnum.Nodes;
//アウトラインツリーを表示します。
_flex.Tree.Column = 0;
_flex.AutoSizeCol(_flex.Tree.Column);
_flex.Tree.Show(1);
}
}
Subtotal メソッドは非常に便利で柔軟です。このメソッドは、数多くのオーバーロードを持つため、インデックスや名前別にグ
ループ化して合計する列を指定したり、挿入するノード行にキャプションを組み込むかどうかや、グループ化の実行方法などを
指定したりできます。以下の要約で、使用可能なオーバーロードを説明します。
1. Subtotal(AggregateEnum aggType)
メソッドのこのバージョンは、集計タイプをパラメータとしてのみ受け取ります。新しい小計を挿入する前に既存の小計
を削除する場合にのみ役立ちます。この場合、 aggType パラメータは AggregateEnum.Clear に設定されます。
2. Subtotal(AggregateEnum aggType, int groupBy, int totalOn)
Subtotal(AggregateEnum aggType, string groupBy, string totalOn)
これらは最も一般に使用されるオーバーロードです。パラメータは、挿入する集計のタイプ、およびグループ化して合計
する列です。列は、インデックスまたは名前によって参照できます。後者は上の例で使用されたものです。
3. Subtotal(AggregateEnum aggType, int groupBy, int totalOn, string caption)
Subtotal(AggregateEnum aggType, string groupBy, string totalOn, string caption)
これらのオーバーロードは、特別な caption パラメータです。 caption パラメータは、グループ化する値を識別するた
めに新しいノード行に追加されたテキストを決定します。デフォルトでは、グループ化する値が表示されるため、国に
よってグループした場合、ノード行は「アルゼンチン」、「ブラジル」などを表示します。 caption パラメータを「国:{0}」な
どの文字列に設定した場合、ノード行は代わりに「国:アルゼンチン」を表示します。
4. Subtotal(AggregateEnum aggType, int groupFrom, int groupTo, int totalOn, string caption)
138
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Subtotal(AggregateEnum aggType, string groupFrom, string groupTo, string totalOn, string caption)
これらのオーバーロードは、groupBy パラメータを groupFrom と groupTo の2つに分けます。デフォルトでは、
Subtotal メソッドは、groupBy または任意の前の列の値が変更されると必ずノード行を挿入します。
たとえば、行が「都市」列には前の行と同じ値を持ち、「国」列には異なる値を持っている場合、Subtotal メソッドはこれ
らの行が異なるグループにあると見なして、groupBy 列の値が同じ場合でも新しいノード行を挿入します。これらの集
計により、その動作をオーバーライドして、グループを識別するときに考慮される列範囲を指定できます。
アウトラインの保守
これまで、高レベルの Subtotal メソッドと、低レベルの Rows.InsertNode や Aggregate メソッドを使用して、ツリーと合計
を持つアウトラインを作成する方法について説明しました。
この時点で、アウトラインツリーはデータに基づいて作成されていても、決してデータにバインドされていないことや、グリッドま
たはデータへの変更があるときに自動的に維持されないことを覚えておくことは重要です。
ユーザーがたとえば、「ExtendedPrice」列の値を変更した場合、小計は自動的に更新されません。ユーザーがグリッドをソート
した場合、データは更新され小計が非表示になります。
アウトラインを維持するには、次の2つの一般的な方法があります。
1. ユーザーにアウトラインを無効にするような変更を行わせないようにします。これが最も簡単なオプションです。グリッド
の AllowEditing、AllowDragging、および AllowSorting プロパティを false に設定し、アウトラインに影響するよう
な任意の変更を防止します。
2. データまたはグリッドへの変更があるときにアウトラインを更新します。ハンドラをグリッドの AfterDataRefresh,
AfterSort、および AfterEdit イベントにアタッチして、アウトラインを適切に再生成します。
オプション2は通常、動的データ分析の速くてシンプルなツールを提供するため、より興味深い方法です。この方法は、
C1FlexGrid で提供されている Analyze サンプルに示されています。サンプルでは、初期アウトラインを作成し、ユーザーに
列の並べ替えを許可します。列順が変更されると、サンプルは自動的にデータを再ソートして、アウトラインを再作成します。
ユーザーは、国、製品、販売員ごとに売上を表示するシンプルなレポートを簡単に作成できます。
Node クラスの使用
Nodeクラスは、アウトラインツリーの作成と管理に使用できる数多くのメソッドとプロパティを提供します。これらのメソッドやプ
ロパティの多くは、標準の TreeView オブジェクトモデルをベースとしているため、ほとんどの開発者が精通しているはずで
す。
Node オブジェクトを取得するには、次のいずれかを使用できます。
次のように、Rows.InsertNode メソッドの戻り値を使用します。
C#
var node = _flex.Rows.InsertNode(index, level);
あるいは、次のように、行の Node プロパティを使用して既存の行のノードを取得できます。
C#
var node = _flex.Rows[index].IsNode
? _flex.Rows[index].Node
: null;
どちらの場合も、Node オブジェクトを取得したら、次のプロパティとメソッドを使用してそれを操作できます。
Level: アウトラインツリーのノードレベルを取得または設定します。
Data: Node.Row と Tree.Column によって定義されたセルの値を取得または設定します。
139
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Image: Node.Row と Tree.Column によって定義されたセルの値を取得または設定します。
Checked: Node.Row と Tree.Column によって定義されたセルのオン/オフ状態を取得または設定します。
Collapsed/Expanded: ノードの縮小/展開状態を取得または設定します。
また、次のメソッドを使用してアウトライン構造を探索することもできます。
GetCellRange(): このノードに属する行の範囲を記述した CellRange オブジェクトを取得します。
Children: このノードの下にある子ノードの数を取得します。
Nodes: このノードの子ノードを格納するノード配列を取得します。
GetNode: このノードと指定の関係(親、最初の子、次の兄弟など)を持つノードを取得します。
上の考察では、グリッドがデータの提供元のデータソースにアタッチされているバインドシナリオに焦点を当てました。非バイン
ドシナリオでもツリーとアウトラインを作成できます。この場合は、IsNode プロパティを true に設定することで任意の行をノー
ド行に変えることができるため、実質的に、いくらかシンプルになります。
グリッドは、バインドされていない場合は表示されるすべてのデータを所有し、データソースがデータを所有するときにはできな
いことを実行できます。たとえば、C1FlexGridで提供されている TreeNode サンプルに示すように、 Move メソッドを使用して
ツリーのノードをあちこち移動できます。
非バインドグリッドのノードの使用方法は、通常の TreeView コントロールのノードの使用方法と非常に類似しています。
保存とロード、および印刷
C1FlexGrid コントロールでは、グリッドを保存、ロード、および印刷できるメソッドを用意しています。
テキストファイルの保存とロード
SaveGrid メソッドは、グリッドの内容をテキストファイルに保存します。このメソッドの引数には、使用する区切り文字の種類
(コンマ(,)、タブなど任意の区切り文字)、固定セルを保存するかどうか、あるいはスクロール可能なセルのみを保存するか、
使用するエンコードの種類(ASCII または Unicode など)を指定します。保存されたテキストファイルは、後でコントロールやコ
ンマ(,)やタブ区切りされたファイルをサポートする他のアプリケーション(Microsoft Excel など)に再ロードできます。
LoadGridメソッドは、データをテキストファイルからロードします。SaveGrid メソッドまたは他のアプリケーションで作成したテ
キストファイルもロードできます。
テキストファイルの形式は非常に単純です。ファイルには、画面に表示されているとおりの書式付きの文字列として保存されま
す。セルテキストに引用符号またはセルセパレータ文字が含まれる場合、セルテキストは引用符号で囲まれます。セルテキス
トの引用符号文字は二重引用符号のみです。これは、Microsoft Excel テキストファイルでの規則と同じです。
テキストファイルはピクチャや書式情報を含みません。
SaveGrid メソッドは、グリッド全体を保存するか、(スクロール可能な、表示されている、または選択されている)特定の部分の
みを保存するかを指定できる flags 引数を持っています。
Microsoft Excel ファイルの保存とロード
Ver.2.0からは、SaveGrid と LoadGrid メソッドを使用し、テキストファイルはもちろん、Microsoft Excel ファイル(xls)、および
テキストファイルも保存したりロードしたりできるようになりました。これによって、データと共に書式情報も保存できます。
C1FlexGridBase.SaveGrid と C1FlexGridBase.LoadGrid の各メソッドを使用して Excel ファイルを保存およびロードするには、
書式引数を FileFormatEnum.Excel に設定し、これらのメソッドを通常どおり呼び出すだけです。コンピュータに Microsoft
Excel がインストールされている必要はありません。
Excel ファイルは、「ワークシート」から成る「ワークブック」を含んでいます。SaveGrid と LoadGrid の各メソッドは常に、1枚の
シートから成るブックを保存し、既存のブックの最初のシートをロードします。ロードまたは保存する複数のシートをさらに制御
したい場合、代わりに SaveExcel、LoadExcel、 LoadExcelSheetNames の各メソッドを使用します。Excel ファイルの保存と
ロード処理は、行と列のサイズ、フォント、色、書式、およびセル配置など、ほとんどのデータ型と書式情報を変換します。ただ
し、すべての書式要素を変換できるわけではありません。たとえば、グリッドは Excel セル内の値をロードしますが、基となる式
140
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
はロードしません。イメージやデータマップ、およびセルボーダーなどのその他の特性も変換されません。
データベースからのグリッドのロード
データベースからグリッドをロードすることもできます。これは、1つまたは複数のコントロールと基になるデータソースとの間の
ライブ接続を維持するデータ連結と異なります。データベースからデータをロードするには、DataReader オブジェクトを次のよ
うに使用できます。
Visual Basic コードの書き方
Visual Basic
Private Sub _btnData_Click(ByVal sender As Object, ByVal e As System.EventArgs)
' DataReaderを準備します
Dim strConn As String = "data source=MYMACHINE;initial catalog=Northwind;"
Dim myConn As New SqlConnection(strConn)
Dim myCMD As New SqlCommand("SELECT * FROM Employees", myConn)
myConn.Open()
Dim myReader As SqlDataReader = myCMD.ExecuteReader()
' データベースのスキーマからグリッドの構造を構築します
Dim dt As DataTable = myReader.GetSchemaTable()
_flex.Cols.Count = 1
Dim dr As DataRow
For Each dr In dt.Rows
Dim c As Column = _flex.Cols.Add()
c.Caption =(c.Name <<= CStr(dr("ColumnName")))
c.DataType = CType(dr("DataType"), Type)
Next dr
' グリッドを配置します
_flex.Rows.Count = 1
Dim row As Integer = 1
Dim cols As Integer = dt.Columns.Count
Dim v As Object() = CType(Array.CreateInstance(GetType(Object), cols), Object())
While myReader.Read()
myReader.GetValues(v)
_flex.AddItem(v, row ++, 1)
End While
' クリーンアップ
_flex.AutoSizeCols()
myReader.Close()
myConn.Close()
End Sub
C# コードの書き方
C#
private void _btnData_Click(object sender, System.EventArgs e)
{
// DataReaderを準備します
string strConn = "data source=MYMACHINE;initial catalog=Northwind;";
SqlConnection myConn = new SqlConnection(strConn);
SqlCommand myCMD = new SqlCommand("SELECT * FROM Employees", myConn);
myConn.Open();
141
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
SqlDataReader myReader = myCMD.ExecuteReader();
// データベースのスキーマからグリッドの構造を構築します
DataTable dt = myReader.GetSchemaTable();
_flex.Cols.Count = 1;
foreach (DataRow dr in dt.Rows)
{
Column c = _flex.Cols.Add();
c.Caption = c.Name = (string)dr["ColumnName"];
c.DataType = (Type)dr["DataType"];
}
// グリッドを配置します
_flex.Rows.Count = 1;
int row = 1;
int cols = dt.Columns.Count;
object[] v = (object[])Array.CreateInstance(typeof(object), cols);
while (myReader.Read())
{
myReader.GetValues(v);
_flex.AddItem(v, row++, 1);
}
// クリーンアップ
_flex.AutoSizeCols();
myReader.Close();
myConn.Close();
}
グリッドの印刷
PrintGrid メソッドを使用して、グリッドの内容を印刷します。このメソッドには、拡大縮小(scaling)モード、印刷/印刷プレ
ビューダイアログを表示するかどうか、ヘッダやフッタの設定などを選択できる引数があります。
コントロールは、さらにヘッダやフッタに使用するフォントなどの追加の印刷プロパティを提供するPrintParameters プロパ
ティ、およびプリンタ、用紙サイズ、用紙方向、余白などを選択するために使用できる .NET Framework の PrintDocument
オブジェクトを用いることができます。
次のサンプルコードは、PrintParameters プロパティを使用して用紙方向、マージン、ヘッダおよびフッタのフォントを設定しま
す。次に、PrintGrid メソッドを呼び出して、印刷プレビューダイアログを表示します。
Visual Basic コードの書き方
Visual Basic
' グリッドの PrintDocumentオブジェクトを取得します
Dim pd As Printing.PrintDocument
pd = flex.PrintParameters.PrintDocument()
' ページ設定を行います(用紙方向:横向き 左余白:150)
With pd.DefaultPageSettings
.Landscape = True
.Margins.Left = 150
End With
' ヘッダとフッタのフォントを設定します
flex.PrintParameters.HeaderFont = New Font("Arial Black", 14, FontStyle.Bold)
flex.PrintParameters.FooterFont = New Font("Arial Narrow", 8, FontStyle.Italic)
' グリッドをプレビューします
142
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.PrintGrid("VB Tutorial", _
PrintGridFlags.FitToPageWidth + _
PrintGridFlags.ShowPreviewDialog, _
"VB Tutorial" + _
Chr(9) + Chr(9) + Format(DateTime.
C# コードの書き方
C#
// グリッドの PrintDocumentオブジェクトを取得します
System.Drawing.Printing.PrintDocument pd;
pd = flex.PrintParameters.PrintDocument;
// ページ設定を行います(用紙方向:横向き 左余白:150)
pd.DefaultPageSettings.Landscape = true;
pd.DefaultPageSettings.Margins.Left = 150;
// ヘッダとフッタのフォントを設定します
flex.PrintParameters.HeaderFont = new Font("Arial Black", 14, FontStyle.Bold);
flex.PrintParameters.FooterFont = new Font("Arial Narrow", 8, FontStyle.Italic);
// グリッドをプレビューします
flex.PrintGrid("C# Tutorial",
PrintGridFlags.FitToPageWidth |
PrintGridFlags.ShowPreviewDialog,
"C# Tutorial" + (char)(9) + (char)(9) +
string.Format("{0:yyyy/MM/dd}", DateTime.Now),
(char)(9) + (char)(9) + "Page {0} of {1}");
フィルタリング
グリッドにおけるデータのフィルタリングは、通常2つの形式で提供されます。
ヘッダベース
ヘッダベース: フィルタが適用された各列上にフィルタアイコンが表示されます。ユーザーはフィルタアイコンのクリック
により、フィルタを確認、編集できます。 これは Windows 7/Vista および C1FlexGrid コントロールで使用されているメ
カニズムです。このタイプのフィルタの主な利点には、(1)ユーザーが、どの列がフィルタリングされているかがわかるこ
と、 (2)フィルタリングが画面上に余分な領域を必要としないこと、(3)より使いやすいフィルタエディタを利用でき、カスタ
マイズもより簡単なこと、があります。
行フィルタ:
行フィルタ:行フィルタは常に表示されており、ユーザーがその行に値や式を入力することができます。このタイプのフィ
ルタの主な利点は、フィルタリングされている列および現在のフィルタ条件を、ユーザーが常に見ることができる点で
す。主な欠点は、フィルタ用のための領域が必要なことと、通常のグリッド操作の邪魔になる可能性があることです。
フィルタ行はC1FlexGrid コントロールには組み込まれていませんが、実装は比較的簡単です。実装方法
は、FilterRow サンプル
サンプルで紹介しています。
以下で示すコード例は、製品付属の ColumnFilters サンプル
サンプル、および CustomFilters サンプル
サンプルから抜粋したものがほとんど
です。これらの機能を実行する完全なプロジェクトについては、各サンプルを参照してください。
AllowFilteringプロパティ
プロパティ
ヘッダベースのフィルタを実装するために、C1FlexGrid コントロールは、列の移動とサイズ調整の実装に使用されているもの
と同じパターンを採用しています。グリッドは、コントロールレベルでフィルタリングを制御する新しいAllowFiltering プロパティ
を持ち、グリッドの Column オブジェクトもまた、列レベルでフィルタリングを制御するAllowFiltering プロパティを持っていま
す。
簡単なフィルタリングのシナリオを実現するには、ユーザーはグリッドのプロパティを True に設定します。後は、列
143
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
のAllowFiltering プロパティの値を変更することで、特定の列に対して、フィルタリングの動作を無効にしたり、カスタマイズし
たりできます。列のAllowFiltering プロパティに設定可能な値は以下のとおりです。
Default: グリッドはColumnFilter 型のフィルタを自動的に作成します。このフィルタは後述する ValueFilter と
ConditionFilter を合わせたものです。
ByValue: グリッドはValueFilter 型のフィルタを自動的に作成します。このフィルタは、表示すべき値のリストを保持し
ます。リスト上にない値は、エンドユーザーには表示されません。
ByCondition: グリッドはConditionFilter 型のフィルタを自動的に作成します。このフィルタでは、”指定の値より大き
い”、”指定の値を含む”などといった条件を1つまたは2つ指定します。2つの条件を、AND、ORオペレータで結合する
ことも可能です。
Custom: グリッドはフィルタを自動的に作成しません。開発者が、フィルタのインスタンスを作成し、列の Filter プロパ
ティに明示的に割り当てる必要があります。
None: 列はフィルタリングされません。.
デフォルトでは、C1FlexGrid コントロールは列フィルタエディタをローカライズして、CurrentUICulture 設定で指定された言
語を使用します。しかし、Language プロパティを使用し、デフォルトをオーバーライドして、グリッドが列フィルタエディタを表示
するときに使用される言語を指定できます。
フィルタが適用された列には、マウスポインタを置かなくてもヘッダー上にフィルタアイコンが表示されます。これは
ProductName と Quantity 列ヘッダーがフィルタアイコンを表示している画像内に表示されます。
組み込みフィルタが自動ローカライズをサポートする言語は、英語、スペイン語、フランス語、イタリア語、ポルトガル語、ドイツ
語、オランダ語、ロシア語、日本語、ギリシャ語、デンマーク語、フィンランド語、ノルウェー語、スウェーデン語、アラビア語、
ポーランド語、中国語、トルコ語、ペルシア語(ファルシ語)、韓国語、およびヘブライ語です。ローカライズは内蔵されているた
め、サテライト dll は不要です。
Value Filter
ValueFilter は概念的に非常にシンプルです。値のリストを持ち、リストにあげられた値だけがグリッド上に表示されます。リス
トに null が設定されると、フィルタは無効化され、すべての値が表示されます。このタイプのフィルタは、名前や列挙型のよう
に別々の値を持つ列のフィルタリングに向いています。
ValueFilter エディタはチェックボックスが付いた値のリストで構成されています。ユーザーは、1度にすべての値をチェックし
たり、あるいはチェックをはずしたりすることもできます。長いリストの操作も、高度な組み込みのキーボードナビゲーションを使
えば簡単です。エディタは、フレキシブルな検索バッファを実装しており、ユーザーが値の一部を入力することで値に位置づけ
ることが可能です。たとえば、”Hilton”と入力すると、"New York Hilton"、"Prince Edward Hilton"、 あるいは"Paris Hilton"な
ど、"Hilton"を含む次の値が選択されます。また、[Ctrl]+[Up]キーまたは[Ctrl]+[Down]キーを押すと、次のまたは前の
チェックされた要素へと移動します。
値は、現在、列に割り当てられた Format を使ってリスト上に表示されます。
注意:
注意:グリッドでフィルタを1つ以上の列に設定する場合、ValueFilterエディタで表示されるフィルタリング値が、前回の
フィルタが設定された後だけ表示されます
この画像は、ValueFilter エディタを表しています。
144
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Condition Filter
ConditionFilter はよりフレキシブルです。ユーザーは特定の値を選択する代わりに、“指定の値より大きい”、”指定の値で始
まる”、または”指定の値を含む”といったオペレータを使って、条件を2つまで指定することができます。
このタイプのフィルタは数値や日付/時刻の値のように”連続的な”値を含む列のフィルタリングに向いています。
この画像は、ConditionFilter エディタを表しています。
145
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Custom Filters
カスタムフィルタは特殊な値を扱うために作成されます。たとえば、色や地理データ、あるいは独自のデータ型などをフィルタリ
ングするのに向いています。
カスタムフィルタを作成するには、開発者は2つのクラスを作成しなくてはなりません。
Filter: このクラスはIC1ColumnFilter インタフェースを実装する必要があり、これにより、特定の値にフィルタを適用
したり、フィルタをリセットしたり、フィルタのパラメータの確認・編集に使用されるエディタを返したりするために使用され
るメソッドを指定します。
Filter Editor: このクラスは必ず Control から継承され、 IC1ColumnFilterEditor インタフェースを実装する必要が
あり、これにより、エディタを初期化したり、フィルタへの変更を適用したりするために使用されるメソッドを指定します。
製品付属のCustomFilters サンプルでは、Color型、DateTime型、およびString型の値のフィルタリングに使用される3つの
カスタムフィルタを実装しています。
プログラムによるフィルタの管理
前述のように、すべての列で列のフィルタリングを有効にするには、グリッドのAllowFiltering プロパティを True に設定する
だけで充分です。しかしながら、多くの場合、フィルタリングに対してより細かな制御が必要になることもあります。それは、
個々の列において、AllowFilteringプロパティと Filter プロパティを変更することで実現できます。
たとえば、以下のコードではフィルタリングを有効にしていますが、String 型の列でのフィルタリングは禁止しています。
Visual Basic コードの書き方
VisualBasic
' グリッドのフィルタリングを有効にします。
146
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
_flex.AllowFiltering = True
' string 型の列はフィルタリングを禁止します。
For Each c As Column In _flex.Cols
If c.DataType Is GetType(String) Then
c.AllowFiltering = AllowFiltering.None
Else
c.AllowFiltering = AllowFiltering.Default
End If
Next
C# コードの書き方
C#
// グリッドのフィルタリングを有効にします。
_flex.AllowFiltering = true;
// string 型の列はフィルタリングを禁止します。
foreach (Column c in _flex.Cols)
{
c.AllowFiltering = c.DataType == typeof(string)
? AllowFiltering.Default
: AllowFiltering.None;
}
フィルタを作成して列に割り当てるか、または既存のフィルタを取得して各種プロパティを変更することにより、フィルタリングの
処理をさらにカスタマイズすることができます。たとえば、以下のコードでは、 ConditionFilterを作成して”C”の文字で始まる
すべての要素を選択するように構成し、その後で新しいフィルタを ProductName 列に割り当てています。
Visual Basic コードの書き方
VisualBasi
' グリッドのフィルタリングを有効にします。
__flex.AllowFiltering = True
' 新しいConditionFilterを作成します。
Dim Filter = New ConditionFilter()
' "C"で始まる要素を選択するフィルタを構成します。
Filter.Condition1.Operator = ConditionOperator.BeginsWith
Filter.Condition1.Parameter = "C"
' 新しいフィルタを"ProductName"列に割り当てます。
_flex.Cols("ProductName").Filter = Filter
C# コードの書き方
C#
// グリッドのフィルタリングを有効にします。
_flex.AllowFiltering = True
' 新しいConditionFilterを作成します。
ConditionFilter filter = new ConditionFilter();
// "C"で始まる要素を選択するフィルタを構成します。
filter.Condition1.Operator = ConditionOperator.BeginsWith;
147
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
filter.Condition1.Parameter = "C";
// 新しいフィルタを"ProductName"列に割り当てます。
_flexCustom.Cols["ProductName"].Filter = filter;
プログラムによるフィルタの適用
フィルタは、ユーザーがフィルタを編集したときに適用されます。データが変更された時点では、フィルタは自動的に適用されま
せん。フィルタを現在グリッドにロードされているデータに適用するには、グリッドの ApplyFilters メソッドを呼び出します。
たとえば、以下のコードでは、ユーザーがグリッド上のデータを編集するときに、<適用>ボタンを有効にしています。<適用>ボ
タンをクリックすることで、フィルタを適用し、次の変更までボタンを無効にします。
Visual Basic コードの書き方
Visual Basic
public Sub New()
{
InitializeComponent()
' データを取得します。
Dim da = New OleDbDataAdapter("select * from products", GetConnectionString())
Dim dtProducts = New DataTable()
da.Fill(dtProducts)
' グリッドにデータを連結します。
_flex.DataSource = dtProducts
' グリッドのフィルタリングを有効にします。
_flex.AllowFiltering = true
' <適用>ボタンを有効にするために、変更を監視します。
AddHandler _flex.AfterEdit, AddressOf _flex_AfterEdit
AddHandler _btnApplyFilters.Click, AddressOf _btnApplyFilters_Click
End sub
C# コードの書き方
C#
public Form1()
{
InitializeComponent();
// データを取得します。
var da = new OleDbDataAdapter("select * from products", GetConnectionString());
var dtProducts = new DataTable();
da.Fill(dtProducts);
// グリッドにデータを連結します.
_flex.DataSource = dtProducts;
// グリッドのフィルタリングを有効にします。
_flex.AllowFiltering = true;
148
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// <適用>ボタンを有効にするために、変更を監視します。
_flex.AfterEdit += _flex_AfterEdit;
}
上記のコードでは、グリッドをデータソースに連結し、 AllowFiltering プロパティを True に設定することでフィルタリングを有
効にし、AfterEditイベントにイベントハンドラを関連付けています。このイベントハンドラの実装は下記のようになります。
Visual Basic コードの書き方
Visual Basic
Private Sub _flex_AfterEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs)
Dim c As C1.Win.C1FlexGrid.Column
For Each c In _flex.Cols
If Not (c.ActiveFilter Is Nothing) Then
_btnApplyFilters.Enabled = True
End If
Next c
End Sub
C# コードの書き方
C#
void _flex_AfterEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
foreach (C1.Win.C1FlexGrid.Column c in _flex.Cols)
{
if (c.ActiveFilter != null)
{
_btnApplyFilters.Enabled = true;
break;
}
}
}
このコードは、すべての列をスキャンして、列にフィルタが定義されているかどうかを判断します。アクティブなフィルタが捕捉さ
れると、コードが現在のデータに対してフィルタを適用するボタンを有効にします。ボタンがクリックされると、以下のイベントラ
を実行します。
Visual Basic コードの書き方
Visual Basic
Private Sub _btnApplyFilters_Click(ByVal sender As Object, ByVal e As
System.EventArgs)
_flex.ApplyFilters()
_btnApplyFilters.Enabled = False
End sub
C# コードの書き方
C#
private void _btnApplyFilters_Click(object sender, EventArgs e)
{
149
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
_flex.ApplyFilters();
_btnApplyFilters.Enabled = false;
}
コードは単純に、すべてのアクティブなフィルタを適用し、次の変更までボタンを無効にします。ボタンのクリックを取得する代
わりに編集後に毎回、フィルタを適用したい場合、以下のようにAfterEdit イベントハンドラから直接ApplyFilter を呼び出す
こともできます。
Visual Basic コードの書き方
Visual Basic
Pivate Sub _flex_AfterEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs)
'フィルタを適用します。
_flex.ApplyFilters()
End Sub
C# コードの書き方
C#
private void _flex_AfterEdit(object sender, RowColEventArgs e)
{
// フィルタを適用します。
_flex.ApplyFilters();
}
フィルタ動作のカスタマイズ
フィルタが適用されると、グリッドは行の Visible プロパティを False に設定して行を非表示にします。しかし、フィルタリング動
作をカスタマイズできるように、グリッドは、BeforeFilter イベントとAfterFilterイベントを発生させます。たとえば、行を表示/非
表示する代わりに、どの行がフィルタを通過したか、あるいは通過しなかったかを示す個別のスタイルを適用したいとします。
これは、コードにより簡単に実現できます。
Visual Basic コードの書き方
Visual Basic
Public Sub New()
InitializeComponent()
' グリッドを設定します。
_flex.AllowFiltering = True
_flex.DataSource = dtInvoices
' フィルタで除外された行のスタイルを作成します。
Dim cs = _flex.Styles.Add("filteredOut")
cs.BackColor = Color.LightSalmon
cs.ForeColor = Color.DarkOrange
' イベントハンドラを関連付けます。
AddHandler _flex.BeforeFilter, AddressOf _flex_BeforeFilter
AddHandler _flex.AfterFilter, AddressOf _flex_AfterFilter
End Sub
C# コードの書き方
150
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
public Form1()
{
InitializeComponent();
// グリッドを設定します。
_flex.AllowFiltering = true;
_flex.DataSource = dtInvoices;
// フィルタで除外された行のスタイルを作成します。
var cs = _flexStyles.Styles.Add("filteredOut");
cs.BackColor = Color.LightSalmon;
cs.ForeColor = Color.DarkOrange;
// イベントハンドラを関連付けます。
_flex.BeforeFilter += _flex_BeforeFilter;
_flex.AfterFilter += _flex_AfterFilter;
}
このコードは、フィルタを通過しなかった行を表すのに(それらを非表示にする代わりに)使用されるカスタムスタイルを作成し
ます。次に、BeforeFilter イベントとAfterFilterイベントにイベントハンドラをアタッチします。イベントハンドラのコードは以下の
ようになります。
Visual Basic コードの書き方
Visual Basic
' フィルタが適用される前に描画を保留します。
Private Sub _flex_BeforeFilter(ByVal sender As Object, ByVal e As CancelEventArgs)
_flex.BeginUpdate()
End Sub
' フィルタの適用後にスタイルを適用します。
Private Sub _flex_AfterFilter(ByVal sender As Object, ByVal e As EventArgs)
' フィルタで除外された行を表すスタイルを取得します。
Dim cs = _flexStyles.Styles("filteredOut")
' すべての行にスタイルを適用します。
Dim r As Integer
For r = _flex.Rows.Fixed To _flex.Rows.Count - 1
Dim Row = _flex.Rows(r)
If (Row.Visible) Then
' 通常の行:スタイルをリセット
Row.Style = Nothing
Else
' フィルタで除外された行:表示してスタイルを設定
Row.Visible = True
Row.Style = cs
End If
Next
' 更新を再開します。
_flex.EndUpdate()
End Sub
C# コードの書き方
151
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
// フィルタが適用される前に描画を保留します。
private void _flex_BeforeFilter(object sender, CancelEventArgs e)
{
_flexStyles.BeginUpdate();
}
// フィルタの適用後にスタイルを適用します。
private void _flexStyles_AfterFilter(object sender, EventArgs e)
{
// フィルタで除外された行を表すスタイルを取得します。
var cs = _flex.Styles["filteredOut"];
// すべての行にスタイルを適用します
for (int r = _flexStyles.Rows.Fixed; r < _flexStyles.Rows.Count; r++)
{
var row = _flexStyles.Rows[r];
if (row.Visible)
{
// 通常の行:スタイルをリセット
row.Style = null;
}
else
{
// フィルタで除外された行:表示してスタイルを設定
row.Visible = true;
row.Style = cs;
}
}
// 更新を再開します。
_flexStyles.EndUpdate();
}
BeforeFilterイベントハンドラは、本バージョンで追加されたBeginUpdate メソッドを呼び出し、フィルタで除外された行にカスタ
ムスタイルが適用されるまで、グリッド自身が再描画されるのを抑制します。
AfterFilter イベントハンドラははじめに、フィルタで除外された行を表すために作成したスタイルを取得します。それからグリッ
ドの行をスキャンして、Visible プロパティが False に設定されているすべての行に対して新しいスタイルを適用します。これら
が、フィルタによって非表示にされていた行です。この処理が終わると、コードはEndUpdateメソッドを呼び出し、グリッドの更
新を再開します。
フィルタリング
フィルタリングUIのカスタマイズ
のカスタマイズ
デフォルトのフィルタリングの動作とUIは、列のフィルタリングに関わる大多数のシナリオに対応していると思いますが、列フィ
ルタのクラスを独立的に使用し、独自のユーザーインタフェースを実装することも可能です。
たとえば、以下のコードは、ConditionFilter クラスを使用して iTunes スタイルのサーチボックスをC1FlexGrid に実装する方
法を示しています。このタイプの検索では、ユーザーはある値を入力すると、自動的にグリッドの行をフィルタリングして、いず
れかの列に検索文字列を含む行を表示します。
iTunesスタイルの検索の実装は、フィルタのパラメータとして使用されるテキストを含むテキストボックスからはじめます。ユー
ザーがテキストボックスでタイピングをやめた1/2ミリ秒後にフィルタが適用されるように、Timer コントロールも定義します。
152
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
public Sub New()
InitializeComponent()
' ユーザーがサーチボックスへのタイピングをやめた1/2秒後に
' フィルタを適用するようタイマーを構成します。
_timer.Interval = 500
AddHandler _timer.Tick, AddressOf t_Tick
' サーチボックスの変更を監視します。
AddHandler _txtSearch.TextChanged, AddressOf _txtSearch_TextChanged
End Sub
' サーチボックスのテキストの変更時、タイマーを再開します。
Private Sub _txtSearch_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
_timer.Stop()
_timer.Start()
End Sub
C# コードの書き方
C#
public Form1()
{
InitializeComponent();
// ユーザーがサーチボックスへのタイピングをやめた1/2秒後に
// フィルタを適用するようタイマーを構成します。
_timer.Interval = 500;
_timer.Tick += t_Tick;
// サーチボックスの変更を監視します。
_txtSearch.TextChanged += _txtSearch_TextChanged;
}
// サーチボックスのテキストの変更時、タイマーを再開します。
void _txtSearch_TextChanged(object sender, EventArgs e)
{
_timer.Stop();
_timer.Start();
}
これでタイマーは構成できたので、あとは、タイマー作動時にフィルタを作成して適用するだけです。
Visual Basic コードの書き方
Visual Basic
' タイマー作動時にフィルタを適用します。
Private Sub _t_Tick(ByVal sender As Object, ByVal e As EventArgs)
' ひとまず終了...
_timer.Stop()
' フィルタを構成します。
filter As New ConditionFilter()
filter.Condition1.Operator = C1.Win.C1FlexGrid.ConditionOperator.Contains
153
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
filter.Condition1.Parameter = _txtSearch.Text
' フィルタを適用します。
_flex.BeginUpdate()
For r As Integer = _flexSearch.Rows.Fixed To _flexSearch.Rows.Count - 1
Dim visible As Boolean = False
For c As Integer = _flexSearch.Cols.Fixed To _flexSearch.Cols.Count - 1
If _searchFilter.Apply(_flexSearch(r, c)) Then
visible = True
count += 1
Exit For
End If
Next
_flex.Rows(r).Visible = visible
Next
_flex.EndUpdate()
End Sub
C# コードの書き方
C#
// タイマー作動時にフィルタを適用します。
void t_Tick(object sender, EventArgs e)
{
// ひとまず終了...
_timer.Stop();
// フィルタを構成します。
var filter = new C1.Win.C1FlexGrid.ConditionFilter();
filter.Condition1.Operator = C1.Win.C1FlexGrid.ConditionOperator.Contains;
filter.Condition1.Parameter = _txtSearch.Text;
// フィルタを適用します。
_flex.BeginUpdate();
for (int r = _flex.Rows.Fixed; r < _flex.Rows.Count; r++)
{
bool visible = false;
for (int c = _flex.Cols.Fixed; c < _flex.Cols.Count; c++)
{
if (filter.Apply(_flex[r, c]))
{
visible = true;
break;
}
}
_flex.Rows[r].Visible = visible;
}
_flex.EndUpdate();
}
プロパティグループ
C1FlexGrid コントロールには、数多くのプロパティ、メソッド、およびイベントが用意されています。コントロールを効率的に使
用するために、これらのすべてを把握しておく必要はありません。
154
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ここでは、これらのうち最も重要なプロパティ、メソッド、およびイベントを用途別にまとめます。複数のグループに重複してリス
トされている要素もあります。それぞれの詳細については、リファレンスの項を参照してください。
1. グリッドのレイアウト
Rows, Cols, AutoSizeCols, ScrollBars, ScrollBarsVisible, ScrollOptions
2. カーソルとセル範囲の選
SelectionMode, Select, ShowCell, Row, Col, RowSel, ColSel, Selection, MouseRow, MouseCol,
BeforeRowColChange, AfterRowColChange, BeforeSelChange, AfterSelChange, KeyActionTab,
KeyActionEnter
3. 編集
AllowEditing, ComboList, EditMask, BeforeEdit, StartEdit, ValidateEdit, AfterEdit, StartEditing,
FinishEditing, Editor, CellButtonClick, KeyDownEdit, KeyPressEdit, KeyUpEdit, ChangeEdit
4. セル値の設定と参照
Item (インデクサ), GetData, GetDataDisplay, SetData, GetCellRange, GetCellImage, SetCellImage, Clip,
FindRow, Aggregate, CellChanged
5. ユーザーインタフェース
AllowEditing, AllowMerging, AllowResizing, AllowDragging, AllowFiltering, AllowSorting, BeforeSort,
AfterSort, AutoSearch, AutoSearchDelay, BeforeDragColumn, AfterDragColumn, BeforeDragRow,
AfterDragRow, BeforeResizeColumn, AfterResizeColumn, BeforeResizeRow, AfterResizeRow,
ShowScrollTip
6. アウトラインとデータのグループ化
Subtotal, Tree, IsNode, Level, Collapsed, BeforeCollapse, AfterCollapse
7. セルのマージ
AllowMerging
8. データ連結
DataSource, DataMember, AfterDataRefresh, AutoResize, GridError
9. グリッドの保存、ロード、印刷
LoadGrid, SaveGrid, LoadExcel, SaveExcel, ClipSeparators, PrintGrid
10. ドラッグ&ドロップ
DragMode, DropMode, BeforeMouseDown
11. フィルタリング
155
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
データ連結
データ連結のプロセスによって、1人または複数のデータユーザーが単一のデータプロバイダに同時接続することが可能にな
ります。データ連結したグリッド上でカーソルを動かすと、同じデータソースに接続されている他のコントロールも変更されて新
しいカレントレコードを反映します。データ連結したグリッドの値を編集すると、同じデータソースに接続されている他のコント
ロールも変更されて新しい値を反映します。
C1FlexGridは、ADO.NET データソースオブジェクト(DataTable、
、DataView、
、DataSet、
、DataViewManagerなど)へのデー
タ連結をサポートします。
グリッドをデータソースに連結するには、データソースオブジェクトをグリッドの DataSource プロパティに設定します。データ
ソースオブジェクトが複数のテーブルを持っている場合は、使用テーブルを指定する文字列を DataMember プロパティに設
定する必要があります。
あるいは、SetDataBinding メソッドを1回呼び出せば両方のプロパティを同時に設定することもできます。
新しいデータソースをグリッドに割り当てると、グリッドは自動的にその列を更新してデータソース内で使用可能な列に連結し
ます。次に、移動、表示/非表示、削除などの各操作を行って列をカスタマイズできます。また、Width、EditMask、Format
などの各列プロパティを設定することもできます。
注意:
注意:データソースへの連結後にグリッド列を並べ替える例については、製品付属の「ColumnOrder サンプル」を参照
してください。
データソースオブジェクトの作成の詳細については、.NET Framework のマニュアルを参照してください。
データソースへの連結
コード行を記述しなくても、Visual Studio のデータソース構成ウィザード
データソース構成ウィザード を使用すると C1FlexGrid をデータソースに簡単に連
データソースに簡単に連
結できます。ウィザードにアクセスする方法には2つあり、プロパティウィンドウの DataSource プロパティを使用する
か、C1FlexGrid タスク メニューの[データソースの選択]ボックスを使用します。C1FlexGrid タスク
タスクメニューの詳細について
は、「C1FlexGrid タスク」を参照してください。
プロパティウィンドウの DataSource プロパティの横のドロップダウン矢印、またはC1FlexGrid タスク
タスクメニューの[データソース
データソース
の選択
の選択]ボックスをクリックすると、使用可能なデータソースのリストから選択したりプロジェクトにデータソースを追加したりでき
ます。プロジェクトにデータソースを追加するには、〈プロジェクトにデータソースを追加
プロジェクトにデータソースを追加〉をクリックし、[データソース構成ウィ
データソース構成ウィ
ザード
ザード]を開きます。
156
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
データソース構成ウィザード
データソース構成ウィザードでは、手順に従ってデータソースの追加を体験します。[データソースの種類を選択
データソースの種類を選択]ページでは、
情報の収集元となるアプリケーションの種類を選択できます。デフォルト選択は[データベース
データベース]です。
157
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
[データ接続の選択]ページで、データベースの場所を指定できます。まだデータベースに接続していない場合、〈新しい接続
新しい接続〉
ボタンをクリックして新しい接続を指定できます。〈新しい接続
新しい接続〉ボタンをクリックすると、[接続の追加
接続の追加]ダイアログボックスが開
きます。ここで、データベースの場所を参照して接続をテストできます。
158
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
このウィザードは、[接続文字列をアプリケーション構成ファイルに保存する
接続文字列をアプリケーション構成ファイルに保存する]ページで、接続を保存して名前を付けます。この
ページで、名前を指定するか、ウィザードで提供されるデフォルトを使用できます。
159
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
[データベースオブジェクトの選択
データベースオブジェクトの選択]ページで、データセットに含めるテーブルとフィールドを指定できます。また、データセットの
名前を提供するか、ウィザードで提供されるデフォルトを使用することもできます。
160
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ウィザードは、DataSet、BindingSource、TableAdapter を作成し、それらをプロジェクトに追加します。フォームをダブルクリッ
クすると、Form_Load イベントにデータベースを記述するコードが自動的に生成されていることもわかります。
データの取得と設定
C1FlexGrid は、連結モードと非連結モードのどちらの方法も使用できます。連結モードでは、グリッドはデータソースに接続さ
れ、グリッドに表示されるすべてのデータはデータソースから取得します。このモードでは、グリッド上のデータを変更すると元
のデータソースのデータも変更されます。非連結モードでは、グリッドはグリッド独自のデータソースを管理します。
連結モードと非連結モードのどちらの場合も、C1FlexGrid 内のデータに最も簡単にアクセスするために、Row と Columnの
各インデクサを使用します。このインデクサで、取得または設定対象のデータが格納されている行または列内のセルを指定で
きます。たとえば、次のサンプルコードは、グリッドの2行目のデータを選択します。
Visual Basic コードの書き方
Visual Basic
flex.Rows(2).Selected = True
C# コードの書き方
161
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
flex.Rows[2].Selected = true;
連結モードと非連結モードのどちらの場合も、C1FlexGrid のデータに最も簡単にアクセスするには、 Item プロパティを使用
します。このプロパティは行および列インデックスを取り込み、セルに格納されているデータを取得または設定するインデクサ
として使用できます(列名をインデックスとして使用することもできます)。たとえば、次のサンプルコードは、グリッドの最初の列
に行番号を格納します。
Visual Basic コードの書き方
Visual Basic
For r As Integer= flex.Rows.Fixed To
flex.Rows.Count - 1
flex(r, 0) = r
Next
C# コードの書き方
C#
for (int r = flex.Rows.Fixed; r <= flex.Rows.Count
r++)
{
flex[r, 0] = r;
}
値をセルに格納すると、グリッドはその値を列に指定されている DataType に変換しようとします。変換できない場合、グリッド
は GridError イベントを発生させてセルを変更しません。SetData メソッドを使用して coerce 引数を False に設定すると、こ
の動作を変更できます。
インデックスを使用してデータを取得するとき、グリッドはセルに格納されている実データを返します。書式付きのデータ(グリッ
ドがユーザーが見えるように表示しているデータ)を含む文字列を取得するには、GetDataDisplay メソッドを使用します。
また、Clip プロパティを使用して、セル範囲の内容を設定または取得することもできます。このプロパティは特に、クリップボー
ドやドラッグ&ドロップ操作を処理する場合に便利です。デフォルトでは Clip プロパティは、セル間をタブ文字(Chr(9))で区
切った文字列を返し、行と行の間には復帰文字(Chr(13))を返します。別の区切り文字を使用するには、ClipSeparatorsプロ
パティを変更します。
CellRange オブジェクトでは、任意のセル範囲の内容を設定したり取得することができます。
162
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
チュートリアル
以下の各チュートリアルでは、C1FlexGrid コントロールのいくつかの主要機能を説明します。チュートリアルごとに、いくつか
の簡単なプロジェクトの作成を通して各手順を詳しく説明します。また、製品には、より複雑なサンプルプログラムが収録され
ており、参考として使用できます。
各チュートリアルの内容は次のとおりです。
チュートリアル
説明
Edit チュートリアル
基本的なデータ入力グリッドからスタートし、このチュートリアルでは、データの書式設定、チェック
ボックス、ドロップダウンリスト、入力マスク、データの正当性検査、およびクリップボードへの対応
を実装します。
Outline チュートリアル
C1FlexGrid をアウトライナとして使用し、構造化(階層)データを表示します。
Data Analysis チュート
リアル
さまざまな製品、地域、販売員の売上データを含むグリッドからスタートし、このチュートリアルでは
動的なレイアウト(列の順序)、自動ソート、セルマージ、自動小計行、アウトラインを実装します。
Edit チュートリアル
このチュートリアルでは、基本的なデータ入力グリッドから始め、次のような機能を追加します。
1.
2.
3.
4.
5.
6.
データの書式設定
チェックボックス
ドロップダウンリスト
複雑なデータの正当性検査
クリップボードへの対応
カスタムエディタ
これらの機能を追加した最終的なアプリケーションの外観は次のようになります。
手順
手順1: コントロールの作成
新規にプロジェクトを作成します。ツールボックスの C1FlexGrid アイコンをクリックしてからフォーム上をクリックし、オブジェク
トが適切なサイズになるまで C1FlexGrid コントロールをドラッグしてフォームに追加してください。
ツールボックスに C1FlexGrid コントロールが見つからない場合は、「コンポーネントをプロジェクトに組み込む方法」を参考に
してください。
1. Visual Studio のプロパティウィンドウを使用し、C1FlexGrid コントロールのプロパティを下記のように設定します。
163
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
プロパティ
設定
(Name)
fg
Dock
Fill
Cols.Count
5
Cols.Fixed
0
2. フォームのキャプション部分をダブルクリックし、コードウィンドウを開きます。ファイルの一番上に、次のステートメントを
追加します。
Visual Basic コードの書き方
Visual Basic
Imports C1.Win.C1FlexGrid
C# コードの書き方
C#
using C1.Win.C1FlexGrid;
これによって、C1FlexGrid アセンブリで定義されているオブジェクトを、名前空間の一部だけを使ってプロジェクト内で
参照でき、入力の手間を省くことができます。
3. [Column タスク
タスク]メニューまたは[FlexGrid 列エディタ
列エディタ]からデザイナを使用するか、コードによって以下のコードを入
力(またはコピー
またはコピー)し、列を設定します。
デザイナの場合
グリッドの1番目の列を選択します。列の[Column タスク
タスク]メニューが開きます。
[列キャプション]と[データフィールド]の各ボックスに「製品」と入力します。
残りの列の[列キャプション
列キャプション]と[データフィールド
データフィールド]の各ボックスを以下のように設定します。
Column1
Column
地域
列キャプション
データフィール
ド
地域
Column 2
Column
販売員
列キャプション
データフィール
ド
販売員
Column 3
Column
売上
列キャプション
データフィール
ド
164
売上
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Column1
Column 4
Column
ボーナス
列キャプション
データフィール
ド
ボーナス
また、列は、以下のように[FlexGrid 列エディタ
列エディタ]から設定することもできます。
[C1FlexGrid タスク
タスク]メニューの〈列エディタ
列エディタ〉をクリックし、[FlexGrid 列エディタ
列エディタ]を開きます。[FlexGrid 列エディタ
列エディタ]へ
のアクセス方法の詳細については、18:28 2012/12/17列エディタにアクセス を参照してください。
右ペインで、列0を選択します。
左ペインで、Caption と Name の各プロパティを「製品
製品」に設定します。
残りの列の Caption と Name の各プロパティを以下のように設定します。
Column 1
Name
地域
Caption
地域
Column 2
Name
販売員
Caption
販売員
Column 3
Name
売上
Caption
売上
Column 4
Name
165
ボーナス
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Column 1
Caption
ボーナス
設定が終わったら〈OK〉をクリックしてエディタを閉じます。
コードの場合
Form_Load イベントに次のコードを追加します。
Visual Basic コードの書き方
Visual Basic
' 列を設定します。
Dim cols As String = "製品|地域|販売員|売上
Dim colNames As String() = cols.Split("|")
Dim i%For i = 0 To fg.Cols.Count - 1
fg(0, i) = colNames(i)
fg.Cols(i).Name = colNames(i)Next
C# コードの書き方
C#
// 列を設定します。
string cols = "Product|Region|Salesperson|Sales|Bonus";
string[] colNames = cols.Split(new char[] { '|' });
for (int i = 0; i <= this.fg.Cols.Count - 1; i++)
{
fg[0, i] = colNames[i];
fg.Cols[i].Name = colNames[i];
}
プログラムの実行と検証:
第1段階はこれで完了です。[F5]キーを押してプロジェクトを実行すると、コントロールにデータを入力できます。直接文字を入
力することも、[F2]キーまたは[Space]キーを押して既存の項目を修正することもできます。
手順
手順2: 列タイプとデータの書式設定
166
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
数値やデータ値をグリッドに表示するときは通常、それらの値を一定の書式にしたがって整然と表示する必要がありま
す。C1FlexGrid コントロールでは、各列の DataType および Format の各プロパティを指定することでこれらを実現できま
す。これらのプロパティは、デザイナでもコードでも設定できます。
デザイナの場合
1.
2.
3.
4.
グリッドの「売上」列を選択します。「売上」列の[Column タスク
タスク]メニューが開きます。
[データ型
データ型]ボックスを Decimal に設定します。
[書式設定
書式設定]ボックスの〈...〉ボタンをクリックし、[書式文字列
書式文字列]ダイアログボックスを開きます。
[形式の種類
形式の種類]で通貨を選択し、[小数点以下表示桁数
小数点以下表示桁数] を 0 にします。
5. 〈OK〉をクリックし、[書式文字列
書式文字列]ダイアログを閉じます。
6. グリッドの「ボーナス」列を選択します。「ボーナス」列の[Column タスク
タスク]メニューが開きます。
7. [データ型
データ型]ボックスを Boolean に設定します。
また、DataType と Format の各プロパティは、以下のように[FlexGrid 列エディタ
列エディタ]から設定することもできます。
1. [C1FlexGrid タスク
タスク]メニューの〈列エディタ
列エディタ〉を選択し、[FlexGrid 列エディタ
列エディタ]を開きます。[FlexGrid 列エディタ
列エディタ]への
アクセス方法の詳細については、列エディタ を参照してください。
2. 右ペインの「売上」列を選択します。
3. DataType プロパティを Decimal に設定します。
4. Format プロパティの横の〈...〉ボタンをクリックします。[書式文字列
書式文字列]ダイアログボックスが開きます。
167
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
5.
6.
7.
8.
[形式の種類]で通貨を選択し、[小数点以下表示桁数
小数点以下表示桁数] を 0 にします。
〈OK〉をクリックし、[書式文字列
書式文字列]ダイアログを閉じます。
右ペインの「ボーナス」列を選択します。
DataType プロパティを Boolean に設定します。
9. 〈OK〉をクリックし、エディタを閉じます。
コードの場合
列の DataType と Format を指定するには、Edit チュートリアルの 手順1:コントロールの作成 で追加されたコードの後ろ
に、以下のコードを追加します。
168
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' 列のDataTypeとFormatプロパティを指定します。
Dim c As Column = fg.Cols("売上")
c.DataType = GetType(Decimal)
c.Format = "c"' << currency(通貨)
c = fg.Cols("ボーナス")
c.DataType = GetType(Boolean)
c.ImageAlign = ImageAlignEnum.CenterCenter
C# コードの書き方
C#
// 列のDataTypeとFormatプロパティを指定します。
Column c = fg.Cols["売上"];
c.DataType = typeof(Decimal);
c.Format = "c"; // << currency(通貨)
c = fg.Cols["ボーナス"];
c.DataType = typeof(bool);
c.ImageAlign = ImageAlignEnum.CenterCenter;
プログラムの実行と検証:
追加したコードは、「売上」列に通貨型の値の格納と表示、「ボーナス」列にブール値が入力できるように書式設定します。
この段階でプロジェクトを実行すると、グリッドが「売上」列で数値以外の入力を受け付けないことがわかります。「ボーナス」列
は、チェックボックスで値を表示し、マウスまたはキーボードでON/OFFを切り替えることができます。これは、ブール値の列
のデフォルトの動作です。
注意:
注意:Format プロパティは、データには決して影響せず、表示方法に影響するだけであることに注意してください。
手順
手順3: ドロップダウンリスト
データの入力は、冗長で誤りの生じやすい操作です。その点ドロップダウンリストを使うと、入力は最小限で済み、間違いの生
じる可能性も減らすことができます。さらにデータの整合性も増します。
169
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
説明をわかりやすくするために、このサンプルプロジェクトでは3つの製品(テレビ、冷蔵庫、洗濯機)、4つの地区(北、南、西、
東)、3人の常勤販売員(鈴木、佐藤、田中)の情報だけを扱うことにします。
C1FlexGrid 内で、これらのリストをドロップダウンとして使用するには、リストごとに各項目を含む文字列(パイプ文字(|)で区
切る)を作成し、それらを各列の ComboList に設定するだけです。このプロパティは、デザイナでもコードでも設定できます。
デザイナの場合
1. 「製品」列を選択します。「製品」列の[Column タスク
タスク]メニューが開きます。
2. [コンボリスト
ンボリスト]ボックスの〈...〉ボタンをクリックし、[コンボリスト
コンボリスト]ダイアログボックスを開きます。
3. 以下のように、テレビ
テレビ、冷蔵庫
冷蔵庫、洗濯機
洗濯機と入力します。
4.
5.
6.
7.
〈OK〉をクリックし、[コンボリスト
コンボリスト]ダイアログを閉じます。
「地域」列を選択します。
[コンボリスト
コンボリスト]ボックスの〈...〉ボタンをクリックします。
以下のように、北、南、東、西
北、南、東、西と入力します。
8. 〈OK〉をクリックします。
9. 「販売員」列を選択します。
170
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
10. [コンボリスト
コンボリスト]ボックスの〈...〉ボタンをクリックします。
11. 以下のように、鈴木、田中、佐藤
鈴木、田中、佐藤と入力し、[ドロップダウンコンボ
ドロップダウンコンボ]オプションを選択します。
12. 〈OK〉をクリックします。
また、ComboList プロパティは、以下のように[FlexGrid 列エディタ
列エディタ]を使用して設定することもできます。
1. [C1FlexGrid タスク
タスク]メニューの〈列エディタ
列エディタ〉を選択し、[FlexGrid 列エディタ
列エディタ]を開きます。[FlexGrid 列エディタ]への
アクセス方法の詳細については、列エディタ を参照してください。
2. 右ペインの「製品」列を選択します。
3. 左ペインで、ComboList プロパティを テレビ|冷蔵庫
蔵庫|洗濯機
洗濯機に設定します。
4.
5.
6.
7.
171
右ペインの「地域」列を選択します。
左ペインで、ComboList プロパティを北
北|南
南|東
東|西
西に設定します。
右ペインの「販売員」列を選択します。
左ペインで、ComboList プロパティを |鈴木
鈴木|佐藤
佐藤|田中
田中に設定します。
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
8. 〈OK〉をクリックし、エディタを閉じます。
コードの場合
コンボリストを追加するには、手順2:列タイプとデータの書式設定 で追加されたコードの後ろに、以下のコードを追加します。
Visual Basic コードの書き方
Visual Basic
' ドロップダウンリストを設定します。
fg.Cols("製品").ComboList = "テレビ|冷蔵庫|洗濯機"
fg.Cols("地域").ComboList = "北|南|東|西"
fg.Cols("販売員").ComboList = "|鈴木|佐藤|田中"
C# コードの書き
C#
// ドロップダウンリストを設定します。
fg.Cols["製品"].ComboList = "テレビ|冷蔵庫|洗濯機";
fg.Cols["地域"].ComboList = "北|南|東|西";
fg.Cols["販売員"].ComboList = "|鈴木|佐藤|田中";
プログラムの実行と検証:
最後の ComboList 文字列だけがパイプで始まっていることに注目してください。これによって、ユーザーはリストにない名前
を入力することができます。別の言い方をすれば、単純なドロップダウンリストと異なり、これらの値はドロップダウンコンボボッ
クスを使って編集できるということです。
[F5]キーを押してプロジェクトを再実行し、カーソルを動かしてみてください。コンボリストが設定されているセル上にカーソル
を置くと、ドロップダウンボタンが現れます。そのボタンをクリックするとリストが表示され、項目の頭文字を入力するとリスト内
でその項目がハイライト表示されます。
手順
手順4: データの正当性検査
172
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
データ型をグリッド列に設定すると、グリッドは確実に適切な型のデータだけをその列に格納します。これによってエラーの発
生を防げますが、入力したデータが正しいことを確実にするために、さらに厳密な正当性検査が必要になる場合がよくありま
す。その場合、ValidateEdit を使用する必要があります。
たとえば、独占禁止法によって北地区でのテレビの販売が禁止されている場合について考えてください。データ入力ミスと費
用のかさむ訴訟を避けるために、ユーザーがこの組み合わせをコントロールに入力できないようにする必要があります。
次のサンプルコードは、セルの編集のたびにデータを調べて、無効な入力がないようにします。
Visual Basic コードの書き方
Visual Basic
Private Sub fg_ValidateEdit(ByVal sender As Object,
ByVal e As C1FlexGrid.ValidateEditEventArgs) Handles
fg.ValidateEdit
Dim rgn As String = ""
Dim prd As String = ""
' 正当性検査に必要なデータを取得します。
Select Case e.Col
Case 0
prd = fg.Editor.Text
rgn = fg(e.Row, "地域")
Case 1
prd = fg(e.Row, "製品")
rgn = fg.Editor.Text
End Select
' 北地区でのテレビの販売は行えません。
If prd = "テレビ" And rgn = "北" Then
MsgBox("警告: 規制 #12333AS/SDA-23 " & _
prd & "を" & rgn & "地区で販売できません。")
e.Cancel = True
End If
End Sub
C# コードの書き
C#
private void fg_ValidateEdit( object sender,
C1.Win.C1FlexGrid.ValidateEditEventArgs e)
{
object rgn = null;
object prd = null;
// 正当性検査に必要なデータを取得します。
switch (e.Col)
{
case 0:
prd = fg.Editor.Text;
rgn = fg.GetData(e.Row, "地域");
break;
case 1:
prd = fg.GetData(e.Row, "製品");
rgn = fg.Editor.Text;
173
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
break;
}
// 北地区でのテレビの販売は行えません。
If(((string) prd == "テレビ") && ((string)rgn == "北" ))
{
MessageBox.Show("警告: 規制 #12333AS/SDA-23 " +
prd + "を" + rgn + "地区で販売できません。");
e.Cancel = true;
}
}
プログラムの実行と検証:
このルーチンはまず、正当性検査をする必要がある入力データを集めます。検査する値は、Editor.Text プロパティを使用し
て取得することに注目してください。この処理が必要なのは、各編集値がまだコントロールに反映されていないためです。検査
が失敗した場合、関数は警告を表示して Cancel 引数を True に設定します。これによって、編集値が取り消されてセルは編
集モードに戻り、ユーザーは入力し直しことができます。
[F5]キーを押して再びプロジェクトを実行して、無効な値を入力してみてください。コントロールがそれらの値を受け付けないの
がわかります。
手順
手順5: クリップボードへの対応
Windows のクリップボードは、アプリケーション間で情報のやりとりをするときに非常に便利なデバイスです。
FlexGrid プロジェクト
プロジェクトをクリップボード対応にするのは非常に簡単です。AutoClipboard プロパティを True に設定するだけ
で、グリッドはクリップボードに関連する標準のキーボードコマンド([Ctrl+X]または[Shift+Delete]で切り取り、[Ctrl+C]また
は[Ctrl+Insert]でコピー、[Ctrl+V]または[Sift+Insert]で貼り付け)のすべてを自動的に処理します。
デザイナの場合
プロパティウィンドウで AutoClipboard プロパティを探し、それを True に設定します。
174
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
コードの場合
手順3:ドロップダウンリスト で追加されたコードの後ろに、以下のコードを追加します。
Visual Basic コードの書き方
Visual Basic
fg.AutoClipboard = True
C# コードの書き
C#
fg.AutoClipboard = true;
クリップボードの操作に非常に関連の深い、Windows の優れたもう1つの機能といえば OLE ドラッグ&ドロップで
す。C1FlexGrid コントロールは、この機能を組み込むために DragMode と DropMode の各プロパティを提供します。この
2つのプロパティを「自動」に設定するだけで、ドラッグ&ドロップによって、Microsoft Excel などの他のアプリケーションにデー
タを移動したり、Excel スプレッドシートから C1FlexGrid コントロールにデータを移動したりできます。
デザイナの場合
DragMode と DropMode の各プロパティを探し、どちらも Automatic に設定します。
コードの場合
AutoClipboard プロパティを設定したコードの後ろに、以下のコードを追加します。
Visual Basic コードの書き方
Visual Basic
fg.DragMode = DragModeEnum.Automatic
fg.DropMode = DropModeEnum.Automatic
C# コードの書き
C#
fg.DragMode = DragModeEnum.Automatic;
fg.DropMode = DropModeEnum.Automatic;
プログラムの実行と検証:
175
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
[F5]キーを押して再度プロジェクトを実行し、適当なデータのコピーや貼り付けを試してみてください。不正なデータでも貼り付
けが可能なことがわかります。これは、貼り付けコードがデータの正当性の検査を行っていないためです。正当性検査を行う
には、独自のコードを追加する必要があります。
手順
手順6: カスタムエディタの組み込み
C1FlexGrid は、テキスト入力、マスクテキスト、リストからの選択、チェックボックスなどに使用するためのパワフルな組み込
みエディタを提供します。しかし、カスタムエディタ、自分で記述したコントロールを代わりに使用したい場合があります。
FlexGrid では簡単にカスタムエディタをプラグインできます。
カスタムエディタをサンプルコードの「売上」列に付加するには、まず NumericUpDown コントロールをフォームに追加しま
す。
1. .NETプロパティウィンドウを使って次の各プロパティを指定した新しいコントロールを設定します。
プロパティ
設定
BorderStyle
None
DecimalPlaces
2
Maximum
5000000
ThousandsSeparator True
Visible
False
2. [C1FlexGrid タスク
タスク]メニューから〈列エディタ
列エディタ〉を選択し、グリッドの列エディタを表示させます。
3. 3番目の列(売上の数値を格納)を選択し、次のように Editor プロパティを NumericUpDown1 に設定します.
プログラムの実行と検証:
この段階で、プロジェクトを実行して「売上」列の適当な値を編集してみてください。グリッドは、組み込みエディタの代わりに
NumericUpDown コントロールを使用していることがわかります。コントロールは正しく配置、初期化、管理されています。
176
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
フォーカスを別のセルに移動すると、その値がグリッドに格納されます。
ただし、カスタムエディタは組み込みエディタとまったく同じようには動作しません。たとえば、次のようになります。
1. 数値を入力して編集を開始した場合、古い値はクリアされません。
2. エディタのサイズは厳密に正確ではありません(小さめになります)。
3. [Enter]キーを押して編集を終了すると、警告音が鳴ります。
これらの問題は2つの方法で解決できます。1つの方法では、エディタのイベントを使用しますが、この場合、他のプロジェクト
でそのコントロールを再使用することは難しくなります。もう1つの方法では、派生クラスを作成してIC1EmbeddedEditor イン
タフェースに適切なメソッドを実装します。
Visual Basic コードの書き方
Visual Basic
Dim myup As New MyUpDown
fg.Cols(3).Editor = myup
Public Class MyUpDown
Inherits NumericUpDown
' 初期値を設定します。
Public Sub C1EditorInitialize(ByVal value As Object, _
ByVal editorAttributes As IDictionary)
value = Convert.ChangeType(value, GetType(Decimal))
' 入力全体を選択します。
MyBase.Select(0, Int32.MaxValue)
End Sub
' FontHeightを設定し、コントロールに長方形の高さを維持させます。
Public Sub C1EditorUpdateBounds(ByVal rc As Rectangle)
MyBase.FontHeight = rc.Height
Bounds = rc
End Sub
' ユーザーが入力したときに警告音を鳴らさないようにします。
Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
If (keyData = Keys.Enter) Then
Parent.Focus()
If (Parent.Focused) Then SendKeys.Send("{Down}")
Return True
End If
Return MyBase.ProcessDialogKey(keyData)
177
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
End Function
End Class
C# コードの書き
C#
MyUpDown myup = new MyUpDown();
fg.Cols[3].Editor = myup;
internal class MyUpDown : NumericUpDown
{
// 初期値を設定します。
public void C1EditorInitialize(object value, IDictionary editorAttributes)
{
if (value != null)
{
Value = (decimal)Convert.ChangeType(value, typeof(decimal));
}
// 入力全体を選択します。
Select(0, int.MaxValue);
}
// FontHeightを設定して、コントロールに長方形の高さを維持させます。
public void C1EditorUpdateBounds(Rectangle rc)
{
base.FontHeight = rc.Height;
Bounds = rc;
}
// ユーザーが入力したときに警告音を鳴らさないようにします。
override protected bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
{
Parent.Focus();
if (Parent.Focused) SendKeys.Send
("{Down}");
return true;
}
return base.ProcessDialogKey(keyData);
}
}
たとえば、次のコードは3つのメソッドを実装します。
C1EditorInitialize を 呼び 出して エディタを初期化します。初期値 が 設定され入力全体が選択されます。これによっ
て、最初の問題が解決します。入力全体が選択されているため、この段階で最初の文字を入力すると現在の内容が希
望どおりに置き換えられます。
C1EditorUpdateBounds を 呼び 出して、編集対象のセル上にエディタを配置します。ただし、NumericUpDown コ
ントロールの高さはフォントサイズに基づいて自動的に設定されます(このためセルには低めになります)。コードは、エ
ディタの FontHeight プロパティを設定し、エディタをセル上に正しく配置します。
ProcessDialogKey メソッドを変更して、ユーザーが[Enter]キーを押したとき警告音が鳴らないようにします。
Outline チュートリアル
178
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Outline チュートリアルは、チュートリアルの「Tut_XMLTree」に収録されています。XML文書は、プロジェクトフォルダ内の
NWindEmbedPics.xml を使用します。
このチュートリアルでは、C1FlexGrid をアウトライナとして使用し構造化(階層)データを表示する方法を示します。アウトライ
ナとして使用する場合、C1FlexGrid コントロールは Tree コントロールと同じように動作してノードを表示します。ノードは、縮
小または展開して従属データを含む分枝を表示できます。
サンプルでは、XML 文書をグリッドにロードしてツリー表示します。これらの機能を追加した最終的なアプリケーションの外観
は次のようになります。
手順
手順1: コントロールの作成
まず新規にプロジェクトを作成し、次の2つのコントロールを追加します。
コマンドボタンをフォームの一番上に追加
C1FlexGrid コントロールをコマンドボタンの下に追加
ツールボックスに C1FlexGrid コントロールが見つからない場合は、「コンポーネントをプロジェクトに組み込む方法」を参考にしてくださ
い。
1. Visual Studio のプロパティウィンドウを使用し、各プロパティを下記のように設定します。
コマンドボタン
プロパティ
設定
Dock
Top
Text
"XMLファイルを
開く...
C1FlexGrid
プロパティ
設定
Name
fg
Dock
Fill
2. フォームのキャプション部分をダブルクリックし、コードウィンドウを開きます。ファイルの一番上に、次のステートメントを追加しま
す。
Visual Basic コードの書き方
Visual Basic
Imports C1.Win.C1FlexGrid
179
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き
C#
using C1.Win.C1FlexGrid;
これによって、C1FlexGrid アセンブリで定義されているオブジェクトを、名前空間の一部だけを使ってプロジェクト内で参照でき、
入力の手間を省くことができます。
3. プロパティウィンドウやエディタのデザイナを使用するか、以下のコードを入力(コピー)し、グリッドを設定します。
デザイナの場合
プロパティウィンドウで、C1FlexGrid コントロールの以下のプロパティを設定します。
プロパテ
設定
Cols.Count
2
Cols.Fixed
0
ExtendLastCol
True
Rows.Count
1
Tree.Column
0
Tree.Style
SimpleLeaf
グリッドのスタイルを設定します。
[C1FlexGrid タスク
タスク]メニューの〈スタイルエディタ
スタイルエディタ〉を選択し、[FlexGrid スタイルエディタ
スタイルエディタ]を開きます。[FlexGrid スタイル
エディタ
エディタ]へのアクセス方法の詳細については、スタイルエディタ を参照してください。
[組み込みスタイル
組み込みスタイル]のリストで Normal を選択します。
Border.Style プロパティを None、TextAlign プロパティを LeftCenter、および WordWrap プロパティを False に設定
します。
180
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
〈追加
追加〉ボタンをクリックします。
CustomStyle1 の名前を Data に変更します。
BackColor プロパティを Control に設定します。
〈OK〉〉をクリックし、エディタを閉じます。
グリッドの列を設定します。
グリッドの列0を選択します。列0の[Column タスク
タスク]メニューが開きます。
[列キャプション
列キャプション]を「要素
要素」に設定します。
[編集を有効にする
編集を有効にする]チェックボックスを OFF にします。
181
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
列1を選択します。
[列キャプション
列キャプション]を「テキスト
テキスト」に設定します。
また、列は以下のように[FlexGrid 列エディタ
列エディタ]から設定することもできます。
[C1FlexGrid タスク]メニューの〈列エディタ
列エディタ〉を選択し、[FlexGrid 列エディタ
列エディタ]を開きます。[FlexGrid 列エディタ
列エディタ]へのアク
セス方法の詳細については、列エディタ を参照してください。
右ペインの列0を選択します。
左ペインで、AllowEditing プロパティを False に設定し、Caption プロパティを「要素
要素」に設定します。
182
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
コードの場合
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
' グリッドを初期化します。
fg.Rows.Count = 1
fg.Cols.Count = 2
fg.Cols.Fixed = 0
fg.ExtendLastCol = True
fg(0, 0) = "要素"
fg(0, 1) = "テキスト"
' アウトラインツリーを初期化します。
fg.Tree.Column = 0
fg.Tree.Style = TreeStyleFlags.SimpleLeaf
fg.Cols(0).AllowEditing = False
' スタイルを初期化します。
fg.Styles.Normal.Border.Style = BorderStyleEnum.None
fg.Styles.Normal.TextAlign = TextAlignEnum.LeftCenter
fg.Styles.Normal.WordWrap = False
Dim cs As CellStyle = fg.Styles.Add("Data")
cs.BackColor = SystemColors.Control
End Sub
C# コードの書き
C#
private void Form1_Load(object sender, System.EventArgs e)
{
// グリッドを初期化します。
fg.Rows.Count = 1;
fg.Cols.Count = 2;
fg.Cols.Fixed = 0;
fg.ExtendLastCol = true;
fg[0, 0] = "要素";
fg[0, 1] = "テキスト";
// アウトラインツリーを初期化します。
fg.Tree.Column = 0;
fg.Tree.Style = TreeStyleFlags.SimpleLeaf;
fg.Cols[0].AllowEditing = false;
// スタイルを初期化します。
fg.Styles.Normal.Border.Style = BorderStyleEnum.None;
fg.Styles.Normal.TextAlign = TextAlignEnum.LeftCenter;
fg.Styles.Normal.WordWrap = false;
CellStyle cs = fg.Styles.Add("Data");
cs.BackColor = SystemColors.Control;
}
プログラムの実行と検証:
183
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
コードはまず、グリッドのレイアウトと列見出しテキストを設定します。
次に、 Treeプロパティを使用してアウトラインツリーを初期化し、最初の列のAllowEditing プロパティを False に設定することによって
XML ノードの編集ができないようにします。ユーザーが、2番目の列データを編集できることに注目してください。2番目の列には各 XML
ノードのデータが含まれています。
これでコントロールが用意できました。これにコードを追加していきます。
手順
手順2: データの読み込みとアウトラインの構築
データを読み込んで、アウトラインを構築するには、Button1_Click イベントにコードを追加して GetXMLData ルーチンを追
加します。
1. コマンドボタンをダブルクリックして、次のコードを Button1_Click イベントに追加します。
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
' ファイル名を取得します。
Dim fo As OpenFileDialog = New OpenFileDialog()
fo.DefaultExt = "xml"
fo.Filter = "XML Files (*.xml)|*.xml"
If fo.ShowDialog() <> Windows.Forms.DialogResult.OK Then Exit Sub
' XMLファイルをロードします。
Dim xdoc As Xml.XmlDocument = New Xml.XmlDocument()
xdoc.Load(fo.FileName)
' スピードを向上させるために再描画しないようにします。
fg.BeginUpdate()
' グリッドにデータを格納します。
fg.Rows.Count = 1
GetXMLData(xdoc.ChildNodes(1), 0)
' ツリーを表示する列の幅を自動的に調整します。
fg.AutoSizeCol(0)
' レベル0、1、2を展開します。
fg.Tree.Show(2)
' 再描画を行うようにします。
184
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
fg.EndUpdate()
End Sub
C# コードの書き
C#
private void Button1_Click(object sender, System.EventArgs e)
{
// ファイル名を取得します。
OpenFileDialog fo = new OpenFileDialog();
fo.DefaultExt = "xml";
fo.Filter = "XML Files (*.xml)|*.xml";
if (fo.ShowDialog() != DialogResult.OK)
{
return;
}
// XMLファイルをロードします。
System.Xml.XmlDocument xdoc = new System.Xml.XmlDocument();
xdoc.Load(fo.FileName);
// スピードを向上させるために再描画しないようにします。
fg.BeginUpdate();
// グリッドにデータを格納します。
fg.Rows.Count = 1;
GetXMLData(xdoc.ChildNodes[1], 0);
// ツリーを表示する列の幅を自動的に調整します。
fg.AutoSizeCol(0);
// レベル0、1、2を展開します。
fg.Tree.Show(2);
// 再描画を行うようにします。
fg.EndUpdate();
}
このルーチンはまず、OpenFileDialog を表示させ、ユーザーがXMLファイルを選択してグリッドにロードできるように
します。ファイルが選択されると、ルーチンはそれを XmlDocument オブジェクトにロードし、XmlDocument オブジェ
クトはファイルの内容を解析してメモリに格納します。
その後、グリッドの BeginUpdate メソッド を 呼び出し、コントロールがデータを読み込んでいる間は再描画しないよう
にします。この方法を使用するとパフォーマンスが非常に向上します。したがって、大容量のデータを C1FlexGrid に
追加するときは常にこれを使用してください。
次に、ルーチンは、Count = 1 を設定してすべてのデータをクリアし、GetXMLData ルーチンを呼び出して
XmlDocument オブジェクトの内容をコントロールに読み込みます。GetXMLData ルーチンは、このサンプルの主要
ルーチンで以下に示します。
グリッドにデータを読み込んだ後、AutoSizeCol を使用して最初の列幅を内容に合わせて調整し、Show メソッドでア
ウトラインを展開してレベル0、1、2を表示させます。次に、EndUpdate メソッドを呼び出すと、グリッドは通常どおり再
描画を始めます。
2. このチュートリアルで一番興味深いのが、GetXMLData ルーチンです。このルーチンは、XMLDocument オブジェク
トをトラバースして、アウトラインツリーを構築します。コードは次のとおりです。
Visual Basic コードの書き方
Visual Basic
Private Sub GetXMLData(ByVal node As Xml.XmlNode, ByVal level As Integer)
185
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' コメントノードを無視します。
If node.NodeType = Xml.XmlNodeType.Comment Then
Exit Sub
End If
' このノードのための新しい行を追加します。
Dim row As Integer = fg.Rows.Count
fg.Rows.Add()
' 追加した行にデータを追加します。
fg(row, 0) = node.Name
If node.ChildNodes.Count = 1 Then
fg(row, 1) = node.InnerText
fg.SetCellStyle(row, 1, fg.Styles("Data"))
End If
' ノードが"Name"というサブノードを持つなら、その値を
' ツールチップとして使用するために保存します。
Dim ndName As Xml.XmlNode = node.SelectSingleNode("Name")
If Not (ndName Is Nothing) Then
fg.Rows(row).UserData = ndName.InnerText
End If
' ノードに子ノードがあるなら、それらも取得します。
If node.ChildNodes.Count > 1 Then
' ノードに子ノードがあるなら、それらも取得します。
fg.Rows(row).IsNode = True
fg.Rows(row).Node.Level = level
' 子ノードがある場合、子ノードもグリッドに追加します。
Dim child As Xml.XmlNode
For Each child In node.ChildNodes
GetXMLData(child, level + 1)
Next
End If
End Sub
C# コードの書き
C#
private void GetXMLData(System.Xml.XmlNode node, int level)
{
// コメントノードを無視します。
if (node.NodeType == System.Xml.XmlNodeType.Comment)
{
return;
}
// このノードのための新しい行を追加します。
int row = fg.Rows.Count;
fg.Rows.Add();
// 追加した行にデータを追加します。
fg[row, 0] = node.Name;
if (node.ChildNodes.Count == 1)
{
fg[row, 1] = node.InnerText;
fg.SetCellStyle(row, 1, fg.Styles["Data"]);
}
186
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// ノードが"Name"というサブノードを持つなら、その値を
// ツールチップとして使用するために保存します。
System.Xml.XmlNode ndName = node.SelectSingleNode("Name");
if (ndName != null)
{
fg.Rows[row].UserData = ndName.InnerText;
}
// ノードに子ノードがあるなら、それらも取得します。
if (node.ChildNodes.Count > 1)
{
// ノードに子ノードがあるなら、それらも取得します。
fg.Rows[row].IsNode = true;
fg.Rows[row].Node.Level = level;
// 子ノードがある場合、子ノードもグリッドに追加します。
foreach (System.Xml.XmlNode child in node.ChildNodes)
{
GetXMLData(child, level + 1);
}
}
}
ルーチンはまず、XML コメントノードを無視します。その後、RowCollection.Add メソッドを使用し、新しい行をグリッドに追加
します。次に、ルーチンはノード名を設定します。そして、ノードの子ノードが1つだけであることを確認します。子ノードが1つだ
けの場合、ノードはデータノードとして解釈でき、ノードの InnerText プロパティの値を追加した行の2番目の列にコピーしま
す。また、データノードのセルスタイルを、フォームのロード時に作成したカスタムスタイル"Data"に設定します。次のコードブ
ロックでは、このノードが"Name"というサブノードを持っているかどうかを調べます。持っていれば、"Name"ノードの内容を追
加した行の RowCol.UserData プロパティに設定します。この値は後で、ツールチップの実装に使用され、ノードが縮小されて
いるときでもノード名がユーザーに表示されるようにします。最後に、ノードに子ノードがある場合、GetXMLData ルーチン自
身を呼び出して子ノードもグリッドに追加します。
プログラムの実行と検証:
この段階でプロジェクトを実行すると、すでに XML ファイルのロードや表示を行うことができ、ユーザーがクリックすると縮小や
展開ができることがわかります。次の手順では、いくつか修正を行いアプリケーションを使いやすくします。
手順
手順3: マウスおよびキーボードのカスタム設定
187
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C1FlexGrid コントロールは、ユーザーがノードを展開したり縮小する機能を提供していますが、この動作を拡張し、カスタマイ
ズすることもできます。ツリーのノードが展開したり縮小するたびにBeforeCollapse イベントと AfterCollapseイベントが発生
するため、これに呼応する形でアクションを設定することができます。さらに、Collapsed プロパティを使うと、各ノードの縮小し
た状態をコーディングによって取得および設定できます。
このサンプルでは、DoubleClick イベントと KeyPress イベントをトラップし、ユーザーがダブルクリックするか、[Enter]キーを
押したときにノードを展開または縮小します。コードは次のとおりです。
Visual Basic コードの書き方
Visual Basic
Private Sub fg_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs)
Handles fg.DoubleClick
If fg.MouseCol = 0 Then
ToggleNodeState()
End If
End Sub
Private Sub fg_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles fg.KeyPress
If e.KeyChar = vbCr Then
ToggleNodeState()
End If
End Sub
Private Sub ToggleNodeState()
' ノードが選択されていない場合は、実行しません。
If (fg.Row < 0) Then Exit Sub
' カレント行がノード以外の場合は、処理を行いません。
Dim r As Row = fg.Rows(fg.Row)
If Not r.IsNode Then Exit Sub
' ノードを展開または縮小します。
r.Node.Collapsed = Not r.Node.Collapsed
End Sub
C# コードの書き
C#
private void fg_DoubleClick(object sender, System.EventArgs e)
{
if (fg.MouseCol == 0)
{
ToggleNodeState();
}
}
private void fg_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.KeyChar == (char)13)
{
ToggleNodeState();
}
}
private void ToggleNodeState()
{
// ノードが選択されていない場合は、実行しません。
188
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
if (fg.Row < 0)
{
return;
}
// カレント行がノード以外の場合は、処理を行いません。
Row r = fg.Rows[fg.Row];
if (r.IsNode == false)
{
return;
}
// ノードを展開または縮小します。
r.Node.Collapsed = !(r.Node.Collapsed);
}
プログラムの実行と検証:
イベントハンドラ、ユーザーが最初の列をダブルクリックしたかどうか、あるいは[Enter]キーを押したかどうかを確認
し、ToggleNodeState ルーチンを呼び出します。ToggleNodeState は、カレント行がノード行であることを確認し、ノード行
であれば Collapsed プロパティの値を切り替えます。
手順
手順4: 編集の許可と禁止
最初の列の AllowEditing プロパティを False に設定したことを思い出してください。これによって、ユーザーは最初の列のセ
ルすべてを編集できなくなります。ノード行の2列目もデータを入力できないようにしましょう。これを行うには、次のコードを追
加して BeforeEdit イベントを処理します。
Visual Basic コードの書き方
Visual Basic
Private Sub fg_BeforeEdit(ByVal sender As Object,
ByVal e As RowColEventArgs)
Handles fg.BeforeEdit
' カレント列がノードの場合、編集を行いません。
Dim r As Row = fg.Rows(fg.Row)
If r.IsNode Then e.Cancel = True
End Sub
C# コードの書き
C#
private void fg_BeforeEdit( object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
// カレント列がノードの場合、編集を行いません。
Row r = fg.Rows[fg.Row];
if (r.IsNode == true)
{
e.Cancel = true;
}
}
189
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
手順
手順5: ツールチップの実装
このチュートリアルの最後に、ツールチップをアウトラインに追加します。ツールチップには、前述の GetXMLData ルーチンで
各行の UserData プロパティに格納したテキストを表示します。ユーザーが "Name" ノードの親ノードにマウスを移動すると、
"Name"ノードの内容が表示されます。これは、親ノードが縮小していて"Name"ノードの内容が表示されていないときに便利で
す。
1. ToolTip コントロールをフォームに追加します。
2. 次のコードを追加してグリッドの MouseMove イベントを処理します。
Visual Basic コードの書き方
Visual Basic
Private Sub fg_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs)
Handles fg.MouseMove
' マウスが置かれたセルのツールチップをチェックします。
Dim tip As String = ""
If fg.MouseCol = 0 And fg.MouseRow > 0 Then
tip = fg.Rows(fg.MouseRow).UserData
End If
' 現在のツールチップと異なる場合に新たに設定します。
If tip <> ToolTip1.GetToolTip(fg) Then
ToolTip1.SetToolTip(fg, tip)
End If
End Sub
C# コードの書き方
C#
private void fg_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
// マウスが置かれたセルのツールチップをチェックします。
object tip = null;
if ((fg.MouseCol == 0) && (fg.MouseRow > 0))
{
tip = fg.Rows[fg.MouseRow].UserData;
}
// 現在のツールチップと異なる場合に新たに設定します。
if (tip != (object)toolTip1.GetToolTip(fg))
{
toolTip1.SetToolTip(fg, (string)tip);
}
}
プログラムの実行と検証:
コードはまず、MouseRow と MouseCol の各プロパティを使用し、マウスが置かれたセルをチェックします。ツールチップの
テキストが入った行の最初の列上にマウスが置かれた場合、テキストを取得します。それ以外は、ツールチップのテキストは
「Nothing」に設定されます。
190
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
次に、ルーチンは新しいツールチップと現在のツールチップとを比較し、必要であれば Tooltip コントロールの SetToolTip メ
ソッドを呼び出してテキストを更新します。
これで、チュートリアルを終了します。上記のプロジェクトは多様に拡張できます。たとえば、編集データを XML 文書に保存し
たり、ノードの追加、削除、移動を行ったり、さまざまな種類のデータをいろいろなスタイルで使用できます。
Data Analysis チュートリアル
このチュートリアルでは、C1FlexGrid コントロールで最も便利な機能のいくつかを組み合わせ、データテーブルの動的ビュー
を実現します。このアプリケーションは、Microsoft Visual Studio に付属の NorthWind データベースから、販売売上を含む単
純なデータをグリッドに連結することからスタートし、次の機能を追加します。
動的なレイアウト(列の順序)
自動ソート
セルのマージ
自動小計行
アウトライン
最終的なアプリケーションの外観は次のようになります。ユーザーは、最初の3列をドラッグし、LastName、ShipCountry、
CategoryName ごとにデータをグループ化できます。列をドラッグすると、各合計行が自動的に再計算され、アウトラインツ
リーが再構築されます。
191
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
手順
手順1:コントロールの作成
:コントロールの作成
新規にプロジェクトを作成します。ツールボックスの C1FlexGrid アイコンをクリックしてからフォーム上をクリックし、オブジェクト
が適切なサイズになるまで C1FlexGrid コントロールをドラッグしてフォームに追加します。
Iツールボックスに C1FlexGrid コントロールが見つからない場合は、「コンポーネントをプロジェクトに組み込む方法」を参考に
してください。
1. Visual Studio のプロパティウィンドウを使用し、C1FlexGrid コントロールのプロパティを下記のように設定します。
プロパティ
設定
Name
fg
Dock
Fill
2. フォームのキャプション部分をダブルクリックし、コードウィンドウを開きます。ファイルの一番上に、次のステートメントを
追加します。
Visual Basic コードの書き方
Visual Basic
Imports System.Data.OleDb
Imports System.ComponentModel
Imports C1.Win.C1FlexGrid
C# コードの書き
C#
using System.Data.OleDb;
using System.ComponentModel;
using C1.Win.C1FlexGrid;
これによって、C1FlexGrid および OleDb アセンブリで定義されているオブジェクトを、名前空間の一部だけを使ってプ
192
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ロジェクト内で参照でき、入力の手間を省くことができます。
手順
手順2:グリッドの初期化とデータ表示
:グリッドの初期化とデータ表示
グリッドを設定し、解析する売上データをグリッドに読み込むには、デザイナかコードでレイアウトプロパティとスタイルを設定し
て、GetDataSource メソッドを使用してグリッドにデータを読み込みます。
1. デザイナまたはコードで、グリッドのレイアウトとスタイルを設定します。
デザイナの場合
プロパティウィンドウで、以下のプロパティを設定します。
プロパティ
設定
AllowEditing
False
AllowSorting
None
AllowMerging
Nodes
ExtendLastCol
True
SelectionMode Cell
Tree.Style
Simple
Tree.Column
1
[C1FlexGrid タスク
タスク]メニューの〈列エディタ〉を選択し、[FlexGrid 列エディタ
列エディタ]を開きます。[FlexGrid 列エディ
タ]へのアクセス方法の詳細については、列エディタ を参照してください。
右ペインの列0を選択します。
左ペインで、Width プロパティを 20 に設定します。
〈OK〉をクリックし、列エディタを閉じます。
[C1FlexGrid タスク
タスク]メニューの〈スタイルエディタ
スタイルエディタ〉を選択し、[FlexGrid スタイルエディタ
スタイルエディタ]を開きます。
[FlexGrid スタイルエディタ
スタイルエディタ]へのアクセス方法の詳細については、スタイルエディタ を参照してください。
[組み込みスタイル
組み込みスタイル]のリストから Normal を選択します。
Border.Style プロパティを None に、および Trimming プロパティを EllipsisCharacter に設定します。
193
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
[組み込みスタイル
組み込みスタイル]のリストから Subtotal0 を選択します
BackColor プロパティを Gold、および ForeColor プロパティを Black に設定します。
Subtotal1 と Subtotal2 の各プロパティを以下のように設定します。
Subtotal1
BackColor Khaki
ForeColor Black
Subtotal2
BackColor LightGoldenrodYellow
ForeColor Black
〈OK〉〉をクリックし、スタイルエディタを閉じます。
コードの場合
Form_Load イベントに以下のコードを追加し、グリッドのレイアウトとスタイルを設定します。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' グリッドのレイアウトと動作を設定します。
fg.AllowEditing = False
194
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
fg.AllowSorting = AllowSortingEnum.None
fg.AllowMerging = AllowMergingEnum.Nodes
fg.SelectionMode = SelectionModeEnum.Cell
fg.ExtendLastCol = True
fg.Cols(0).Width = fg.Cols.DefaultSize / 4
fg.Tree.Style = TreeStyleFlags.Simple
fg.Tree.Column = 1
' グリッドのスタイルを設定します。
fg.Styles.Normal.Border.Style = BorderStyleEnum.None
fg.Styles.Normal.Trimming = StringTrimming.EllipsisCharacter
Dim s As CellStyle
s = fg.Styles(CellStyleEnum.Subtotal0)
s.BackColor = Color.Gold
s.ForeColor = Color.Black
s = fg.Styles(CellStyleEnum.Subtotal1)
s.BackColor = Color.Khaki
s.ForeColor = Color.Black
s = fg.Styles(CellStyleEnum.Subtotal2)
s.BackColor = Color.LightGoldenrodYellow
s.ForeColor = Color.Black
End Sub
C# コードの書き
C#
private void Form1_Load(object sender, System.EventArgs e)
{
// グリッドのレイアウトと動作を設定します。
fg.AllowEditing = false;
fg.AllowSorting = AllowSortingEnum.None;
fg.AllowMerging = AllowMergingEnum.Nodes;
fg.SelectionMode = SelectionModeEnum.Cell;
fg.ExtendLastCol = true;
fg.Cols[0].Width = fg.Cols.DefaultSize / 4;
fg.Tree.Style = TreeStyleFlags.Simple;
fg.Tree.Column = 1;
// グリッドのスタイルを設定します。
fg.Styles.Normal.Border.Style = BorderStyleEnum.None;
fg.Styles.Normal.Trimming = StringTrimming.EllipsisCharacter;
CellStyle s;
s = fg.Styles[CellStyleEnum.Subtotal0];
s.BackColor = Color.Gold;
s.ForeColor = Color.Black;
s = fg.Styles[CellStyleEnum.Subtotal1];
s.BackColor = Color.Khaki;
s.ForeColor = Color.Black;
s = fg.Styles[CellStyleEnum.Subtotal2];
s.BackColor = Color.LightGoldenrodYellow;
s.ForeColor = Color.Black;
}
ルーチンはまず、グリッドのレイアウトといくつかのスタイルを設定します。
195
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
2. Form_Load イベントに以下のコードを追加し、C1FlexGrid をデータソースに連結します。
Visual Basic コードの書き方
Visual Basic
' グリッドとデータソースを連結します。
fg.DataSource = GetDataSource()
C# コードの書き
C#
// グリッドとデータソースを連結します。
fg.DataSource = GetDataSource();
このルーチンではGetDataSourceメソッド(後述のコードを参照)で作成されたデータソースに連結します。
3. それぞれの RowCol.AllowDragging プロパティを False に設定し、最後の3列をドラッグできないようにロックします。
これは、ユーザーがこれらの列のデータをグループ化できないようにするためです。最後の3列のデータは行ごとに異
なります。このプロパティは、デザイナでもコードでも設定できます。
デザイナの場合
グリッドの列4を選択します。列4の[Column タスク
タスク]メニューが開きます。
[順序変更を有効にする
順序変更を有効にする]チェックボックスを OFF にします。
列5と列6に手順を繰り返します。
また、RowCol.AllowDragging プロパティは、以下のように[FlexGrid 列エディタ
列エディタ]を使用して設定することもできます。
[C1FlexGrid タスク
タスク]メニューの〈列エディタ
列エディタ〉を選択し、[FlexGrid 列エディタ
列エディタ]を開きます。[FlexGrid 列エディ
タ]へのアクセス方法の詳細については、列エディタ を参照してください。
右ペインの列4を選択します。
左ペインで、AllowDragging プロパティを False に設定します。
196
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
列5と列6の AllowDragging プロパティを False に設定します。
エディタは閉じません。
コードの場合
Form_Load イベントに次のコードを追加します。
Visual Basic コードの書き方
Visual Basic
' ユーザーによる列のドラッグを禁止します(最後の3列のみ)。
fg.Cols(4).AllowDragging = False
fg.Cols(5).AllowDragging = False
fg.Cols(6).AllowDragging = False
C# コードの書き
C#
// ユーザーによる列のドラッグを禁止します(最後の3列のみ)。
fg.Cols[4].AllowDragging = false;
fg.Cols[5].AllowDragging = false;
fg.Cols[6].AllowDragging = false;
4. Sales Amount 列の Format プロパティを設定し、金額を通貨値で表示させます。これは、デザイナでもコードでも設定
できます。
デザイナの場合
グリッドの列6を選択します。
[書式設定
書式設定]ボックスの〈...〉ボタンをクリックし、[書式文字列
書式文字列]ダイアログボックスを開きます。
[形式の種類]で、通貨を選択します。
197
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
〈OK〉をクリックし、[書式文字列]ダイアログを閉じます。
また、Format プロパティは、以下のように[FlexGrid 列エディタ
列エディタ]を使用して設定することもできます。
[FlexGrid 列エディタ
列エディタ]で、右ペインの列6を選択します。
左ペインで、Format プロパティの横の〈...〉ボタンをクリックし、[書式文字列
書式文字列]ダイアログボックスを開きます。
[形式の種類]で、通貨を選択します。
〈OK〉をクリックし、[書式文字列
書式文字列]ダイアログを閉じます。
〈OK〉をクリックし、列エディタを閉じます。
コードの場合
Visual Basic コードの書き方
Visual Basic
fg.Cols(6).Format = "C"
C# コードの書き
C#
fg.Cols[6].Format = "C";
5. GetDataSource メソッドは、グリッドが表示するデータテーブルを作成します。このルーチンは、データを取得する SQL
文を除いて非常に単純です。多くのユーザーの場合、これらの SQL 文は手動ではなく、Visual Studio や Microsoft
Access などに実装されているようなビジュアルデザイナを使用して記述します。接続文字列は、NorthWind データ
ベースを参照しています。ご使用のシステムでは、このファイルが別のフォルダにある場合があります。その場合に
は、コード内のこの文字列を変更する必要がある点に注意してください。
Visual Basic コードの書き方
Visual Basic
Prvate Function GetDataSource() As DataTable
198
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' 接続文字列を設定します。
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Program Files\ComponentOne Studio.NET 2.0\Common\Nwind.mdb"
' 接続文字列を設定します。
Dim rs As String = _
"SELECT Employees.LastName,Orders.ShipCountry," & _
"Categories.CategoryName,Products.ProductName,Orders.OrderDate," & _
"[Quantity]*[Products].[UnitPrice] AS [Sale Amount] " & _
"FROM (Categories INNER JOIN Products " & _
"ON Categories.CategoryID = Products.CategoryID) " & _
"INNER JOIN ((Employees INNER JOIN Orders " & _
"ON Employees.EmployeeID = Orders.EmployeeID) " & _
"INNER JOIN [Order Details] " & _
"ON Orders.OrderID = [Order Details].OrderID) " & _
"ON Products.ProductID = [Order Details].ProductID " & _
"ORDER BY Employees.LastName,Orders.ShipCountry," & _
"Categories.CategoryName;"
' DataSetへデータを取り出します。
Dim da As OleDbDataAdapter = New OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds)
' データテーブルを返します。
GetDataSource = ds.Tables(0)
End Function
C# コードの書き
C#
private DataTable GetDataSource()
{
// 接続文字列を設定します。
string conn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=C:\\Program Files\\ComponentOne Studio.NET
2.0\\Common\\Nwind.mdb";
// Set up the SQL statement.
string rs =
"SELECT Employees.LastName,Orders.ShipCountry," +
"Categories.CategoryName,Products.ProductName,Orders.OrderDate," +
"[Quantity]*[Products].[UnitPrice] AS [Sale Amount] " +
"FROM (Categories INNER JOIN Products " +
"ON Categories.CategoryID = Products.CategoryID) " +
"INNER JOIN ((Employees INNER JOIN Orders " +
"ON Employees.EmployeeID = Orders.EmployeeID) " +
"INNER JOIN [Order Details] " +
"ON Orders.OrderID = [Order Details].OrderID) " +
"ON Products.ProductID = [Order Details].ProductID " +
"ORDER BY Employees.LastName,Orders.ShipCountry," +
"Categories.CategoryName;";
199
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// DataSetへデータを取り出します。
OleDbDataAdapter da = new OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds);
// データテーブルを返します。
return ds.Tables[0];
}
プログラムの実行と検証:
この段階でプロジェクトを実行すると、列を移動したりデータを参照できる簡単なグリッドが表示されます。ただし、データは明
確な方法で構造化されていません。このテーブルには数千のレコードが含まれます。データ全体が表すのものの概要を把握
するのはかなり難しくなります。
手順
手順3:自動ソート
:自動ソート
データを系統立てて整理するための第1歩は、データのソートです。ユーザーが列を並べ替えるたびに、データが自動的に
ソートされるようにします。
ユーザーが列を並べ替えると、C1FlexGrid コントロールは AfterDragColumn イベントを発生させます。イベントハンドラを
追加し、グリッド上のデータテーブルのデータをソートします(グリッドが非連結モードで使用されている場合は、Sort メソッドで
行います)。
フォームに以下のコードを追加し、ユーザーが列をドラッグしたときにレコードセットをソートして小計を再構築します。
Visual Basic コードの書き方
Visual Basic
Private Sub fg_AfterDragColumn(ByVal sender As System.Object, ByVal e As
C1.Win.C1FlexGrid.DragRowColEventArgs)
Handles fg.AfterDragColumn
' ユーザーが列をドラッグしたとき、レコードセットをソートします。
200
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' これはデータをリフレッシュさせ、全ての小計を削除し、AfterDataRefresh
' イベントを発生させます。そして、小計が再計算されます。
Dim sort As String = fg.Cols(1).Name & ", " & fg.Cols(2).Name & ", " &
fg.Cols(3).Name
Dim dt As DataTable = fg.DataSource
dt.DefaultView.Sort = sort
End Sub
C# コードの書き
C#
private void fg_AfterDragColumn(object sender, C1.Win.C1FlexGrid.DragRowColEventArgs
e)
{
// ユーザーが列をドラッグしたとき、レコードセットをソートします。
// これはデータをリフレッシュさせ、全ての小計を削除し、AfterDataRefresh _
// イベントを発生させます。そして、小計が再計算されます。
string sort = fg.Cols[1].Name + ", " + fg.Cols[2].Name + ", " + fg.Cols[3].Name;
DataTable dt = (DataTable)fg.DataSource;
dt.DefaultView.Sort = sort;
}
プログラムの実行と検証:
プロジェクトを実行し、最初の3列の見出しをドラッグして列を並べ替えてみてください。列を移動させるたびに、データは自動
的にソートされ、データが解釈しやすくなります。
次の手順では、小計行とアウトラインツリーを追加します。
手順
手順4:小計行とアウトラインツリー
:小計行とアウトラインツリー
グリッドを連結モードで使用しているとき、データソースに変更を加えると、グリッドは AfterDataRefresh イベントを発生させ
201
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ます。このイベントは、小計行の挿入およびグリッドのアウトラインツリーを構築するためのコードを追加するのに理想的です。
AfterDataRefresh イベントハンドラは次のようになります。
Visual Basic コードの書き方
Visual Basic
Private Sub fg_AfterDataRefresh(ByVal sender As System.Object, ByVal e As
System.ComponentModel.ListChangedEventArgs)
Handles fg.AfterDataRefresh
Dim totalOn As Integer = fg.Cols("Sale Amount").SafeIndex
Dim caption As String = "{0} の合計"
' 3つのレベルのそれぞれの合計を算出します。
fg.Subtotal(AggregateEnum.Sum, 0, 1, totalOn, caption)
fg.Subtotal(AggregateEnum.Sum, 1, 2, totalOn, caption)
fg.Subtotal(AggregateEnum.Sum, 2, 3, totalOn, caption)
' レベル2までのアウトラインを展開します。
fg.Tree.Show(2)
' サイズを変更します。
fg.AutoSizeCols(1, 1, 1000, 3, 30, AutoSizeFlags.IgnoreHidden)
End Sub
C# コードの書き
C#
private void fg_AfterDataRefresh(object sender,
System.ComponentModel.ListChangedEventArgs e)
{
int totalOn = fg.Cols["Sale Amount"].SafeIndex;
string caption = "{0} の合計";
// 3つのレベルのそれぞれの合計を算出します。
fg.Subtotal(AggregateEnum.Sum, 0, 1, totalOn, caption);
fg.Subtotal(AggregateEnum.Sum, 1, 2, totalOn, caption);
fg.Subtotal(AggregateEnum.Sum, 2, 3, totalOn, caption);
// レベル2までのアウトラインを展開します。
fg.Tree.Show(2);
// サイズを変更します。
fg.AutoSizeCols(1, 1, 1000, 3, 30, AutoSizeFlags.IgnoreHidden);
}
プログラムの実行と検証:
コードは、非常に簡単です。まず、"Sale Amount"列のインデックスを取得します。このサンプルでは、インデックスは常に特定
の列を指します。インデックスは通常、その都度取得するほうが固定値にするより良い方法です。これは、誰かがいくつかの
フィールドを SQL 文に追加するとインデックスが変更されるためです。
その後、コードは Subtotal メソッドを呼び出してデータをグループ化し、新しい小計行を挿入します。新しい小計行は、自動的
にアウトラインノードに設定(各行の Row. IsNode プロパティが True に設定)されるため、縮小することができます。
202
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
もう一度、プロジェクトを実行し、列をドラッグしてみてください。Country ごと、ProductCategory ごと、Salesperson ごとの合
計を簡単に見ることができます。詳細を見たい場合は、ツリーを展開してデータをドリルダウンすることもできます。
注意:
注意:グリッドが編集可能で、[売上高]列の一部の値を変更すると AfterDataRefresh イベントが再び発生して、合計
が自動的に更新されることにも注意してください。
これで、チュートリアルを終了します。
203
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
タスク別ヘルプ
タスク別ヘルプは、Visual Studio でのプログラミングに精通し、コントロールのバインド/バインド解除を行う一般的な方法を
理解していることが前提となります。FlexGrid for WinForms 製品の初心者の場合は、「チュートリアル」を先にお読みくださ
い。
各トピックでは、FlexGrid for WinForms 製品を使用した特定のタスクのソリューションが提供されます。ヘルプで概説されて
いる手順に従うことによって、さまざまな C1FlexGrid 機能を利用したプロジェクトを作成できるようになります。
タスク別ヘルプの各トピックでは、読者が新しい .NET プロジェクトを作成した経験を持っていることも前提となります。
グリッド
C1FlexGrid コントロール本体の基本的なタスクや、グリッド全体のデザインに関する機能を紹介します。
FlexGridの各部名称について
の各部名称について
関連項目
「行と列」
エディタにアクセスする
C1FlexGrid の各エディタは、C1FlexGrid タスク
タスクメニュー、コンテキストメニュー、またはプロパティウィンドウからアクセスでき
ます。また、C1FlexGrid のエディタ
のエディタには、列エディタ と スタイルエディタ の2つがあり、設計時にそれらを使用して
C1FlexGrid のレイアウトと外観を制御できます。列の並べ替え、列幅の調整、列のプロパティの設定、列の挿入/削除を実行
するには、列エディタ
列エディタを使用します。既存のスタイルを変更し、カスタムスタイルを追加して後でセル、行、列に指定できるよう
にするには、スタイルエディタ
スタイルエディタを使用します。
列エディタにアクセス
204
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
列エディタ
列エディタにアクセスするには、C1FlexGrid タスク メニュー、コンテキストメニュー、またはプロパティウィンドウを使用します。
[列エディタ
列エディタ]を使用した列の編集の詳細については、「列エディタ」を参照してください。
[C1FlexGrid タスク]メニュー
C1FlexGrid の右上隅のスマートタグ()をクリックし、[C1FlexGrid タスク
タスク]メニューを開いて〈列エディタ
列エディタ〉を選択します。
コンテキストメニュー
フォームを右クリックし、コンテキストメニューから〈列エディタ
列エディタ〉を選択します。
205
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
プロパティウィンドウ
プロパティウィンドウで、Cols プロパティの横の〈...〉ボタンをクリックします。
スタイルエディタにアクセス
スタイルエディタ
スタイルエディタにアクセスするには、C1FlexGrid タスク メニュー、コンテキストメニュー、またはプロパティウィンドウを使用し
ます。[スタイルエディタ]を使用したセルの外観のカスタマイズ方法の詳細については、「 スタイルエディタ」を参照してくださ
い。
[C1FlexGrid タスク]メニュー
C1FlexGrid の右上隅のスマートタグ () をクリックし、[C1FlexGrid タスク
タスク]メニューを開き、〈スタイルエディタ
スタイルエディタ〉を選択します。
206
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
コンテキストメニュー
フォームを右クリックし、コンテキストメニューから〈スタイルエディタ〉を選択します。
プロパティウィンドウ
プロパティウィンドウで、Styles プロパティの横の〈...〉ボタンをクリックします。
207
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
VisualStyle を使用して外観を変更する
VisualStyle を使用して C1FlexGrid の外観をカスタマイズするには、VisualStyle プロパティを Custom、
、Office2007Black、
、
Office2007Blue、
、Office2007Silver、または System に設定します。このプロパティは、デザイナまたはコードのいずれかで
設定できます。下図に個々の VisualStyle を示します。
Visual Style
説明
Custom
VisualStyle なし(通常のスタイルと外観のプロパティを使用します)。
Office2007Black
Doスタイルは Office2007 Black カラースキームに一致します。
Office2007Blue
スタイルは Office2007 Blue カラースキームに一致します。
Office2007Silver
スタイルは Office2007 Silver カラースキームに一致します。
System
スタイルは現在のシステム設定に一致します。
Office2010Black
現在のシステム設定に基づく外観を持つコントロールをレンダリングします。
Office2010Silver
Office 2010 Silver カラースキームに基づく外観を持つコントロールをレンダリング
します。
Office2010Blue
Office 2010 Blue カラースキームに基づく外観を持つコントロールをレンダリングし
ます。
デザイナの場合
プロパティウィンドウで、VisualStyle プロパティを指定し、Custom、
、Office2007Black、
、Office2007Blue、
、
Office2007Silver、
、Office2010Blue、
、Office2010Black、
、Office2010Silver、または System に設定します。この例では、
VisualStyle プロパティは Office2007Blue に設定されます。
コードの場合
コードを Form_Load イベントに追加し、VisualStyle プロパティを Custom、
、Office2007Black、
、Office2007Blue、
、
Office2007Silver、
、Office2010Blue、
、Office2010Black、
、Office2010Silver、または System に設定します。次のコードは、
VisualStyle プロパティを Office2007Blue に設定します。
Visual Basic コードの書き方
Visual Basic
Me.C1FlexGrid1.VisualStyle = C1.Win.C1FlexGrid.VisualStyle.Office2007Blue
C# コードの書き方
C#
this.c1FlexGrid1.VisualStyle = C1.Win.C1FlexGrid.VisualStyle.Office2007Blue;
【実行例】
208
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
カスタム視覚スタイル
視覚スタイルの適用なし:
Office2007Black 視覚スタイル
Office 2007 Black カラースキーム:
Office2007Blue 視覚スタイル
Office 2007 Blue カラースキーム:
Office2007Silver 視覚スタイル
Office 2007 Silver カラースキーム:
Office2010Blue 視覚スタイル
Office 2010 Blue カラースキーム:
209
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Office2010Silver 視覚スタイル
Office 2010 Silver カラースキーム:
Office2010Black 視覚スタイル
Office 2010 Black カラースキーム:
システム視覚スタイル
現在のシステム設定:
XP のテーマで表示する
BorderStyle プロパティを BorderStyleEnum.XpThemes 列挙体 に設定し、ShowThemedHeaders プロパティを変更しま
す。
【実行例】
210
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
flex.BorderStyle = C1.Win.C1FlexGrid.Util.BaseControls.BorderStyleEnum.XpThemes
flex.ShowThemedHeaders = C1.Win.C1FlexGrid.ShowThemedHeadersEnum.Both
C# コードの書き方
C#
flex.BorderStyle = C1.Win.C1FlexGrid.Util.BaseControls.BorderStyleEnum.XpThemes;
flex.ShowThemedHeaders = C1.Win.C1FlexGrid.ShowThemedHeadersEnum.Both;
注意:
注意:XP のテーマで表示するには、VisualStyle プロパティが VisualStyle.Custom に設定されている必要がありま
す。
関連項目
「Excel スタイルのヘッダを使用する」
「VisualStyle を使用して外観を変更する」
「コントロールの境界線スタイルを変更する」
グリッド領域の背景色をを変更する
グリッド領域(すべてのセルより下および右にある範囲)は、EmptyArea 組み込みスタイルの BackColor プロパティを設定す
ることで変更できます。(デフォルトはシステムの AppWorkspace 色)
【実行例】
211
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
flex.Cols.Count = 5
flex.Rows.Count = 10
flex.Styles.EmptyArea.BackColor = Color.LightSalmon
C# コードの書き方
C#
flex.Cols.Count = 5;
flex.Rows.Count = 10;
flex.Styles.EmptyArea.BackColor = Color.LightSalmon;
注意:
注意:表示されるグリッド領域は、コントロールのサイズや行数/列数に依存します。
最後の列を広げてグリッド領域を埋める
ググリッドがコントロールいっぱいに収まるように最後の列を広げて表示するには、ExtendLastCol プロパティを True に設定
します。(デフォルトは False)
【実行例】
212
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
fflex.Cols.Count = 4
flex.Rows.Count = 10
' 最後の列を広げてグリッド領域を埋める
flex.ExtendLastCol = True
C# コードの書き方
C#
flex.Cols.Count = 4;
flex.Rows.Count = 10;
// 最後の列を広げてグリッド領域を埋める
flex.ExtendLastCol = true;
注意:
注意:注意:最後の行を広げるような機能は実装されていません。また、印刷(プレビュー)時に同様の表示を行う場合
は、PrintGrid メソッドの印刷オプションで PrintGridFlags.ExtendLastCol を指定する必要があります。
グリッドの背景画像を設定する
BackgroundImage プロパティに画像イメージを設定することができます。画像の配置方法は、BackgroundImageLayout
プロパティで指定します。
【実行例】
213
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
flex.BackgroundImage = Image.FromFile("C:\back.jpg")
flex.BackgroundImageLayout = ImageLayout.Stretch
C# コードの書き方
C#
flex.BackgroundImage = Image.FromFile("C:\back.jpg");
flex.BackgroundImageLayout = ImageLayout.Stretch;
透明度を指定して背景画像を設定する
Color.FromArgb メソッド(System.Drawing)を使用して色とアルファ値を指定し、Normal 組み込みスタイルの BackColor プ
ロパティに設定します。
【実行例】
214
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' 背景画像を設定
flex.BackgroundImage = Image.FromFile("C:\back.jpg")
flex.BackgroundImageLayout = ImageLayout.Stretch
' 背景色:白、アルファ値:200
flex.Styles.Normal.BackColor = Color.FromArgb(200, _
Color.White.R, _
Color.White.G, _
Color.White.B)
C# コードの書き方
C#
// 背景画像を設定
flex.BackgroundImage = Image.FromFile(@"C:\back.jpg");
flex.BackgroundImageLayout = ImageLayout.Stretch;
// 背景色:白、アルファ値:200
flex.Styles.Normal.BackColor = Color.FromArgb(200,
Color.White.R,
Color.White.G,
Color.White.B);
注意:
注意:.NET Framework 機能の詳細については MSDN ライブラリ等を参照してください。
レイアウトを保存/ロードする
レイアウトの保存/ロードには、WriteXml /ReadXml メソッドを使用します。
ReadXml/
/WriteXml メソッドによる XML ドキュメントの入出力では、データ以外にもプロパティやスタイルなどのグリッド設
定も対象になるため、レイアウトの保存やロードに使用できます。具体的には、片方のグリッドにスタイルなどの設定を行った
後、WriteXmlメソッドにて設定を XML ドキュメントに保存した上で、もう一方のグリッドで ReadXml メソッドを使用して設定を
215
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
読み込むといった方法になります。
【実行例】
【実行例】
Visual Basic コードの書き方
216
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 片方のグリッドにスタイルやプロパティを設定
flex.Rows.Count = 4
flex.Cols.Count = 3
flex.Styles.Normal.BackColor = Color.YellowGreen
flex.Styles.Fixed.ForeColor = Color.Red
flex.Styles.Normal.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter
flex.Styles.Fixed.BackColor = Color.Yellow
flex.Cols(2).Width = 200
flex.Rows(3).Height = 50
flex(3, 2) = "Cell 3, 2"
flex(0, 1) = "Fixed Cell"
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' レイアウトを保存/ロード
Dim ms As System.IO.MemoryStream = New System.IO.MemoryStream()
' Xml に保存
flex.WriteXml(ms)
ms.Position = 0
' もう一つのグリッドで Xml を読み込む
flex2.ReadXml(ms)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 片方のグリッドにスタイルやプロパティを設定
flex.Rows.Count = 4;
flex.Cols.Count = 3;
flex.Styles.Normal.BackColor = Color.YellowGreen;
flex.Styles.Fixed.ForeColor = Color.Red;
flex.Styles.Normal.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter;
flex.Styles.Fixed.BackColor = Color.Yellow;
flex.Cols[2].Width = 200;
flex.Rows[3].Height = 50;
flex[3, 2] = "Cell 3, 2";
flex[0, 1] = "Fixed Cell";
}
private void button1_Click(object sender, EventArgs e)
{
// レイアウトを保存/ロード
System.IO.MemoryStream ms = new System.IO.MemoryStream();
// Xml に保存
flex.WriteXml(ms);
ms.Position = 0;
// もう一つのグリッドで Xml を読み込む
flex2.ReadXml(ms);
217
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
パフォーマンスを改善する
AutoResize プロパティを使用してパフォーマンスを向上させる
連結されたグリッドがデータソースからデータを取得する場合、グリッドはすべてのセルを計測し、すべてのデータが収まるよう
に列幅を設定します。この結果、データソースのデータを表示するためにグリッドレイアウトが最適化されます。ただし、データ
ソースが大規模の場合(たとえば、数千行以上ある場合)、時間がかかる可能性があります。
このような場合は、AutoResize プロパティを False(デフォルト)に設定し、列幅をコードで設定することを検討する必要があり
ます。データソースと接続後に、AutoSizeCol (AutoSizeCols) メソッドや、列の Width プロパティを利用して列幅を調節して
ください。
Visual Basic コードの書き方
Visual Basic
' データの取得
OleDbDataAdapter.Fill(DataSet)
' 列幅の自動調節機能 OFF
flex.AutoResize = False
' データソースとの接続
flex.DataSource = DataSet.Tables(0)
' 列幅調節
' ~
C# コードの書き方
C#
// データの取得
OleDbDataAdapter.Fill(DataSet);
// 列幅の自動調節機能 OFF
flex.AutoResize = false;
// データソースとの接続
flex.DataSource = DataSet.Tables[0];
// 列幅調節
// ~
BeginUpdate/
/EndUpdate メソッドを使用してパフォーマンスを向上させる
セル値が変更されるか、行や列がグリッドに追加されたり、グリッドから削除されるたびに、グリッドレイアウトを再計算し、表示
を更新するために、いくつかの計算が実行されます。グリッドコンテンツの更新を開始する前に BeginUpdate メソッドをコー
ルして再描画を中断し、変更が完了したら EndUpdate メソッドにより描画を再開することにより、パフォーマンスを大幅に向
上させることができます。
下記のコードでは、Try/Finally ブロックの使用により、更新コードが失敗して例外がスローされた場合でも、EndUpdate メ
ソッドが必ずコールされるようにしています。
Visual Basic コードの書き方
Visual Basic
' グリッドを更新する前に再描画を中断します
218
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.BeginUpdate()
' 変更処理
Try
Dim r As Integer = 0
Do While (r < flex.Rows.Count)
Dim c As Integer = 0
Do While (c < flex.Cols.Count)
flex(r, c) = (r + c)
c += 1
Loop
r += 1
Loop
Finally
' 終了した際に必ず描画を再開します
flex.EndUpdate()
End Try
C#コードの書き方
Visual Basic
// グリッドを更新する前に再描画を中断します
flex.BeginUpdate();
//変更処理
try
{
for (int r = 0; r < flex.Rows.Count; r++)
{
for (int c = 0; c < flex.Cols.Count; c++)
{
flex[r, c] = r + c;
}
}
}
finally
{
// 終了した際に必ず描画を再開します
flex.EndUpdate();
}
グリッドに大量のデータを追加する場合も BeginUpdate/EndUpdate メソッドを使用してグリッドの再描画を抑制すること
で、処理能力を向上させることが可能です。行や列の追加(行数・列数の設定)処理、データの設定処理などを行っている間
は、BeginUpdate メソッドをコールし、再描画を中断する方法を確認してください。
Visual Basic コードの書き方
Visual Basic
' グリッドの描画を中断します
flex.BeginUpdate()
' 行や列の追加(行数・列数の設定)処理
' ~
' データの設定処理
' ~
' グリッドの描画を再開します
219
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.EndUpdate()
C#コードの書き方
Visual Basic
// グリッドの描画を中断します
flex.BeginUpdate();
// 行や列の追加(行数・列数の設定)処理
// ~
// データの設定処理
// ~
// グリッドの描画を再開します
flex.EndUpdate();
繰り返しスタイルを作成している
StyleNew プロパティによるスタイル設定は、カスタムスタイルを新規で作成しますので、繰り返し実行すると、パフォーマンス
が低下したり、リソースの消費量が増加する場合があります。また、何度も発生するイベント内で繰り返しカスタムスタイルを
作成しているような場合も同様です。
同じスタイルを繰り返し適用するような場合は、あらかじめ作成したカスタムスタイルをセルや行、列に適用するようにしてくだ
さい。
JIS2004 対応フォントを使用する
Windows Vista や Windows 7 などで標準搭載される JIS2004 対応フォントを FlexGridで使用した場合について説明します。
(Windows XP/Windows Server 2003 に JIS2004 対応フォントをインストールした場合も同様です)
サロゲート ペア文字の表示
FlexGrid のデフォルト設定では、JIS2004 対応によって追加されたサロゲート ペア文字で表現される文字の一部が正
しく描画されません。これは、デフォルトの設定では UseCompatibleTextRendering プロパティが True に設定され、
GDI+ で描画されているためです。
例: か(U+304B)+ ゜(U+309A)で表示される「か゚」を表示した場合
正しく描画するためには、UseCompatibleTextRendering プロパティを False に設定し、GDI で描画します。
例: か(U+304B)+ ゜(U+309A)で表示される「か゚」を表示した場合(UseCompatibleTextRendering=False)
FlexGrid で描画される結果は全て GDI または GDI+ における .NET Framework の仕様に依存します。
まとめ
FlexGrid for WinForms にて JIS2004 対応フォントを扱う場合、UseCompatibleTextRendering プロパティの利用に
よって対応できるのは画面上の文字列描画に関する問題だけです。それ以外の機能(入力、データベース接続など)
については注意すべき点があります。
JIS2004 対応フォントの詳細については、予め MSDN ライブラリなどの各種参考文献をご覧いただくことをお勧めしま
す。また、アプリケーション開発および運用の際には十分な注意を払い、入念な動作検証を行う必要があります。
注意:
サロゲート ペア文字自体の入力を制御する直接的な機能はありません。
220
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
サロゲート ペア文字を含む編集セル内でのキー操作(カーソルキー、Backspace キー、Delete キー)は標準の
TextBox コントロール等と同様です。
編集中セルではサロゲート ペア文字が正しく描画されます。FlexGrid では編集中のセルにて専用のエディタコン
トロールを利用しますが、ここでは OS が提供するエディタクラスを使用しているためです。
上図のようなサロゲート ペア文字は4バイト(2文字)として扱われます。そのため、入力マスクなど入力文字数の
制御では注意が必要です。
サロゲート ペア文字を含むデータベースとの接続を行う場合は、予めご利用のデータベースにおける当該文字
の扱いに関して確認してください。FlexGrid ではデータベース側での問題(制限事項など)に対応することはでき
ません。
印刷(プレビュー)の結果は、グリッドの描画結果に依存します。UseCompatibleTextRendering プロパティを
False に設定することでサロゲート ペア文字を含むグリッドも正しく印刷されます。
セルラベル、Excel などのファイル出力では、サロゲート ペア文字を含む値も正しく表示、出力されます。
グループ化の機能を使用する
FlexGrid の標準機能には実装されていませんが、コントロールを拡張することで実現可能です。詳細については、製品付属の
FlexGroup サンプルを参照してください。
【FlexGroup サンプルの実行例】
関連項目
「チュートリアル」
境界線
境界線に関するタスクを紹介します。
221
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
コントロールの境界線スタイルを変更する
コントロールの境界線スタイルを設定するには、BorderStyle プロパティを
Fixed3D、FixedSingle、Light3D、None、XpThemes のいずれかに設定します。このプロパティは、デザイナでもコードでも
設定できます。
境界線
説明
Fixed3D
3D境界線 (デフォルト設定)
FixedSingle
単線の境界線
Light3D
明るいくぼんだ境界線
None
境界線なし
XpThemes
XPテーマを使用して描画される境界線
【実行例】
3D 境界線 (Fixed3D))
境界線は 3D(立体表示)になります。
単線の境界線 (FixedSingle))
境界線は単線になります。
222
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
明るいくぼんだ境界線
(Light3D))
境界線は、明るい 3D 表示になります。
境界線なし (None))
境界線はありません。
223
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
(XpThemes))
XP テーマの境界線
境界線は、XP テーマ表示になります。
【デザイナで設定する場合】
プロパティウィンドウで BorderStyle プロパティを探し、それを Fixed3D、FixedSingle、Light3D、None、XpThemes のい
ずれかに設定します。この例では、BorderStyle プロパティは Fixed3D に設定されます。
224
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【コードで設定する場合】
Form_Load イベントにコードを追加し、BorderStyle プロパティを Fixed3D、FixedSingle、Light3D、None、
、XpThemes の
いずれかに設定します。以下のコードは、BorderStyle プロパティを Fixed3D に設定します。
Visual Basic コードの書き方
Visual Basic
flex.BorderStyle = C1.Win.C1FlexGrid.Util.BaseControls.BorderStyleEnum.Fixed3D
C# コードの書き方
C#
flex.BorderStyle = C1.Win.C1FlexGrid.Util.BaseControls.BorderStyleEnum.Fixed3D;
グリッドの境界線スタイルを設定する
グリッドの境界線スタイルを設定するには、Style プロパティを Dotted、
、Double、
、Fillet、
、Flat、
、Groove、
、Inset、
、None、
、
Raised のいずれかに設定します。このプロパティは、デザイナまたはコードで、C1FlexGrid の組み込みスタイルを使用して
設定できます。
境界線
説明
Dotted
点線の境界線
Double
二重線の境界線
Fillet
フィレット付きの境界線
Flat
実線のフラットな境界線(デフォル
ト設定)
Groove
溝付きの境界線
Inset
くぼんだ境界線
None
境界線なし
Raised
浮き出た境界線
【実行例】
点線の境界線 (Dotted))
セル境界線は点線になります。
225
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
二重線の境界線 (Double))
セル境界線は二重線になります。
フィレット付きの境界線 (Fillet))
セル境界線はフィレット付きになります。
226
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
フラットな境界線 (Flat))
セル境界線はフラットな実線になります。
溝付きの境界線 (Groove))
セル境界線は溝付きになります。
227
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
くぼんだ境界線 (Inset))
セル境界線はくぼんだ状態になります。
境界線なし (None))
セル境界線はありません。
228
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
浮き出た境界線 (Raised))
セル境界線は浮き出た状態になります。
【デザイナで設定する場合】
1. 「スタイルエディタ」を開きます。スタイルエディタへのアクセス方法の詳細については、「スタイルエディタにアクセス」を
参照してください。
2. [組み込みスタイル
組み込みスタイル]で、Normal を選択します。右列で、Border プロパティを探して展開します。Style プロパティを
Dotted、Double、Fillet、Flat、Groove、Inset、None、Raised のいずれかに設定します。この例では、Style プロパ
ティは Dotted に設定されます。
229
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
3. 〈OK〉をクリックし、エディタを閉じます。
【コードで設定する場合】
Form_Load イベントにコードを追加し、Normal スタイルの Style プロパティを
Dotted、Double、Fillet、Flat、Groove、Inset、None、Raised のいずれかのオプションに設定します。以下のコード
は、Style プロパティを Dotted に設定します。
Visual Basic コードの書き方
Visual Basic
' グリッドの境界線スタイルを変更する
flex.Styles.Normal.Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Dotted
C# コードの書き方
C#
// グリッドの境界線スタイルを変更する
flex.Styles.Normal.Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Dotted;
グリッドの境界線を変更する
グリッドの境界線を変更する(非表示、色変更
非表示、色変更)
Normal 組み込みスタイルの Border プロパティを変更します。
【実行例】
230
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' 垂直方向のみ境界線を表示します
flex.Styles.Normal.Border.Direction = C1.Win.C1FlexGrid.BorderDirEnum.Vertical
' 境界線の色を赤にします
flex.Styles.Normal.Border.Color = Color.Red
C# コードの書き方
C#
// 垂直方向のみ境界線を表示します
flex.Styles.Normal.Border.Direction = C1.Win.C1FlexGrid.BorderDirEnum.Vertical;
// 境界線の色を赤にします
flex.Styles.Normal.Border.Color = Color.Red;
注意: CellBorder クラスの Direction プロパティで設定できる値は、垂直/水平/両方のいずれかになります。また、
垂直および水平で別々の線種や色を設定することはできません。
行/列の境界線を設定する
行や列 の Border プロパティを変更します。
【実行例】
231
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' 1列目の境界線スタイルを変更します
flex.Cols(1).StyleNew.Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Double
' 1列目の境界線の色を黒にします
flex.Cols(1).Style.Border.Color = Color.Black
' 2列目の境界線を垂直方向のみにします
flex.Cols(2).StyleNew.Border.Direction = C1.Win.C1FlexGrid.BorderDirEnum.Vertical
' 2列目の境界線の色を赤にします
flex.Cols(2).Style.Border.Color = Color.Red
' 3行目の境界線スタイルを水平方向のみにします
flex.Rows(3).StyleNew.Border.Direction = C1.Win.C1FlexGrid.BorderDirEnum.Horizontal
' 3行目の境界線の色を青にします
flex.Rows(3).Style.Border.Color = Color.Blue
C# コードの書き方
C#
// 1列目の境界線スタイルを変更します
flex.Cols[1].StyleNew.Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Double;
// 1列目の境界線の色を黒にします
flex.Cols[1].Style.Border.Color = Color.Black;
// 2列目の境界線を垂直方向のみにします
flex.Cols[2].StyleNew.Border.Direction = C1.Win.C1FlexGrid.BorderDirEnum.Vertical;
// 2列目の境界線の色を赤にします
flex.Cols[2].Style.Border.Color = Color.Red;
// 3行目の境界線スタイルを水平方向のみにします
flex.Rows[3].StyleNew.Border.Direction = C1.Win.C1FlexGrid.BorderDirEnum.Horizontal;
// 3行目の境界線の色を青にします
flex.Rows[3].Style.Border.Color = Color.Blue;
注意:
232
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
CellBorder クラスの Direction プロパティで設定できる値は、垂直/水平/両方のいずれかになります。ま
た、垂直および水平で別々の線種や色を設定することはできません。
行/列の設定が重複した場合、列の設定が優先されます。
行や列にスタイルが設定されていない場合は、 StyleNew プロパティを使用して新しいスタイルを作成する必要
があります。
セルに線を描画する
CellBorder クラスの Direction プロパティで設定できる値は、垂直/水平/両方のいずれかになります。例え
ば、Direction プロパティに BorderDirEnum.Horizontal (水平) を設定すると、垂直の線 (列の境界線) が表示されなくなり
ます。また、CellBorder クラスの Style や Width 、Color といった設定は、Direction プロパティで設定された種類 (垂直/
水平/両方のいずれか) 全体に適用されるため、垂直線は赤色、水平線は青色といった設定はできません。
そのため、特定のセルで自由に線を描画したい場合は、オーナー描画の機能を使用します。OwnerDrawCell イベントを使用
してグリッドのセルに描画を行う場合は、セルの右側や下側に対して行う必要がある点に注意してください。これは、FlexGrid
のそれぞれのセル枠線が各セルの右側と下側の線の集まりから形成されているためです。例えば、グリッドの2行毎に線を描
画する場合、下記のサンプルコードのように、セルの下側に対して線を描画する必要があります。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' オーナー描画の機能を使用
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
End Sub
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
' セルの描画を開始
e.DrawCell()
' 固定列を除いたセルで2行毎に下線を描画
If (e.Col <> 0) And ((e.Row Mod 2) = 0) Then
' セルを描画
233
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
e.DrawCell()
Dim p1 As Pen = New Pen(Color.Red, 1)
Dim b As Integer = e.Bounds.Bottom - p1.Width
e.Graphics.DrawLine(p1, e.Bounds.Left, b, e.Bounds.Right, b)
End If
' 3列目は右側にも線を描画
If e.Col = 3 Then
Dim p2 As Pen = New Pen(Color.YellowGreen, 1)
Dim r As Integer = e.Bounds.Right - p2.Width
e.Graphics.DrawLine(p2, r, e.Bounds.Top, r, e.Bounds.Bottom)
End If
' 描画終了
e.Handled = True
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// オーナー描画の機能を使用
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
}
private void flex_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
// セルの描画を開始
e.DrawCell();
// 固定列を除いたセルで2行毎に下線を描画
if ((e.Col != 0) && ((e.Row % 2) == 0))
{
Pen p1 = new Pen(Color.Red, 1);
float b = e.Bounds.Bottom - p1.Width;
e.Graphics.DrawLine(p1, e.Bounds.Left, b, e.Bounds.Right, b);
}
// 3列目は右側にも線を描画
if (e.Col == 3)
{
スクロールバー
スクロールバーに関するタスクを紹介します。
スクロールバーの表示
スクロールバーの表示/非表示を設定する
非表示を設定する
スクロールバーの表示は、ScrollBars プロパティで制御します。(デフォルト Both)
ScrollBars.Horizontal(水平スクロールバーのみ)、ScrollBars.Vertical(垂直スクロールバーのみ)、ScrollBars.Both(両方)の
いずれかに設定すると、スクロールバーが表示されます。ScrollBars.None に設定すると、スクロールバーは表示されません。
【実行例:
【実行例:Horizontal】】
234
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例:
【実行例:Vertical】】
【実行例:
【実行例:Both】】
235
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例:
【実行例:None】】
Visual Basic コードの書き方
Visual Basic
' 水平スクロールバーのみ表示
flex.ScrollBars = ScrollBars.Horizontal
C# コードの書き方
C#
// 水平スクロールバーのみ表示
flex.ScrollBars = ScrollBars.Horizontal;
注意:
236
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ScrollBars.None 以外に設定しても、グリッド内に行・列がすべて表示されている場合、スクロールバーは表示さ
れません。スクロールバーはグリッドの内容がコントロールに収まらない場合にのみ表示されます。
スクロールバーの幅を変更する機能は用意されていません。C1FlexGrid コントロールではシステムのスクロー
ルバーを使用します。
関連項目
「常にスクロールバーを表示する」
常にスクロールバーを表示する
ScrollOptions プロパティに ScrollFlags.AlwaysVisible を設定することで、行や列がFlexGridコントロール内にすべて表示
されている場合でも、スクロールバーを表示することができます。垂直
垂直(または水平
水平)スクロールバーのみを常に表示したい場
合は、ScrollOptionsプロパティに ScrollFlags.AlwaysVisibleを設定した上で、ScrollBars プロパティを設定します。
【実行例】
Visual Basic コードの書き方
Visual Basic
flex.ScrollOptions = C1.Win.C1FlexGrid.ScrollFlags.AlwaysVisible
flex.ScrollBars = ScrollBars.Both
' 水平スクロールバーのみを表示
'flex.ScrollBars = ScrollBars.Horizontal
' 垂直スクロールバーのみを表示
'flex.ScrollBars = ScrollBars.Vertical
C# コードの書き方
C#
flex.ScrollOptions = C1.Win.C1FlexGrid.ScrollFlags.AlwaysVisible;
flex.ScrollBars = ScrollBars.Both;
// 水平スクロールバーのみを表示
237
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
//flex.ScrollBars = ScrollBars.Horizontal;
// 垂直スクロールバーのみを表示
//flex.ScrollBars = ScrollBars.Vertical;
スクロールバーの表示状態を取得する
現在のスクロールバーの表示状態を取得するには、ScrollBarsVisible プロパティを使用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show(flex.ScrollBarsVisible.ToString)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(flex.ScrollBarsVisible.ToString());
}
スクロール動作を変更する
ScrollOptions プロパティを設定します。(デフォルトは ScrollFlags.None)
スクロール動作のオプション、ScrollFlags列挙体の設定を2つ以上設定するには、Or(|)を使用します。
Visual Basic コードの書き方
238
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic
' スクロールバーを常に表示しつつ、行列単位でスクロールする
flex.ScrollOptions = C1.Win.C1FlexGrid.ScrollFlags.AlwaysVisible Or _
C1.Win.C1FlexGrid.ScrollFlags.ScrollByRowColumn
C# コードの書き方
C#
// スクロールバーを常に表示しつつ、行列単位でスクロールする
flex.ScrollOptions = C1.Win.C1FlexGrid.ScrollFlags.AlwaysVisible |
C1.Win.C1FlexGrid.ScrollFlags.ScrollByRowColumn;
VS-FlexGrid と同様のスクロール動作にする
ActiveX 製品 VS-FlexGrid Pro のスクロール動作には、行・列単位でスクロールすることと、スクロールバーを動かしている
間はスクロールしないといった特徴があります。FlexGrid for WinForms でこの動作を実現するには、ScrollOptions プロパ
ティに ScrollFlags.DelayedScroll と ScrollFlags.ScrollByRowColumn を設定します。
ScrollFlags 列挙体を組み合わせて設定する際は、VB:「Or」 C#:「|」を使用します。
Visual Basic コードの書き方
Visual Basic
flex.ScrollOptions = C1.Win.C1FlexGrid.ScrollFlags.DelayedScroll Or _
C1.Win.C1FlexGrid.ScrollFlags.ScrollByRowColumn
C# コードの書き方
C#
flex.ScrollOptions = C1.Win.C1FlexGrid.ScrollFlags.DelayedScroll |
C1.Win.C1FlexGrid.ScrollFlags.ScrollByRowColumn;
スクロールチップを表示する
ScrollOptions プロパティに ScrollFlags.ShowScrollTips を設定し、ShowScrollTip イベントを使用します。
【実行例】
239
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' スクロールチップを表示する
flex.ScrollOptions = C1.Win.C1FlexGrid.ScrollFlags.ShowScrollTips
End Sub
Private Sub flex_ShowScrollTip(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.ToolTipEventArgs) Handles flex.ShowScrollTip
e.ToolTipText = String.Format("row {0}", e.Row)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// スクロールチップを表示する
flex.ScrollOptions = C1.Win.C1FlexGrid.ScrollFlags.ShowScrollTips;
}
private void flex_ShowScrollTip(object sender, C1.Win.C1FlexGrid.ToolTipEventArgs e)
{
e.ToolTipText = string.Format("row {0}", e.Row);
}
スクロール位置を変更する
TopRow プロパティで垂直方向の位置を、LeftCol プロパティで水平方向の位置を設定します。
【実行例】
240
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
For i As Integer = 1 To flex.Rows.Count - 1
flex(i, 0) = i
Next
For j As Integer = 0 To flex.Cols.Count - 1
flex(0, j) = j
Next
flex.Cols(0).Width = 30
' スクロール位置を変更する
flex.TopRow = 10
flex.LeftCol = 3
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
for(int i=1; i
{
flex[i, 0] = i;
}
for(int j=0; j
{
flex[0, j] = j;
}
// スクロール位置を変更する
flex.TopRow = 10;
flex.LeftCol = 3;
}
241
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
注意:
ピクセル単位でスクロールするには、ScrollPosition プロパティを使用します。
特定のセルを表示するには、ShowCell メソッドを使用します。
関連項目
「任意のセルを表示する」
スタイル
組み込みスタイルやカスタムスタイルに関するタスクを紹介します。「スタイルの要素」にあるタスクは、組み込みスタイルとカ
スタムスタイル、どちらでも使用できます。
関連項目
「セルの外観」
組み込みスタイルの位置について
242
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
通常セルの外観を変更する
Normal 組み込みスタイルを利用することで、通常セル全体のデフォルトスタイルを設定できます。これは、グリッド上の通常
セル全てに対して同一スタイルを設定したいような場合に有効な手法です。
【実行例】
243
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' デフォルトスタイルを設定する
flex.Styles.Normal.BackColor = Color.LemonChiffon
flex.Styles.Normal.ForeColor = Color.Red
flex.Styles.Normal.DataType = GetType(Double)
flex.Styles.Normal.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter
flex.Styles.Normal.Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Double
flex.Styles.Normal.Border.Color = Color.Green
flex.Styles.Normal.Format = "#.#0"
' Normalスタイルから継承されているFixedスタイルのFormatをクリア
flex.Styles.Fixed.Format = ""
C# コードの書き方
C#
// デフォルトスタイルを設定する
flex.Styles.Normal.BackColor = Color.LemonChiffon;
flex.Styles.Normal.ForeColor = Color.Red;
flex.Styles.Normal.DataType = typeof(double);
flex.Styles.Normal.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter;
flex.Styles.Normal.Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Double;
flex.Styles.Normal.Border.Color = Color.Green;
flex.Styles.Normal.Format = "#.#0";
// Normalスタイルから継承されているFixedスタイルのFormatをクリア
flex.Styles.Fixed.Format = "";
注意:
Fixed 組み込みスタイルの何も設定していないプロパティの値は、親スタイルの Normal スタイルから継承され
ます。
Normal 組み込みスタイルは、スタイルエディタからも設定できます。
244
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
関連項目
CellStyle クラス
「スタイルエディタにアクセス」
固定セルの外観を変更する
Fixed 組み込みスタイルを利用することで、固定セル全体の外観を変更します。
【実行例】
Visual Basic コードの書き方
Visual Basic
' 固定セルの背景色を黄色に設定
flex.Styles.Fixed.BackColor = Color.Yellow
C# コードの書き方
C#
// 固定セルの背景色を黄色に設定
flex.Styles.Fixed.BackColor = Color.Yellow;
注意:
Fixed 組み込みスタイルの何も設定していないプロパティの値は、親スタイルのNormal スタイルから継承され
ます。
Fixed 組み込みスタイルは、スタイルエディタからも設定できます。
関連項目
CellStyle クラス
245
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
「スタイルエディタにアクセス」
選択されているセルの外観を変更する
Highlight 組み込みスタイルの背景色や文字色などを変更します。
【実行例】
Visual Basic コードの書き方
Visual Basic
' 選択色を黄緑にします
flex.Styles.Highlight.BackColor = Color.YellowGreen
C# コードの書き方
C#
// 選択色を黄緑にします
flex.Styles.Highlight.BackColor = Color.YellowGreen;
注意:
組み込みスタイルは、スタイルエディタ からも設定できます。
カレントセルの外観は、Focus 組み込みスタイルで変更します。
コントロールにフォーカスがないときにセルを強調表示するかどうかを指定するには、Highlight プロパティを使
用します。
選択方法を変更するには、SelectionMode プロパティを変更します。
カレントセルの外観を変更する
Focus 組み込みスタイルの背景色や文字色などを変更します。
246
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】
Visual Basic コードの書き方
Visual Basic
' カレントセルの背景色を黄色に変更
flex.Styles.Focus.BackColor = Color.Yellow
' カレントセルの文字色を赤に変更
flex.Styles.Focus.ForeColor = Color.Red
C# コードの書き方
C#
// カレントセルの背景色を黄色に変更
flex.Styles.Focus.BackColor = Color.Yellow;
// カレントセルの文字色を赤に変更
flex.Styles.Focus.ForeColor = Color.Red;
注意: 組み込みスタイルは、スタイルエディタ からも設定できます。
カレントセルのフォーカス枠を変更する
FocusRect プロパティを変更します。(デフォルトは Light)
【実行例】 太いフォーカス矩形(
太いフォーカス矩形(Heavy))
247
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】 くぼんだフォーカス矩形(
くぼんだフォーカス矩形(Inset))
【実行例】 細いフォーカス矩形(
細いフォーカス矩形(Light))
248
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】 浮き出たフォーカス矩形(
浮き出たフォーカス矩形(Raised))
【実行例】 実線のフォーカス矩形(
実線のフォーカス矩形(Solid))
矩形の色は、Highlight 組み込みスタイルのBackColor プロパティの色になります。
249
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】 フォーカス矩形なし(
フォーカス矩形なし(None))
フォーカス枠をなしにすると、カレントセルはHighlight 組み込みスタイルで描画されます。
Visual Basic コードの書き方
Visual Basic
flex.FocusRect = C1.Win.C1FlexGrid.FocusRectEnum.Heavy
C# コードの書き方
C#
flex.FocusRect = C1.Win.C1FlexGrid.FocusRectEnum.Heavy;
注意:
注意:組み込みスタイルは、スタイルエディタ からも設定できます。
250
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
カレントセルのフォーカス枠の色を変更する
FocusRect プロパティを Solid にします。矩形の色は、Highlight 組み込みスタイルの BackColor プロパティの色になりま
す。
【実行例】
Visual Basic コードの書き方
Visual Basic
' フォーカス枠を Solid にします
flex.FocusRect = C1.Win.C1FlexGrid.FocusRectEnum.Solid
' フォーカス枠の色を赤にします
flex.Styles.Highlight.BackColor = Color.Red
' カレントセルの背景色を黄色にします
flex.Styles.Focus.BackColor = Color.Yellow
C# コードの書き方
C#
// フォーカス枠を Solid にします
flex.FocusRect = C1.Win.C1FlexGrid.FocusRectEnum.Solid;
// フォーカス枠の色を赤にします
flex.Styles.Highlight.BackColor = Color.Red;
// カレントセルの背景色を黄色にします
flex.Styles.Focus.BackColor = Color.Yellow;
注意:
線種は Solid のみになります。また、線の太さを変更することはできません。
組み込みスタイルは、スタイルエディタ からも設定できます。
1行おきのスタイルを設定する
行おきのスタイルを設定する
251
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Alternate 組み込みスタイルとNormal スタイルを設定します。
【実行例】
Visual Basic コードの書き方
Visual Basic
' 1行おきのスタイルを設定します
flex.Styles.Alternate.BackColor = Color.YellowGreen
' 通常セルのスタイルを設定します
flex.Styles.Normal.BackColor = Color.Yellow
C# コードの書き方
C#
// 1行おきのスタイルを設定します
flex.Styles.Alternate.BackColor = Color.YellowGreen;
// 通常セルのスタイルを設定します
flex.Styles.Normal.BackColor = Color.Yellow;
注意
注意:
Alternate 組み込みスタイルの何も設定していないプロパティの値は、親スタイルの Normal スタイルから継承
されます。
Alternate や Normal 組み込みスタイルは、スタイルエディタからも設定できます。
関連項目
CellStyle クラス
スタイルエディタにアクセス
固定セルや静止セルも1行おきに外観を変更する
252
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
固定セルや静止セルも
固定セルや静止セルも1行おきに外観を変更する
行おきに外観を変更する
1行おきに行のスタイルを変更する場合、組み込みスタイルAlternate を使用します。ただし、Alternate 組み込みスタイルの
対象には、固定セルや静止セルが含まれていません。また、固定/静止セルについては、Fixed/Frozen 組み込みスタイル
にて設定しますが、こちらは固定/静止セル全体に影響することになります。
そのため、固定セルや静止セルも1行おきに背景色などを変更する場合は、カスタムスタイルを作成して1行おきの固定/静
止セルに適用する方法で対応します。下記のように2通りの方法があります。
【実行例】
ループ処理でカスタムスタイルを設定
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex.Cols.Fixed = 1
flex.Cols.Frozen = 1
' Alternate プロパティを設定
flex.Styles.Alternate.BackColor = Color.SkyBlue
' 静止セルの背景色を通常セルと同じにします
flex.Styles.Frozen.BackColor = flex.Styles.Normal.BackColor
' Alternate と同じ背景色のカスタムスタイルを作成
flex.Styles.Add("AlternateFrozen")
flex.Styles("AlternateFrozen").BackColor = flex.Styles.Alternate.BackColor
' 作成したカスタムスタイル1行おきに固定/静止セルに設定
For i As Integer = flex.Rows.Fixed To flex.Rows.Count - 1
If i Mod 2 = 1 Then
' 固定列
flex.SetCellStyle(i, 0, flex.Styles("AlternateFrozen"))
' 静止列
253
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.SetCellStyle(i, 1, flex.Styles("AlternateFrozen"))
End If
Next
flex.Cols(0).Caption = "固定列"
flex.Cols(1).Caption = "静止列"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.Cols.Fixed = 1;
flex.Cols.Frozen = 1;
// Alternate プロパティを設定
flex.Styles.Alternate.BackColor = Color.AliceBlue;
// 静止セルの背景色を通常セルと同じにします
flex.Styles.Frozen.BackColor = flex.Styles.Normal.BackColor;
// Alternate と同じ背景色のカスタムスタイルを作成
flex.Styles.Add("AlternateFrozen");
flex.Styles["AlternateFrozen"].BackColor = flex.Styles.Alternate.BackColor;
// 作成したカスタムスタイル1行おきに固定/静止セルに設定
for (int i = flex.Rows.Fixed; i < flex.Rows.Count; i++)
{
if (i % 2 == 1)
{
// 固定列
flex.SetCellStyle(i, 0, flex.Styles["AlternateFrozen"]);
// 静止列
flex.SetCellStyle(i, 1, flex.Styles["AlternateFrozen"]);
}
}
flex.Cols[0].Caption = "固定列";
flex.Cols[1].Caption = "静止列";
}
オーナー描画を使用してカスタムスタイルを設定
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
flex.Cols.Fixed = 1
flex.Cols.Frozen = 1
flex.Cols(0).Caption = "固定列"
flex.Cols(1).Caption = "静止列"
' Alternate プロパティを設定
flex.Styles.Alternate.BackColor = Color.SkyBlue
' 静止セルの背景色を通常セルと同じにします
flex.Styles.Frozen.BackColor = flex.Styles.Normal.BackColor
254
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' Alternate と同じ背景色のカスタムスタイルを作成
flex.Styles.Add("AlternateCell")
flex.Styles("AlternateCell").BackColor = flex.Styles.Alternate.BackColor
' オーナー描画
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
End Sub
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
If e.Row >= flex.Rows.Fixed And e.Row Mod 2 = 1 Then
If e.Col < flex.Cols.Fixed + flex.Cols.Frozen Then
' 作成したカスタムスタイル1行おきに
' 固定/静止セルに設定
e.Style = flex.Styles("AlternateCell")
End If
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.Cols.Fixed = 1;
flex.Cols.Frozen = 1;
flex.Cols[0].Caption = "固定列";
flex.Cols[1].Caption = "静止列";
// Alternate プロパティを設定
flex.Styles.Alternate.BackColor = Color.SkyBlue;
// 静止セルの背景色を通常セルと同じにします
flex.Styles.Frozen.BackColor = flex.Styles.Normal.BackColor;
// Alternate と同じ背景色のカスタムスタイルを作成
flex.Styles.Add("AlternateCell");
flex.Styles["AlternateCell"].BackColor = flex.Styles.Alternate.BackColor;
// オーナー描画
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
}
private void flex_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
if ((e.Row % 2 == 1) && (e.Row >= flex.Rows.Fixed))
{
if (e.Col < flex.Cols.Fixed + flex.Cols.Frozen)
{
// 作成したカスタムスタイル1行おきに
// 固定/静止セルに設定
e.Style = flex.Styles["AlternateCell"];
}
}
}
関連項目
255
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
CellStyle クラス
スタイルエディタにアクセス
1行おきのスタイルを設定する
Excel スタイルのヘッダを使用する
ShowThemedHeaders プロパティをShowThemedHeadersEnum.None に設定し、組み込みスタイル
の SelectedRowHeader/SelectedColumnHeader を変更します。
【実行例】
Visual Basic コードの書き方
Visual Basic
flex.ShowThemedHeaders = C1.Win.C1FlexGrid.ShowThemedHeadersEnum.None
flex.Styles.SelectedRowHeader.BackColor = Color.Yellow
flex.Styles.SelectedColumnHeader.BackColor = Color.YellowGreen
C# コードの書き方
C#
flex.ShowThemedHeaders = C1.Win.C1FlexGrid.ShowThemedHeadersEnum.None;
flex.Styles.SelectedRowHeader.BackColor = Color.Yellow;
flex.Styles.SelectedColumnHeader.BackColor = Color.YellowGreen;
注意:
注意:SelectedColumnHeader/
/SelectedRowHeader スタイルは、行または列のヘッダがXPのテーマで描画されて
いない場合、およびVisualStyle プロパティがVisualStyle.Custom に設定されている場合に有効になります。
行/列の外観を変更する
列の外観を変更する
行および列の外観は Style プロパティで、特定の行/列ヘッダの外観は StyleFixed プロパティにて制御しま
256
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
す。StyleNew/StyleFixedNew プロパティで新しいスタイルを作成するか、作成したカスタムスタイルを行や列に適用しま
す。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 2列目の列ヘッダに新しいスタイルを作成、背景色・文字色を変更
flex.Cols(2).StyleFixedNew.BackColor = Color.YellowGreen
flex.Cols(2).StyleFixed.ForeColor = Color.LightPink
' 2列目に新しいスタイルを作成、背景色・文字色を変更
flex.Cols(2).StyleNew.BackColor = Color.Yellow
flex.Cols(2).Style.ForeColor = Color.Red
' 3行目に新しいスタイルを作成、背景色・文字色を変更
flex.Rows(3).StyleNew.BackColor = Color.Beige
flex.Rows(3).Style.ForeColor = Color.Blue
' 3行目の行ヘッダに新しいスタイルを作成、背景色・文字色を変更
flex.Rows(3).StyleFixedNew.BackColor = Color.Orange
flex.Rows(3).StyleFixed.ForeColor = Color.White
' データの設定
flex(0, 2) = "2列目"
flex(1, 2) = "1行2列"
flex(3, 0) = "3行目"
flex(3, 1) = "3行1列"
' カスタムスタイルを適用する場合
'flex.Styles.Add("Col2Style")
'flex.Styles("Col2Style").BackColor = Color.Yellow
'flex.Styles("Col2Style").ForeColor = Color.Red
'flex.Cols(2).Style = flex.Styles("Col2Style")
End Sub
257
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
rivate void Form1_Load(object sender, EventArgs e)
{
// 2列目の列ヘッダに新しいスタイルを作成、背景色・文字色を変更
flex.Cols[2].StyleFixedNew.BackColor = Color.YellowGreen;
flex.Cols[2].StyleFixed.ForeColor = Color.LightPink;
// 2列目に新しいスタイルを作成、背景色・文字色を変更
flex.Cols[2].StyleNew.BackColor = Color.Yellow;
flex.Cols[2].Style.ForeColor = Color.Red;
// 3行目に新しいスタイルを作成、背景色・文字色を変更
flex.Rows[3].StyleNew.BackColor = Color.Beige;
flex.Rows[3].Style.ForeColor = Color.Blue;
// 3行目の行ヘッダに新しいスタイルを作成、背景色・文字色を変更
flex.Rows[3].StyleFixedNew.BackColor = Color.Orange;
flex.Rows[3].StyleFixed.ForeColor = Color.White;
// データの設定
flex[0, 2] = "2列目";
flex[1, 2] = "1行2列";
flex[3, 0] = "3行目";
flex[3, 1] = "3行1列";
// カスタムスタイルを適用する場合
//flex.Styles.Add("Col2Style");
//flex.Styles["Col2Style"].BackColor = Color.Yellow;
//flex.Styles["Col2Style"].ForeColor = Color.Red;
//flex.Cols[2].Style = flex.Styles["Col2Style"];
}
注意:
行、列両方のスタイルが設定されている場合、列のスタイルが優先されます。
カスタムスタイルは、スタイルエディタからも作成できます。
関連項目
セルの外観
カスタムスタイルを作成する
スタイルエディタにアクセス
カスタムスタイルを作成する
Add メソッドで作成します。作成したカスタムスタイルは、行や列、セル(範囲)に自由に適用できます。
注意:
カスタムスタイルは繰り返し使用できます。同じ要素を持つスタイルを何度も作成しないようにしてください。
作成したカスタムスタイルの要素を変更すると、スタイルを適用しているすべてのセルが影響を受けます。
【実行例】
258
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' カスタムスタイルを作成します
flex.Styles.Add("CustomStyle1")
' スタイルの要素を変更します
flex.Styles("CustomStyle1").BackColor = Color.YellowGreen
flex.Styles("CustomStyle1").ForeColor = Color.AliceBlue
' 同じ処理です
'Dim cs As C1.Win.C1FlexGrid.CellStyle
'cs = flex.Styles.Add("CustomStyle1")
'cs.BackColor = Color.Red
'cs.ForeColor = Color.AliceBlue
' 行に適用します
flex.Rows(1).Style = flex.Styles("CustomStyle1")
' 列に適用します
flex.Cols(1).Style = flex.Styles("CustomStyle1")
' セルに適用します
flex.SetCellStyle(3, 4, "CustomStyle1")
' セル範囲に適用します
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(4, 2, 5, 3)
cr.Style = flex.Styles("CustomStyle1")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' ご注意
' 下記のようにスタイルの要素を変更すると、
' カスタムスタイル"CustomStyle1"を
' 適用したすべてのセルが影響を受けます
'flex.Cols(1).Style.BackColor = Color.Yellow
259
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' 回避するには、別のスタイルを適用します
flex.Styles.Add("CustomStyle2")
flex.Styles("CustomStyle2").BackColor = Color.Yellow
flex.Cols(1).Style = flex.Styles("CustomStyle2")
' または、スタイルをクリアして、再度スタイルを作成します
'flex.Cols(1).Clear(C1.Win.C1FlexGrid.ClearFlags.Style)
'flex.Cols(1).StyleNew.BackColor = Color.Yellow
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// カスタムスタイルを作成します
flex.Styles.Add("CustomStyle1");
// スタイルの要素を変更します
flex.Styles["CustomStyle1"].BackColor = Color.YellowGreen;
flex.Styles["CustomStyle1"].ForeColor = Color.AliceBlue;
// 同じ処理です
//C1.Win.C1FlexGrid.CellStyle cs;
//cs = flex.Styles.Add("CustomStyle1");
//cs.BackColor = Color.Red;
//cs.ForeColor = Color.AliceBlue;
// 行に適用します
flex.Rows[1].Style = flex.Styles["CustomStyle1"];
// 列に適用します
flex.Cols[1].Style = flex.Styles["CustomStyle1"];
// セルに適用します
flex.SetCellStyle(3, 4, "CustomStyle1");
// セル範囲に適用します
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(4, 2, 5, 3);
cr.Style = flex.Styles["CustomStyle1"];
}
private void button1_Click(object sender, EventArgs e)
{
// ご注意
// 下記のようにスタイルの要素を変更すると、
// カスタムスタイル"CustomStyle1"を
// 適用したすべてのセルが影響を受けます
//flex.Cols[1].Style.BackColor = Color.Yellow;
// 回避するには、別のスタイルを適用します
flex.Styles.Add("CustomStyle2");
flex.Styles["CustomStyle2"].BackColor = Color.Yellow;
flex.Cols[1].Style = flex.Styles["CustomStyle2"];
// または、スタイルをクリアして、再度スタイルを作成します
//flex.Cols[1].Clear(C1.Win.C1FlexGrid.ClearFlags.Style);
//flex.Cols[1].StyleNew.BackColor = Color.Yellow;
}
注意:
260
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
行、列両方のスタイルが設定されている場合、列のスタイルが優先されます。
カスタムスタイルは、スタイルエディタからも作成できます。
関連項目
セルの外観
セル(範囲)の外観を変更する
セル(範囲)の外観を変更する
カスタムスタイルを作成して任意のセル、セル範囲に適用します。スタイルの適用には、SetCellStyle メソッドやStyle プロパ
ティを使用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' カスタムスタイルを作成
Dim cs As C1.Win.C1FlexGrid.CellStyle
cs = flex.Styles.Add("OrangeStyle")
cs.BackColor = Color.Orange
' 2行3列目のセルに適用
flex.SetCellStyle(2, 3, "OrangeStyle")
' セル範囲に適用
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(5, 1, 6, 3)
cr.Style = flex.Styles("OrangeStyle")
End Sub
261
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// カスタムスタイルを作成
C1.Win.C1FlexGrid.CellStyle cs;
cs = flex.Styles.Add("OrangeStyle");
cs.BackColor = Color.Orange;
// 2行3列目のセルに適用
flex.SetCellStyle(2, 3, "OrangeStyle");
// セル範囲に適用
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(5, 1, 6, 3);
cr.Style = flex.Styles["OrangeStyle"];
}
注意:
行、列両方のスタイルが設定されている場合、列のスタイルが優先されます。
カスタムスタイルは、スタイルエディタからも作成できます。
関連項目
セルの外観
カスタムスタイルを作成する
適用したスタイルをクリアする
行や列の Clear メソッドやグリッドの Clear メソッドを使用します。
【実行例】 (クリア前)
262
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】 (クリア後)
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' カスタムスタイルを作成します
flex.Styles.Add("CustomStyle1")
' スタイルの要素を変更します
flex.Styles("CustomStyle1").BackColor = Color.YellowGreen
flex.Styles("CustomStyle1").ForeColor = Color.AliceBlue
' 行に適用します
flex.Rows(1).Style = flex.Styles("CustomStyle1")
' 列に適用します
263
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Cols(1).Style = flex.Styles("CustomStyle1")
' セルに適用します
flex.SetCellStyle(3, 4, "CustomStyle1")
' セル範囲に適用します
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(4, 2, 5, 3)
cr.Style = flex.Styles("CustomStyle1")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 1行目のスタイルをクリアします
flex.Rows(1).Clear(C1.Win.C1FlexGrid.ClearFlags.Style)
'flex.Rows(1).Style = Nothing
' 1列目のスタイルをクリアします
flex.Cols(1).Clear(C1.Win.C1FlexGrid.ClearFlags.Style)
'flex.Cols(1).Style = Nothing
' セルに設定したスタイルをクリアします
'flex.Clear(C1.Win.C1FlexGrid.ClearFlags.Style, 3, 4)
' セル範囲に設定したスタイルをクリアします
'flex.Clear(C1.Win.C1FlexGrid.ClearFlags.Style, 4, 2, 5, 3)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// カスタムスタイルを作成します
flex.Styles.Add("CustomStyle1");
// スタイルの要素を変更します
flex.Styles["CustomStyle1"].BackColor = Color.YellowGreen;
flex.Styles["CustomStyle1"].ForeColor = Color.AliceBlue;
// 行に適用します
flex.Rows[1].Style = flex.Styles["CustomStyle1"];
// 列に適用します
flex.Cols[1].Style = flex.Styles["CustomStyle1"];
// セルに適用します
flex.SetCellStyle(3, 4, "CustomStyle1");
// セル範囲に適用します
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(4, 2, 5, 3);
cr.Style = flex.Styles["CustomStyle1"];
}
private void button1_Click(object sender, EventArgs e)
{
// 1行目のスタイルをクリアします
flex.Rows[1].Clear(C1.Win.C1FlexGrid.ClearFlags.Style);
//flex.Rows[1].Style = null;
// 1列目のスタイルをクリアします
flex.Cols[1].Clear(C1.Win.C1FlexGrid.ClearFlags.Style);
//flex.Cols[1].Style = null;
264
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
//// セルに設定したスタイルをクリアします
//flex.Clear(C1.Win.C1FlexGrid.ClearFlags.Style, 3, 4);
//// セル範囲に設定したスタイルをクリアします
//flex.Clear(C1.Win.C1FlexGrid.ClearFlags.Style, 4, 2, 5, 3);
}
注意:
注意:スタイルの各要素のみをクリアする(デフォルトに戻す)処理については、「スタイル要素の設定をクリアする」を参
照してください。
データの内容に応じてスタイルを適用する
CellChanged イベントまたは ValidateEdit イベントを使用して編集後のデータを取得・判別し、作成したカスタムスタイルを
適用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 大きな値に適用するカスタムスタイルを作成します
Dim cs As C1.Win.C1FlexGrid.CellStyle
cs = flex.Styles.Add("BigValue")
cs.Font = New Font(Font, FontStyle.Italic)
cs.BackColor = Color.Gold
End Sub
' ValidateEditイベントを使用する場合
Private Sub flex_ValidateEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.ValidateEditEventArgs) Handles flex.ValidateEdit
' 50,000より大きい値の場合、カスタムスタイルを適用します
' それ以外はスタイルに Nothing を設定してリセットします
Dim cs As C1.Win.C1FlexGrid.CellStyle
265
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
cs = Nothing
If Val(flex.Editor.Text) >= 50000 Then
cs = flex.Styles("BigValue")
End If
flex.SetCellStyle(e.Row, e.Col, cs)
End Sub
'Private Sub flex_CellChanged(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.CellChanged
' 50,000より大きい値の場合、カスタムスタイルを適用します
' それ以外はスタイルに Nothing を設定してリセットします
' Dim cs As C1.Win.C1FlexGrid.CellStyle
' cs = Nothing
' If Val(flex(e.Row, e.Col)) >= 50000 Then
' cs = flex.Styles("BigValue")
' End If
' flex.SetCellStyle(e.Row, e.Col, cs)
'End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 大きな値に適用するカスタムスタイルを作成します
C1.Win.C1FlexGrid.CellStyle cs;
cs = flex.Styles.Add("BigValue");
cs.Font = new Font(Font, FontStyle.Italic);
cs.BackColor = Color.Gold;
}
// ValidateEditイベントを使用する場合
private void flex_ValidateEdit(object sender, C1.Win.C1FlexGrid.ValidateEditEventArgs
e)
{
// 50,000より大きい値の場合、カスタムスタイルを適用します
// それ以外はスタイルに null を設定してリセットします
C1.Win.C1FlexGrid.CellStyle cs;
cs = null;
if (int.Parse(flex.Editor.Text) >= 50000)
{
cs = flex.Styles["BigValue"];
}
flex.SetCellStyle(e.Row, e.Col, cs);
}
//private void flex_CellChanged(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
//{
// 50,000より大きい値の場合、カスタムスタイルを適用します
//
// それ以外はスタイルに null を設定してリセットします
//C1.Win.C1FlexGrid.CellStyle cs;
// cs = null;
// if (int.Parse(flex[e.Row, e.Col].ToString()) >= 50000)
// {
// cs = flex.Styles["BigValue"];
266
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// }
// flex.SetCellStyle(e.Row, e.Col, cs);
//}
カスタムスタイルは、設計時に作成することもできます。次の手順では、スタイルエディタを使用して BigValue という新し
いCellStyle を作成し、BackColor プロパティを Gold に設定します。
1. [スタイルエディタ
スタイルエディタ]を開きます。スタイルエディタ
スタイルエディタへのアクセス方法の詳細については、「スタイルエディタにアクセス」を
参照してください。
2. 〈追加
追加〉をクリックし、新しいスタイルを作成します。
3. CustomStyle1 をダブルクリックし、名前を BigValue に変更します。終わったら[Enter]を押します。
4. 右ペインの BackColor プロパティを探し、それを Gold に設定します。
5. Font プロパティを探し、その横の〈...〉ボタンをクリックして[フォント
フォント]ダイアログボックスを開きます。
6. [スタイル
スタイル]ボックスで斜体
斜体に設定します。
267
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
7. 〈OK〉をクリックし、[フォント
フォント]ダイアログを閉じます。
8. 〈OK〉をクリックし、[FlexGrid スタイルエディタ
スタイルエディタ]を閉じます。
関連項目
セルの外観
カスタムスタイルを作成する
設定したスタイルを優先させる
カスタムスタイルを作成し、行や列、セルに適用している場合でも、フォーカスのあるセルやハイライト(選択)されているセルの
外観は、Focus や Highlight といった組み込みスタイルにて制御されることになります。
FocusやHiglightの外観よりも優先させたい外観がある場合は、オーナー描画の機能を使用します。OwnerDrawCell イベン
ト内で任意のセルにスタイルを適用することで、フォーカスが移動した際やハイライトされた場合でも、変更したセルの外観が
表示されます。下記サンプルコードでは、3行目を通常のカスタムスタイルで、5行目をオーナー描画で外観を変更しています。
5行目のみ変更したスタイルが優先されていることを確認してください。
【実行例】
268
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
With flex
.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.Row
.Styles.Highlight.BackColor = Color.Blue
.Styles.Highlight.ForeColor = Color.Red
.Styles.Focus.BackColor = Color.Yellow
.Styles.Focus.ForeColor = Color.Black
End With
' 通常のカスタムスタイル
' FocusやHiglightの外観が優先される
flex.Styles.Add("Style1")
With flex.Styles("Style1")
.BackColor = Color.Red
.ForeColor = Color.Yellow
End With
flex.Rows(3).Style = flex.Styles("Style1")
' オーナー描画
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
End Sub
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
' オーナー描画の利用
' FocusやHiglightの外観よりも優先される
If e.Row = 5 And e.Col >= flex.Cols.Fixed Then
e.Style = flex.Styles("Style1")
End If
End Sub
C# コードの書き方
269
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.Row;
flex.Styles.Highlight.BackColor = Color.Blue;
flex.Styles.Highlight.ForeColor = Color.Red;
flex.Styles.Focus.BackColor = Color.Yellow;
flex.Styles.Focus.ForeColor = Color.Black;
// 通常のカスタムスタイル
// FocusやHiglightの外観が優先される
flex.Styles.Add("Style1");
flex.Styles["Style1"].BackColor = Color.Red;
flex.Styles["Style1"].ForeColor = Color.Yellow;
flex.Rows[3].Style = flex.Styles["Style1"];
// オーナー描画
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
}
private void flex_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
// オーナー描画の利用
// FocusやHiglightの外観よりも優先される
if ((e.Row == 5) && (e.Col >= flex.Cols.Fixed))
{
e.Style = flex.Styles["Style1"];
}
}
関連項目
セルの外観
組み込みスタイルの位置について
カスタムスタイルを作成する
スタイルの要素
「セルの外観」にもありますが、CellStyle オブジェクトには背景色やフォント、データ型、エディタ、コンボボックスなど様々な要
素があります。このトピックで紹介している以外にもスタイルの要素はありますが、基本的な使用方法は同じです。スタイルの
要素を理解し、組み込みスタイルやカスタムスタイル、行/列のスタイルをを使用することで FlexGrid の外観や動作を簡単に
変更することができます。
スタイルの要素については、CellStyle クラスを参照してください。(組み込み、カスタム)スタイルを設定してグリッドや行、列、
セルの外観を変更する例は、これ以前のトピックを参照してください。また、カスタムスタイルや組み込みスタイル、列のスタイ
ルは設計時にデザイナ画面を通じて設定することができます。詳細については、「設計時のサポート」を参照してください。
背景色/文字色を変更する
スタイルの要素:BackColor プロパティを変更します。
【実行例】
270
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 背景色/文字色を変更する
' この例ではカスタムスタイルを作成して
' 行に適用します
flex.Styles.Add("YellowCell")
flex.Styles("YellowCell").BackColor = Color.Yellow
flex.Styles("YellowCell").ForeColor = Color.Red
flex.Rows(2).Style = flex.Styles("YellowCell")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 背景色/文字色を変更する
// この例ではカスタムスタイルを作成して
// 行に適用します
flex.Styles.Add("YellowCell");
flex.Styles["YellowCell"].BackColor = Color.Yellow;
flex.Styles["YellowCell"].ForeColor = Color.Red;
flex.Rows[2].Style = flex.Styles["YellowCell"];
}
フォントを変更する
スタイルの要素: Font プロパティを変更します。
271
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' この例ではカスタムスタイルを作成して
' 列に適用します
flex.Styles.Add("ItalicStyle")
flex.Styles("ItalicStyle").Font = New Font("verdana", 10, FontStyle.Italic)
flex.Styles("ItalicStyle").BackColor = Color.AliceBlue
flex.Cols(2).Style = flex.Styles("ItalicStyle")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// この例ではカスタムスタイルを作成して
// 列に適用します
flex.Styles.Add("ItalicStyle");
flex.Styles["ItalicStyle"].Font = new Font("verdana", 10, FontStyle.Italic);
flex.Styles["ItalicStyle"].BackColor = Color.AliceBlue;
flex.Cols[2].Style = flex.Styles["ItalicStyle"];
}
注意:
注意:Font プロパティの詳細は、MSDN を参照してください。
データの表示位置を変更する
スタイルの要素: TextAlign プロパティを使用します。データの表示位置は、行/列の TextAlign プロパティを使用しても変
272
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
更できます。
【実行例】
Visual Basic コードの書き方
Visual Basic
' データの表示位置を変更する
' この例では列のスタイルを作成して設定します
flex.Cols(2).StyleNew.ForeColor = Color.Red
flex.Cols(2).Style.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.RightBottom
' flex.Cols(2).TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter
C# コードの書き方
C#
// データの表示位置を変更する
// この例では列のスタイルを作成して設定します
flex.Cols[2].StyleNew.ForeColor = Color.Red;
flex.Cols[2].Style.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.RightBottom;
//flex.Cols[2].TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter;
画像の表示位置を変更する
スタイルの要素: ImageAlign プロパティを使用します。画像の表示位置は、行/列の ImageAlign プロパティを使用しても
変更できます。
【実行例】
273
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' 画像の表示位置を変更する
' この例では列のスタイルを作成して設定します
flex.Cols(2).StyleNew.ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.CenterCenter
' flex.Cols(2).ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.CenterCenter
flex.SetCellImage(2, 2, New Bitmap("c1icon.gif"))
C# コードの書き方
C#
// 画像の表示位置を変更する
// この例では列のスタイルを作成して設定します
flex.Cols[2].StyleNew.ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.CenterCenter;
//flex.Cols[2].ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.CenterCenter;
flex.SetCellImage(2, 2, new Bitmap("c1icon.gif"));
3Dテキストを表示する
テキストを表示する
スタイルの要素:TextEffect プロパティを使用します。TextEffectEnum.Inset または TextEffectEnum.Raised に設定する
ことで3D効果のテキストを表示できます。
【実行例】
274
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' この例では Fixed 組み込みスタイルを変更しています
' 固定セル全体が3Dテキストで表示されます
flex.Styles.Fixed.TextEffect = C1.Win.C1FlexGrid.TextEffectEnum.Raised
flex.Cols(1).Caption = "1列目"
flex.Rows(3).Caption = "3行目"
C# コードの書き方
C#
// この例では Fixed 組み込みスタイルを変更しています
/ 固定セル全体が3Dテキストで表示されます
flex.Styles.Fixed.TextEffect = C1.Win.C1FlexGrid.TextEffectEnum.Raised;
flex.Cols[1].Caption = "1列目";
flex.Rows[3].Caption = "3行目";
背景画像を設定する
スタイルの要素:BackgroundImage プロパティを使用します。
【実行例】
275
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' この例ではカスタムスタイルを作成、適用します
Dim cs As C1.Win.C1FlexGrid.CellStyle
cs = flex.Styles.Add("CustomImage")
' スタイルの要素:BackgroundImageを設定
' 背景画像を設定します
cs.BackgroundImage = New Bitmap("logo_grapecity.jpg")
cs.BackgroundImageLayout = C1.Win.C1FlexGrid.ImageAlignEnum.Stretch
cs.ForeColor = Color.Orange
cs.Font = New Font("verdana", 12, FontStyle.Bold Or FontStyle.Italic)
cs.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.LeftTop
' セル範囲を取得
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(2, 1, 3, 3)
' セルの結合
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom
flex.MergedRanges.Add(cr)
cr.Data = "PowerTools"
' セル範囲にスタイルを適用
cr.Style = flex.Styles("CustomImage")
C# コードの書き方
C#
// この例ではカスタムスタイルを作成、適用します
C1.Win.C1FlexGrid.CellStyle cs;
cs = flex.Styles.Add("CustomImage");
// スタイルの要素:BackgroundImageを設定
// 背景画像を設定します
cs.BackgroundImage = new Bitmap("logo_grapecity.jpg");
cs.BackgroundImageLayout = C1.Win.C1FlexGrid.ImageAlignEnum.Stretch;
cs.ForeColor = Color.Orange;
276
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
cs.Font = new Font("verdana", 12, FontStyle.Bold
cs.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.LeftTop;
// セル範囲を取得
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(2, 1, 3, 3);
// セルの結合
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom;
flex.MergedRanges.Add(cr);
cr.Data = "PowerTools";
// セル範囲にスタイルを適用
cr.Style = flex.Styles["CustomImage"];
関連項目
グリッドの背景画像を設定する
透明度を指定して背景画像を設定する
折り返して表示する
スタイルの要素:WordWrapプロパティを使用します。True(デフォルト:False)に設定すると、自動的に折り返して表示されま
す。
【実行例】
.
Visual Basic コードの書き方
Visual Basic
' この例では組み込みの Normal スタイルを使用しています
flex.Styles.Normal.WordWrap = True
flex(1, 1) = "テキストを折り返して表示"
' 行の高さを調整します
flex.AutoSizeRow(1)
277
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
// この例では組み込みの Normal スタイルを使用しています
flex.Styles.Normal.WordWrap = true;
flex[1, 1] = "テキストを折り返して表示";
// 行の高さを調整します
flex.AutoSizeRow(1);
注意:
注意:WordWrap プロパティを True に設定してテキストを折り返して表示しても、すべてのテキストが表示されるよう自
動的に行の高さが調整されるわけではありません。AutoSizeRow / AutoSizeRows メソッドなどを使用して調整する
必要があります。製品付属の「AutoSizeEditサンプル
サンプル」やトピック:「行の高さ/列の幅を変更する」を参照してください。
トリミングして表示する
スタイルの要素:Trimming プロパティ(デフォルト:StringTrimming.None)を設定します。セル内に収まらない長いテキスト
が切り詰められて表示されます。
【実行例】
.
Visual Basic コードの書き方
Visual Basic
' トリミングして表示する
' この例では列のスタイルを使用しています
flex.Cols(1).StyleNew.Trimming = StringTrimming.EllipsisCharacter
flex(1, 1) = "トリミングして表示する"
C# コードの書き方
C#
// トリミングして表示する
278
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// この例では列のスタイルを使用しています
flex.Cols[1].StyleNew.Trimming = StringTrimming.EllipsisCharacter;
flex[1, 1] = "トリミングして表示する";
注意:
注意:StringTrimming 列挙体
列挙体の詳細については、MSDN を参照してください。
縦書きで表示する
スタイルの要素:TextDirection プロパティ(デフォルト:TextDirectionEnum.Normal)を設定しま
す。TextDirectionEnum.Down の場合は上から下へ、TextDirectionEnum.Up の場合は下から上へテキストが描画され
ます。
【実行例】
.
Visual Basic コードの書き方
Visual Basic
' 縦書きで表示する
' この例では行・列のスタイルを使用しています
flex.Rows(1).StyleNew.BackColor = Color.Yellow
flex.Rows(1).Style.TextDirection = C1.Win.C1FlexGrid.TextDirectionEnum.Down
flex.Rows(2).StyleNew.BackColor = Color.YellowGreen
flex.Rows(2).Style.TextDirection = C1.Win.C1FlexGrid.TextDirectionEnum.Up
flex.Cols(3).StyleNew.BackColor = Color.AliceBlue
flex.Cols(3).Style.TextDirection = C1.Win.C1FlexGrid.TextDirectionEnum.Normal
flex.Styles.Normal.Font = New Font("verdana", 11)
flex(1, 1) = "Down"
flex(1, 2) = "ダウン"
flex(2, 1) = "Up"
flex(2, 2) = "アップ"
flex(1, 3) = "Normal"
flex(2, 3) = "ノーマル"
279
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
// 縦書きで表示する
// この例では行・列のスタイルを使用しています
flex.Rows[1].StyleNew.BackColor = Color.Yellow;
flex.Rows[1].Style.TextDirection = C1.Win.C1FlexGrid.TextDirectionEnum.Down;
flex.Rows[2].StyleNew.BackColor = Color.YellowGreen;
flex.Rows[2].Style.TextDirection = C1.Win.C1FlexGrid.TextDirectionEnum.Up;
flex.Cols[3].StyleNew.BackColor = Color.AliceBlue;
flex.Cols[3].Style.TextDirection = C1.Win.C1FlexGrid.TextDirectionEnum.Normal;
flex.Styles.Normal.Font = new Font("verdana", 11);
flex[1, 1] = "Down";
flex[1, 2] = "ダウン";
flex[2, 1] = "Up";
flex[2, 2] = "アップ";
flex[1, 3] = "Normal";
flex[2, 3] = "ノーマル";
注意:
半角英数字は、実行例のように横書きのまま上から下(または下から上)へ描画されます。
2バイト文字は、
バイト文字は、TextDirectionEnum.Downまたは
またはTextDirectionEnum.Upのどちらを設定しても、実行例の
のどちらを設定しても、実行例の
ように上から下へ描画されます。
TextDirection プロパティの設定を行っても入力時は通常どおり横書きとなります。入力後に TextDirection プロ
パティの設定でセルの内容がレンダリングされるのみとなります。
行と列のスタイルが同時に設定された場合、列のスタイルが優先されます。
データ型を設定する
スタイルの要素:DataType プロパティを使用します。
【実行例】
280
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
.
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' データ型を設定する
' この例ではカスタムスタイルを作成してセルに適用します
flex.Styles.Add("CheckStyle")
flex.Styles("CheckStyle").DataType = GetType(Boolean)
flex.Styles("CheckStyle").BackColor = Color.AliceBlue
flex.Styles("CheckStyle").ImageAlign =
C1.Win.C1FlexGrid.ImageAlignEnum.CenterCenter
' 3行2列目のセルに適用
flex.SetCellStyle(3, 2, "CheckStyle")
' セル範囲に適用
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(6, 1, 7, 4)
cr.Style = flex.Styles("CheckStyle")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// データ型を設定する
// この例ではカスタムスタイルを作成してセルに適用します
flex.Styles.Add("CheckStyle");
flex.Styles["CheckStyle"].DataType = typeof(bool);
flex.Styles["CheckStyle"].BackColor = Color.AliceBlue;
flex.Styles["CheckStyle"].ImageAlign =
C1.Win.C1FlexGrid.ImageAlignEnum.CenterCenter;
// 3行2列目のセルに適用
281
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.SetCellStyle(3, 2, "CheckStyle");
// セル範囲に適用
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(6, 1, 7, 4);
cr.Style = flex.Styles["CheckStyle"];
}
注意:
GetType メソッドや typeof 式の詳細は、MSDN を参照してください。
行や列単位でデータ型を設定する方法は、「データ型を設定する」を参照してください。
連結(バウンド)モードのグリッドにおけるセルのデータ型は、C1FlexGrid コントロールと接続しているデータソー
スに依存します。
書式を設定する
スタイルの要素:Format プロパティを使用します。
注意:
注意:Format プロパティを設定したセル(列)の DataType プロパティが、Int32やDouble等の数値型や日付型に設定さ
れていることを確認してください。Format プロパティは数値や日付データの書式を行うための機能ですので、DataType
プロパティが Object や String 等に設定されている場合には機能しません。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 書式を設定する
' この例ではカスタムスタイルを作成してセルに適用します
flex.Cols(1).DataType = GetType(Date)
flex.Styles.Add("LongDateStyle")
282
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Styles("LongDateStyle").Format = "D"
flex.Styles("LongDateStyle").BackColor = Color.AliceBlue
' 3行1列目のセルに適用
flex.SetCellStyle(3, 1, "LongDateStyle")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 書式を設定する
// この例ではカスタムスタイルを作成してセルに適用します
flex.Cols[1].DataType = typeof(DateTime);
flex.Styles.Add("LongDateStyle");
flex.Styles["LongDateStyle"].Format = "D";
flex.Styles["LongDateStyle"].BackColor = Color.AliceBlue;
// 3行1列目のセルに適用
flex.SetCellStyle(3, 1, "LongDateStyle");
}
注意:
GetType メソッドや typeof 式の詳細は、MSDN を参照してください。
数値型、日付型の書式指定についての詳細は、MSDN を参照してください。
行や列単位で書式を設定する方法は、「行列の書式を設定する」を参照してください。
マージンを設定する
スタイルの要素:Margins プロパティを使用します。セルの端から内容までのマージンをピクセル単位で設定できます。
【実行例】
.
283
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
rivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' マージンを設定する
' この例ではカスタムスタイルを作成して行に適用します
' 通常セルのスタイルを左寄せに設定
flex.Styles.Normal.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.LeftCenter
' カスタムスタイルを作成
Dim cs As C1.Win.C1FlexGrid.CellStyle = flex.Styles.Add("MyMargins")
cs.BackColor = Color.AliceBlue
' 親スタイルからマージンのクローンオブジェクトを作成
cs.Margins = CType(flex.Styles.Normal.Margins.Clone(),
System.Drawing.Printing.Margins)
' 左側のマージンを設定
cs.Margins.Left = 10
' 3行目に設定
flex.Rows(3).Style = flex.Styles("MyMargins")
flex.Rows(3).Caption = "3行目"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// マージンを設定する
// この例ではカスタムスタイルを作成して行に適用します
// 通常セルのスタイルを左寄せに設定
flex.Styles.Normal.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.LeftCenter;
// カスタムスタイルを作成
C1.Win.C1FlexGrid.CellStyle cs = flex.Styles.Add("MyMargins");
cs.BackColor = Color.AliceBlue;
// 親スタイルからマージンのクローンオブジェクトを作成
cs.Margins = (System.Drawing.Printing.Margins)flex.Styles.Normal.Margins.Clone();
// 左側のマージンを設定
cs.Margins.Left = 10;
// 3行目に設定
flex.Rows[3].Style = flex.Styles["MyMargins"];
flex.Rows[3].Caption = "3行目";
}
注意:
注意:Margins クラス(System.Drawing.Printing)についての詳細は、MSDN を参照してください。
スタイル要素の設定をクリアする
Clear メソッドを使用します。StyleElementFlags 列挙体でクリアするスタイル要素を指定します。
【実行例】(
【実行例】(Clear メソッド実行前)
284
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】(
【実行例】(Clear メソッド実行後)
メソッド実行後):
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' この例では行のスタイルを使用しています
' 1列目のスタイル要素を設定
flex.Cols(1).StyleNew.BackColor = Color.Yellow
flex.Cols(1).Style.ForeColor = Color.Red
flex.Cols(1).Style.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter
flex.Cols(1).Style.DataType = GetType(Date)
flex.Cols(1).Style.Format = "yy/MM/dd"
285
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 背景色の設定をクリアします
flex.Cols(1).Style.Clear(C1.Win.C1FlexGrid.StyleElementFlags.BackColor)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// この例では行のスタイルを使用しています
// 1列目のスタイル要素を設定
flex.Cols[1].StyleNew.BackColor = Color.Yellow;
flex.Cols[1].Style.ForeColor = Color.Red;
flex.Cols[1].Style.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter;
flex.Cols[1].Style.DataType = typeof(bool);
flex.Cols[1].Style.Format = "yy/MM/dd";
}
private void button1_Click(object sender, EventArgs e)
{
// 背景色の設定をクリアします
flex.Cols[1].Style.Clear(C1.Win.C1FlexGrid.StyleElementFlags.BackColor);
}
注意:
注意:設定されているスタイル自体をクリアする方法については、「適用したスタイルをクリアする」を参照してください。
行/列
列
行/列に関するタスクを デザイン と操作 に分けて紹介します。
デザイン
固定行列や静止行列、行列ヘッダなどを使用してグリッドのデザインを変更するタスクを紹介します。
行列数を設定する
行数は RowCollection の Count プロパティ、列数はColumnCollection の Count プロパティにより設定します。
【実行例】
286
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 行数:12
flex.Rows.Count = 12
' 列数:5
flex.Cols.Count = 5
' データ設定
For i As Integer = 0 To flex.Rows.Count - 1
flex(i, 0) = i
Next
For i As Integer = 0 To flex.Cols.Count - 1
flex(0, i) = i
Next
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 行数:12
flex.Rows.Count = 12;
// 列数:5
flex.Cols.Count = 5;
// データ設定
for (int i = 0; i < flex.Rows.Count; i++)
{
flex[i, 0] = i;
}
for (int i = 0; i < flex.Cols.Count; i++)
287
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
{
flex[0, i] = i;
}
}
注意:
注意:連結(バウンド)モード時の行数・列数は、C1FlexGrid と接続しているデータソースに依存します。連結モードのグ
リッドで列数を設定すると非連結列
非連結列として追加されますが、行数を設定した場合は例外が発生します。
固定行または固定列を設定する
固定行数は RowCollection の Fixed プロパティ、固定列数は ColumnCollection の Fixed プロパティにて設定します。固
定行はユーザーがグリッドを垂直方向にスクロールしても常にグリッドの一番上に、固定列はユーザーがグリッドを水平方向
にスクロールしても常にグリッドの左端に表示される編集不可のセルです。
【実行例】
Visual Basic コードの書き方
Visual Basic
' 行数:50
flex.Rows.Count
' 固定行数:3
flex.Rows.Fixed
' 列数:10
flex.Cols.Count
' 固定列数:2
flex.Cols.Fixed
= 50
= 3
= 10
= 2
C# コードの書き方
C#
// 行数:50
288
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Rows.Count
// 固定行数:3
flex.Rows.Fixed
// 列数:10
flex.Cols.Count
// 固定列数:2
flex.Cols.Fixed
= 50;
= 3;
= 10;
= 2;
関連項目
行列数を設定する
静止行または静止列を設定する
静止行または静止列を設定する
静止行数は RowCollection の Frozen プロパティ、静止列数は ColumnCollection の Frozen プロパティにて設定します。
静止行・静止列は、固定行・固定列と同様にスクロールされませんが、ユーザーによる編集が可能です。
【実行例】
Visual Basic コードの書き方
Visual Basic
行数:50
flex.Rows.Count = 50
' 固定行数:1
flex.Rows.Fixed = 1
' 静止行数:3
289
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Rows.Frozen = 3
' 列数:10
flex.Cols.Count = 10
' 固定列数:0
flex.Cols.Fixed = 0
' 静止列数:2
flex.Cols.Frozen = 2
C# コードの書き方
C#
// 行数:50
flex.Rows.Count = 50;
// 固定行数:1
flex.Rows.Fixed = 1;
// 静止行数:3
flex.Rows.Frozen = 3;
// 列数:10
flex.Cols.Count = 10;
// 固定列数:0
flex.Cols.Fixed = 0;
// 静止列数:2
flex.Cols.Frozen = 2;
関連項目
行列数を設定する
固定行または固定列を設定する
列ヘッダを設定する
Caption プロパティ、または直接セルに値を設定します。
290
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
For i As Integer = flex.Cols.Fixed To flex.Cols.Count - 1
flex.Cols(i).Caption = "Col" & i
' 直接セルに設定する場合
' flex(0, i) = "Col" & i
Next
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
for (int i = flex.Cols.Fixed; i < flex.Cols.Count; i++)
{
flex.Cols[i].Caption = "Col" + i.ToString();
// 直接セルに設定する場合
//flex[0, i] = "Col" + i.ToString();
}
}
注意:
直接セルに値を設定する方法については、「セルに値を設定する」を参照してください。
C1FlexGrid を連結モードで使用した場合、デフォルトでは Caption プロパティ、Name プロパティにはデータ
ソースの列名が設定されます。
固定行を複数にしている場合、Caption プロパティの設定は0行目になります。
291
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
関連項目
行列数を設定する
固定行または固定列を設定する
行ヘッダを設定する
Caption プロパティ、または直接セルに値を設定します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
For i As Integer = flex.Rows.Fixed To flex.Rows.Count - 1
flex.Rows(i).Caption = "Row" & i
' 直接セルに表示する場合
' flex(i, 0) = "Row" & i
Next
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
for (int i = flex.Rows.Fixed; i < flex.Rows.Count; i++)
{
flex.Rows[i].Caption = "Row" + i.ToString();
292
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// 直接セルに表示する場合
//flex[i, 0] = "Row" + i.ToString();
}
}
注意:
直接セルに値を設定する方法については、「セルに値を設定する」を参照してください。
固定列を複数にしている場合、Caption プロパティの設定は0列目になります。
関連項目
行列数を設定する
固定行または固定列を設定する
すべての行の高さ/列の幅を変更する
DefaultSize プロパティを変更します。(デフォルトは行:16pix、列:80pix)
DefaultSize プロパティは行の高さ/列幅のデフォルト値です。Height プロパティに-1が設定されている行は、デフォルトの
高さが使用されます。同様に、Width プロパティが-1になっている列は、デフォルトの幅が使用されます。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex.Rows.Count = 5
flex.Cols.Count = 10
' すべての行の高さを変更
flex.Rows.DefaultSize = 30
293
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' すべての列の幅を変更
flex.Cols.DefaultSize = 30
End Sub
<
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.Rows.Count = 5;
flex.Cols.Count = 10;
// すべての行の高さを変更
flex.Rows.DefaultSize = 30;
// すべての列の幅を変更
flex.Cols.DefaultSize = 30;
}
注意:
グリッドの Font プロパティに新しい値を設定すると、DefaultSize プロパティはそのフォントに合わせて自動調
整されます。
Height や Width プロパティはデフォルトが -1 のため、実際のサイズを参照する際
は、HeightDisplay/WidthDisplay プロパティを使用します。
連結(バウンド)モードで DefaultSize プロパティを設定する場合は、データソースと連結する前にAutoResize
プロパティを False(デフォルト)に設定して列幅の自動調整を行わないようにする必要があります。
行の高さ/列の幅を変更する
各行の高さを変更するには Height プロパティを、各列の幅を変更するには Width プロパティを設定します。(デフォルトは 1)
【実行例】
294
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' 2行目の高さを変更します
flex.Rows(2).Height = 40
' 2列目の幅を変更します
flex.Cols(2).Width = 120
C# コードの書き方
C#
// 2行目の高さを変更します
flex.Rows[2].Height = 40;
// 2列目の幅を変更します
flex.Cols[2].Width = 120;
注意:
Height や Width プロパティは、デフォルトが -1 のため、実際のサイズを参照する際
は、HeightDisplay/WidthDisplay プロパティを使用します。
各列の幅は、設計時にデザイン画面や列エディタを通して設定することも可能です。
関連項目
列エディタにアクセス
自動で列幅を調整する
デザイン時に設定した列幅が無効になってしまう場合の対処方法
データソースとグリッドを接続する前に列幅などを設定している場合
データソースとグリッドを接続する前、つまり DataSource プロパティを設定する前に、列幅や列名を設定した場合、列幅など
の設定はデータソースになにも設定していないグリッドに対して行っていることになります。また、グリッドにデータソースを設定
した時点でグリッドはデータソースの内容(情報)で列の設定を再構築します。そのため、DataSource プロパティによりデータ
ソースが設定されると、データソースになにも設定されていないグリッドに対して行われた列幅などの設定は、データソースと
接続後のグリッドの設定に上書きされることになります。
バウンドモードで使用するグリッドに対して列幅や列名などを設定する場合は、データソースを設定した後のグリッドに対して、
列幅などの設定を行う必要があります。設計時にプロパティウィンドウから DataSource プロパティを設定後、列エディタにて
列名や列幅などを設定するか、Form_Load イベントなどで DataSource プロパティを設定後、列名や列幅をコードで設定してく
ださい。
上記以外の場合
データソースを設定後にデザイナより列幅を変更しているにも関わらず、列幅が無効になってしまう場合は、AutoResize プロ
パティの設定を確認してください。AutoResize プロパティが True(デフォルト値:False)になっている場合、データ読み込み時
に列幅が自動的に調整され、コントロールは列幅を最も幅の広い入力データに合わせてリサイズします。
関連項目
295
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
列エディタにアクセス
自動で列幅を調整する
列の順序を変更する
列の順序を変更するには、デザイナで列をグリッド内の新しい位置にドラッグするか、列エディタ を使用するか、実行時にコー
ドで MoveRange メソッドを設定します。
デザイナの場合
1. グリッドで、移動する列を選択します。この例では、C列を移動します。
2. 列をクリックして左にドラッグします。列をドロップできる場所に縦の点線が表示されます。
3. B列の前にC列をドロップします。
296
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
[FlexGrid 列エディタ
列エディタ]の場合
の場合
1. 列エディタ を開きます。[FlexGrid 列エディタ
列エディタ]へのアクセス方法の詳細については、「列エディタにアクセス 」を参照し
てください。
2. デザイナで、移動する列を選択します。この例では、C列を移動します。.
3. 列をクリックして左にドラッグします。列をドロップできる場所に縦の点線が表示されます。
4. B列の前にC列をドロップします。
297
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
5. 〈OK〉をクリックし、エディタを閉じます。
コードの場合
以下のコードにて、列3(この例ではC列)を列2の位置に移動します。
Visual Basic コードの書き方
Visual Basic
flex.Cols.MoveRange(3, 1, 2)
298
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
flex.Cols.MoveRange(3, 1, 2);
【実行例】
行列のデータ型を設定する
行や列単位でデータ型を設定するには、DataType プロパティを使用します。
【実行例】
299
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 2列目のデータ型を設定
flex.Cols(2).DataType = GetType(Date)
flex.Cols(2).Caption = "Date型"
' 3行目のデータ型を設定
flex.Rows(3).DataType = GetType(Boolean)
flex.Rows(3).Caption = "Boolean型"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 2列目のデータ型を設定
flex.Cols[2].DataType = typeof(DateTime);
flex.Cols[2].Caption = "DateTime型";
// 3行目のデータ型を設定
flex.Rows[3].DataType = typeof(bool);
flex.Rows[3].Caption = "bool型";
}
注意:
GetType メソッドや typeof 式の詳細は、MSDNを参照してください。
DataType プロパティは設計時に設定することも可能です。
行、列両方のデータ型が設定されている場合、列の設定が優先されます。
連結(バウンド)モードのグリッドにおける列のデータ型は、C1FlexGrid と接続しているデータソースに依存しま
す。
関連項目
列エディタ
Column タスク
データ型を設定する
行列の書式を設定する
行や列単位で書式を設定するには、Format プロパティを使用します。
注意:
注意:Format プロパティを設定したセル(列)の DataType プロパティが、Int32やDouble等の数値型や日付型に設定さ
れていることを確認してください。Format プロパティは数値や日付データの書式を行うための機能ですので、DataType
プロパティが Object や String 等に設定されている場合には機能しません。
【実行例】
300
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 2列目のデータ型を設定
flex.Cols(2).DataType = GetType(Date)
' 2列目の書式を設定
flex.Cols(2).Format = "D"
flex.Cols(2).Caption = "長い日付"
' 3行目のデータ型を設定
flex.Rows(3).DataType = GetType(Date)
' 3行目の書式を設定
flex.Rows(3).Format = "d"
flex.Rows(3).Caption = "短い日付"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 2列目のデータ型を設定
flex.Cols[2].DataType = typeof(DateTime);
// 2列目の書式を設定
flex.Cols[2].Format = "D";
flex.Cols[2].Caption = "長い日付";
// 3行目のデータ型を設定
flex.Rows[3].DataType = typeof(DateTime);
// 3行目の書式を設定
flex.Rows[3].Format = "d";
flex.Rows[3].Caption = "短い日付";
}
301
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
注意:
GetType メソッドや typeof 式の詳細は、MSDNを参照してください。
数値型、日付型の書式指定についての詳細は、MSDNを参照してください。
DataType プロパティは設計時に設定することも可能です。
行、列両方のデータ型・書式が設定されている場合、列の設定が優先されます。
連結(バウンド)モードのグリッドにおける列のデータ型は、C1FlexGrid と接続しているデータソースに依存しま
す。
関連項目
関連項目列エディタ
列エディタ
C1FlexGrid タスク
データ型を設定する
セルの内容
固定列に行番号を表示する
行番号の自動採番機能はありませんが、オーナー描画を使用する方法で自動採番と同様の処理が可能です。
【実行例】
【実行例:行追加後に自動採番】
302
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex.Rows.Count = 10
flex.AllowAddNew = True
flex.Styles.NewRow.BackColor = Color.Beige
' オーナー描画の機能を使用
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
End Sub
' 自動的に行番号を表示する
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
' 0列目に行番号を表示
If e.Col = 0 And e.Row >= flex.Rows.Fixed And e.Row <= flex.Rows.Count - 2 Then
e.Text = e.Row
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.Rows.Count = 10;
flex.AllowAddNew = true;
flex.Styles.NewRow.BackColor = Color.Beige;
// オーナー描画の機能を使用
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
}
// 自動的に行番号を表示する
private void flex_OwnerDrawCell(object sender,
303
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
// 0列目に行番号を表示
if (e.Col == 0 & e.Row >= flex.Rows.Fixed & e.Row <= flex.Rows.Count - 2)
{
e.Text = e.Row.ToString();
}
}
単純に固定列に行番号を表示する場合は、ループ処理で固定列に直接値を設定してください。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex.Rows.Count = 12
For i As Integer = 0 To flex.Rows.Count - 1
flex(i, 0) = i
' Caption プロパティを使用する場合
' flex.Rows(i).Caption = i
Next
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.Rows.Count = 10;
304
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.AllowAddNew = true;
flex.Styles.NewRow.BackColor = Color.Beige;
private void Form1_Load(object sender, EventArgs e)
{
flex.Rows.Count = 12;
for (int i = 0; i < flex.Rows.Count; i++)
{
flex[i, 0] = i;
// Caption プロパティを使用する場合
// flex.Rows[i].Caption = i.ToString();
}
}
操作
行列の操作に関するタスクを紹介します。
行を追加する
行を追加するには、RowCollection クラスのAdd メソッドやC1FlexGridBase クラスのAddItem メソッドを使用しま
す。RowCollection クラスのCount プロパティを使用して行数を変更する方法もあります。
注意:
注意:RowCollection クラスの Count プロパティを変更できるのは、非連結モードで使用している場合のみです。連結
モードで使用すると、例外が発生します。
【実行例】
追加後イメージ
305
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' AddItemメソッドを使用する
' 行を追加してデータを設定
flex.AddItem("4" & vbTab & "4行目")
' RowCollection.Addメソッドを使用する
Dim r As C1.Win.C1FlexGrid.Row
' 行を追加
r = flex.Rows.Add()
' データを設定
r.Item(0) = "4"
r.Item(1) = "4行目"
' RowCollection.Countプロパティを変更する
' 行を追加
flex.Rows.Count += 1
' データを設定
flex(flex.Rows.Count - 1, 0) = "4"
flex(flex.Rows.Count - 1, 1) = "4行目"
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// AddItemメソッドを使用する
// 行を追加してデータを設定
flex.AddItem("4" + "\t" + "4行目");
// RowCollection.Addメソッドを使用する
C1.Win.C1FlexGrid.Row r;
306
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// 行を追加
r = flex.Rows.Add();
// データを設定
r[0] = "4";
r[1] = "4行目";
// RowCollection.Countプロパティを変更する
// 行を追加
flex.Rows.Count += 1;
// データを設定
flex[flex.Rows.Count - 1, 0] = "4";
flex[flex.Rows.Count - 1, 1] = "4行目";
}
注意:
注意:付属の LoadSpeed サンプルも参照してください。
列を追加する
\
行を追加するには、ColumnCollection クラスの Add メソッドを使用するか、ColumnCollection クラスの Count プロパティ
を変更します。
注意:
注意:連結モードで列を追加した場合、非連結列として追加されます。
【実行例】
追加後イメージ
307
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' ColumnCollection.Addメソッドを使用する
Dim c As C1.Win.C1FlexGrid.Column
c = flex.Cols.Add
c.Caption = "追加した列"
' ColumnCollection.Countプロパティを変更する
flex.Cols.Count += 1
flex.Cols(flex.Cols.Count -1).Caption = "追加した列"
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// ColumnCollection.Addメソッドを使用する
C1.Win.C1FlexGrid.Column c;
c = flex.Cols.Add();
c.Caption = "追加した列";
// ColumnCollection.Countプロパティを変更する
flex.Cols.Count += 1;
308
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Cols[flex.Cols.Count - 1].Caption = "追加した列";
}
行/列を削除する
列を削除する
行を削除するには、RowCollection クラスの Remove メソッドや C1FlexGridBase クラスのRemoveItem メソッドを使用し
ます。RowCollection クラスの Count プロパティを使用して行数を変更する方法もあります。
列を削除するには、Remove メソッドを使用するか、ColumnCollection クラスの Count プロパティを使用して列数を変更し
ます。
また、RemoveRange/RemoveRange メソッドを使用すると、複数行/列を削除できます。
注意:
注意:RowCollection クラスの Count プロパティを変更できるのは、非連結モードで使用している場合のみです。連結
モードで使用すると、例外が発生します。
【実行例】
削除後イメージ
309
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' RowCollection.Removeメソッドを使用して2行目を削除
flex.Rows.Remove(2)
' RemoveItemメソッドを使用して2行目を削除
flex.RemoveItem(2)
' RowCollection.Countプロパティを変更:最後の行を削除
flex.Rows.Count -= 1
' RemoveRangeメソッドを使用して2行目から3行削除
flex.Rows.RemoveRange(2, 3)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
' ColumnCollection.Removeメソッドを使用して2列目を削除
flex.Cols.Remove(2)
' ColumnCollection.Countプロパティを変更:最後の行を削除
flex.Cols.Count -= 1
' RemoveRangeメソッドを使用して2列目から3列削除
flex.Cols.RemoveRange(2, 3)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// RowCollection.Removeメソッドを使用して2行目を削除
flex.Rows.Remove(2);
// RemoveItemメソッドを使用して2行目を削除
flex.RemoveItem(2);
310
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// RowCollection.Countプロパティを変更:最後の行を削除
flex.Rows.Count -= 1;
// RemoveRangeメソッドを使用して2行目から3行削除
flex.Rows.RemoveRange(2, 3);
}
private void button2_Click(object sender, EventArgs e)
{
// ColumnCollection.Removeメソッドを使用して2列目を削除
flex.Cols.Remove(2);
// ColumnCollection.Countプロパティを変更:最後の行を削除
flex.Cols.Count -= 1;
// RemoveRangeメソッドを使用して2列目から3列削除
flex.Cols.RemoveRange(2, 3);
}
行を挿入する
行を挿入するには、RowCollection クラスのInsert メソッドを使用します。InsertRange メソッドを使用すると、指定した位置
に複数行を挿入できます。
注意:
注意:行の挿入は非連結モード時のみ可能です。連結モードでは行の追加のみがサポートされま
す。Insert/
/InsertRange メソッドを連結モードで使用すると、例外が発生します。
【実行例】
挿入後イメージ
311
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim r As C1.Win.C1FlexGrid.Row
' Insertメソッドで2行目の位置に挿入
r = flex.Rows.Insert(2)
r(1) = "挿入行"
' InsertRangeメソッドで2行目の位置に3行を挿入
'flex.Rows.InsertRange(2, 3)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
C1.Win.C1FlexGrid.Row r;
// Insertメソッドで2行目の位置に挿入
r = flex.Rows.Insert(2);
r[1] = "挿入行";
// InsertRangeメソッドで2行目の位置に3行を挿入
//flex.Rows.InsertRange(2, 3);
}
列を挿入する
行を挿入するには、ColumnCollection クラスの Insert メソッドを使用します。InsertRange メソッドを使用すると、指定した
位置に複数行を挿入できます。
注意:
注意:連結モードで列を挿入した場合、非連結列として挿入されます。
312
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】
挿入後イメージ
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim c As C1.Win.C1FlexGrid.Column
' Insertメソッドで2列目の位置に挿入
c = flex.Cols.Insert(2)
c.Caption = "挿入列"
' InsertRangeメソッドで2列目の位置に3列を挿入
313
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
'flex.Cols.InsertRange(2, 3)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
C1.Win.C1FlexGrid.Column c;
// Insertメソッドで2列目の位置に挿入
c = flex.Cols.Insert(2);
c.Caption = "挿入列";
// InsertRangeメソッドで2列目の位置に3列を挿入
//flex.Cols.InsertRange(2, 3);
}
ユーザーによる行の追加を許可する
AllowAddNew プロパティを True に変更します。行の追加を許可すると、最終行に新規追加のテンプレート行が表示されま
す。
また、NewRowWatermark プロパティを使用して新規追加のテンプレート行に任意の文字列を表示し、ユーザーに新規行
への入力を促す処理を実装することも可能です。
【実行例】
Visual Basic コードの書き方
Visual Basic
flex.AllowAddNew = True
flex.NewRowWatermark = "新しいレコードは、ここに追加してください"
C# コードの書き方
314
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
flex.AllowAddNew = true;
flex.NewRowWatermark = "新しいレコードは、ここに追加してください";
注意:
注意:AllowAddNew プロパティは、[C1FlexGrid タスク] からも設定できます。
ユーザーによる行の削除を許可する
AllowDelete プロパティを True に変更すると、ユーザーは行を選択して Delete キー
キーを押すことで、それらの行を削除できま
す。
【実行例】 5行目を選択して、
行目を選択して、Delete キーを押します。
315
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
削除後イメージ
Visual Basic コードの書き方
Visual Basic
flex.AllowDelete = True
C# コードの書き方
C#
flex.AllowDelete = true;
注意:
注意:AllowDelete プロパティは、[C1FlexGrid タスク] からも設定できます。
316
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ユーザーによる行
ユーザーによる行/列の移動を許可する
列の移動を許可する
AllowDragging プロパティを変更します(デフォルトは AllowDraggingEnum.Columns)。また、行や列の
AllowDragging プロパティを False に設定すると、特定行または列のドラッグを禁止できます。
注意:
注意:行の移動は非連結モードでのみ可能です。連結モードでの行の移動はサポートされません。
【実行例】 5行目をドラッグして移動
行目をドラッグして移動
317
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
移動後イメージ
Visual Basic コードの書き方
Visual Basic
' ユーザーによる行/列の移動をを許可する
flex.AllowDragging = C1.Win.C1FlexGrid.AllowDraggingEnum.Both
' 2列目の移動は禁止
flex.Cols(2).AllowDragging = False
C# コードの書き方
C#
// ユーザーによる行/列の移動をを許可する
flex.AllowDragging = C1.Win.C1FlexGrid.AllowDraggingEnum.Both;
// 2列目の移動は禁止
flex.Cols[2].AllowDragging = false;
注意:
各列の移動許可/禁止は、列エディタ や Column タスク からも設定できます。
列の移動のみを許可する場合は、「C1FlexGrid タスク」 からも設定できます。
318
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ユーザーによる行の高さ
ユーザーによる行の高さ/列幅の変更を許可する
列幅の変更を許可する
AllowResizing プロパティを変更します(デフォルトは AllowResizingEnum.Columns)。また、行や列の AllowResizing プ
ロパティを False に設定すると、特定行または列のサイズ変更を禁止できます。
【実行例】
Visual Basic コードの書き方
319
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic
' ユーザーによる行の高さ/列幅の変更を許可する
flex.AllowResizing = C1.Win.C1FlexGrid.AllowResizingEnum.Both
' 2列目のサイズ変更は禁止
flex.Cols(2).AllowResizing = False
C# コードの書き方
C#
// ユーザーによる行の高さ/列幅の変更を許可する
flex.AllowResizing = C1.Win.C1FlexGrid.AllowResizingEnum.Both;
// 2列目のサイズ変更は禁止
flex.Cols[2].AllowResizing = false;
注意:
注意:各列のサイズ変更許可/禁止は、列エディタ や Column タスク からも設定できます。
データにあわせて行
データにあわせて行/列のサイズを調整する
列のサイズを調整する
AutoSizeRow/AutoSizeRows メソッドで行のサイズを、AutoSizeCol/AutoSizeCols メソッドで列のサイズをデータにあ
わせて調整できます。
また、行や列のサイズ変更が許可されている場合、ユーザーは行/列の境界線をダブルクリックすることで表示されている
データにあわせてサイズを調整できます。
【実行例】
サイズ調整後イメージ
320
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 1列目の列幅を調整
flex.AutoSizeCol(1)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 1列目の列幅を調整
flex.AutoSizeCol(1);
}
注意:AutoSizeRow/AutoSizeRows、AutoSizeCol/AutoSizeCols メソッドは、行・列のサイズ変更を禁止している
場合でも使用できます。
関連項目
自動で列幅を調整する
行/列の最小、最大サイズを設定する
列の最小、最大サイズを設定する
MinSize プロパティで最小サイズを、MaxSize プロパティで最大サイズを設定します。この設定は、ユーザーによるサイズ変
更時、コードでのサイズ変更時の両方で有効です。
【実行例】
321
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 列幅の最大サイズを50にします
flex.Cols.MaxSize = 50
' 行の高さの最小サイズを16にします
flex.Rows.MinSize = 16
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 列幅の自動調整を行っても最大サイズ以上にはなりません
flex.AutoSizeCol(1)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 列幅の最大サイズを50にします
flex.Cols.MaxSize = 50;
// 行の高さの最小サイズを16にします
flex.Rows.MinSize = 16;
}
private void button1_Click(object sender, EventArgs e)
{
// 列幅の自動調整を行っても最大サイズ以上にはなりません
flex.AutoSizeCol(1);
}
注意:
MinSize/MaxSize プロパティを0にすると、最小/最大サイズの設定は無効になります。
322
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
最小サイズが DefaultSize よりも小さい場合、最小サイズの値で行や列が表示されます。
ユーザーによる行
ユーザーによる行/列の静止を許可する
列の静止を許可する
ユーザーがマウスで行と列を静止(フリーズ)できるようにするには、AllowFreezing プロパティ
を、AllowFreezingEnum.Columns(列のみをフリーズする場合)、AllowFreezingEnum.Rows(行のみをフリーズする場
合)、 AllowFreezingEnum.Both(列と行の両方をフリーズする場合)のいずれかに設定します。反対に、フリーズを無効に
するには、AllowFreezing プロパティを AllowFreezingEnum.None(デフォルト設定)に設定します。
【実行例】
マウスポインタ が行 の ロック
または列のロック(
323
)アイコンになったとき、フリーズする行または列の上にマウスをドラッグします。
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
静止後イメージ
Visual Basic コードの書き方
Visual Basic
flex.AllowFreezing = C1.Win.C1FlexGrid.AllowFreezingEnum.Both
C# コードの書き方
C#
flex.AllowFreezing = C1.Win.C1FlexGrid.AllowFreezingEnum.Both;
ユーザーによるデータ検索を有効にする
324
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ユーザーが入力した値で列内のデータを検索するには、AutoSearch プロパティを AutoSearchEnum.FromCursor(現在の
行から検索を開始する場合)、または AutoSearchEnum.FromTop(最初のスクロール可能な行から検索を開始する場合)
に設定します。反対に、検索を無効にするには、AutoSearch プロパティを AutoSearchEnum.None(デフォルト設定)に設
定します。
【実行例】
データ検索を有効にすると、ユーザーが入力した文字を含むセルをハイライト表示します。この例では、2列目にCと入力する
と、「CCC」がハイライト表示されます。
Visual Basic コードの書き方
Visual Basic
flex.AutoSearch = C1.Win.C1FlexGrid.AutoSearchEnum.FromTop
C# コードの書き方
C#
flex.AutoSearch = C1.Win.C1FlexGrid.AutoSearchEnum.FromTop;
注意:
同じ文字で始まる複数の値がある場合、次の文字を入力すると、それらの文字を含むセルがハイライト表示され
ます。たとえば、ABと入力すると、「ABC」がハイライト表示されます。
検索文字のバッファがクリアされるまでの時間は、AutoSearchDelay プロパティで変更します。
データ検索を有効にした場合、ユーザーは[Enter]、[Space]、または[F2]キーを押してセルの編集を開始する
必要があります。その他のキーは検索に使用されます。
セルの値
セルやセル範囲のデータを参照および設定する方法を紹介します。
325
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
セルに値を設定する
Item プロパティ(インデクサ)、または SetData メソッドを使用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 2行3列目のセルに値を設定
flex(2, 3) = " 2行3列目"
' flex.Item(2, 3) = "2行3列目"
' flex.SetData(2, 3, "2行3列目", True)
' セルの移動(選択)
flex.Select(2, 3)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 2行3列目のセルに値を設定
flex[2, 3] = "2行3列目";
// flex.SetData(2, 3, "2行3列目", true);
// セルの移動(選択)
flex.Select(2, 3);
}
関連項目
326
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
データの取得と設定
セル範囲に値を設定する
Data プロパティ、または SetData メソッドを使用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 1行2列-2行3列のセル範囲に値を設定
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(1, 2, 2, 3)
cr.Data = "セル範囲"
' flex.SetData(cr, "セル範囲", True)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 1行2列-2行3列のセル範囲に値を設定
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(1, 2, 2, 3);
cr.Data = "セル範囲";
// flex.SetData(cr, "セル範囲", true);
}
327
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
セル(範囲)の値をクリアする
AutoClipboard プロパティを True に設定してクリップボードの自動処理を実装することで、ユーザーは Delete キー
キーを押して
セルのデータをクリアすることができます。
【実行例】
クリア後イメージ
Visual Basic コードの書き方
Visual Basic
flex.AutoClipboard = True
328
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
flex.AutoClipboard = true;
また、コードからデータをクリアする場合は、SetData メソッドを使用します。
注意:
注意:値をセルに格納すると、グリッドはその値を列のデータ型に変換しようとします。変換できない場合、グリッド
は GridError イベントを発生させてセルを変更しません。””(空文字)を設定してデータをクリアする場合は、注意が必要
です。SetData メソッドを使用して coerce 引数を False に設定することでこの動作を変更できます。
【実行例】
クリア後イメージ
329
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' カレントセルにDBNull.Valueを設定してクリア
flex.SetData(flex.Row, flex.Col, System.DBNull.Value, False)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// カレントセルにDBNull.Valueを設定してクリア
flex.SetData(flex.Row, flex.Col, System.DBNull.Value, false);
}
関連項目
データの取得と設定
画像
画像/表示
表示
主にグリッドの表示に関するタスクを紹介します。
オーナー描画を使用する
このタスク内でも「セルに線を描画する」や「グラデーション背景を描画する」などの処理でオーナー描画を使用していますが、
オーナー描画の変更は表示上のみ影響します。そのため、罫線や背景色といった外観だけではなく、「パスワード入力を行う」
のように表示されているデータに対して描画を行っても実際のデータは変更されません。
330
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
たとえば、下記のサンプルでは実際のデータに対して”(済)”という文字列を追加する処理を実装しています。入力されたデータ
には変更がないことを確認できます。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' オーナー描画を使用する
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
End Sub
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
' 1列目のみ変更
If e.Col = 1 Then
If e.Row >= flex.Rows.Fixed And e.Text <> "" Then
e.Text = e.Text & " (済)"
End If
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
MessageBox.Show("実際のデータ:" & flex(2, 1))
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// オーナー描画を使用する
331
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
}
private void flex_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
// 1列目のみ変更
if (e.Col == 1)
{
if ((e.Row >= flex.Rows.Fixed) && (e.Text != ""))
{
e.Text = e.Text + " (済)";
}
}
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("実際のデータ:" + flex[2, 1]);
}
グラデーション背景を描画する
セル範囲にグラデーション背景を適用するには、OwnerDrawCell イベントを使用してセルの描画を行います。
【実行例】
セル範囲のみに Navy のグラデーション背景を表示します。
1. フォームクラスレベルに以下のコードを追加し、LinearGradient ブラシと CellRange を作成します。
Visual Basic コードの書き方
Visual Basic
Dim GradientStyleBrush As System.Drawing.Drawing2D.LinearGradientBrush
Dim rng As C1.Win.C1FlexGrid.CellRange
C# コードの書き方
C#
System.Drawing.Drawing2D.LinearGradientBrush GradientStyleBrush;
C1.Win.C1FlexGrid.CellRange rng;
332
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
2. Form_Load イベントに以下のコードを追加し、DrawMode プロパティを OwnerDraw に設定します。
Visual Basic コードの書き方
Visual Basic
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
C# コードの書き方
C#
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
3. GetCellRange メソッドを使用し、2行2列目から4行4列目の CellRange を設定します。
Visual Basic コードの書き方
Visual Basic
rng = flex.GetCellRange(2, 2, 4, 4)
C# コードの書き方
C#
rng = flex.GetCellRange(2, 2, 4, 4)
4. グラデーションの LinearGradient ブラシの色と角度を設定します。
Visual Basic コードの書き方
Visual Basic
GradientStyleBrush = New
System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.Navy,
Color.Transparent, 270)
C# コードの書き方
C#
GradientStyleBrush = new
System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.Navy,
Color.Transparent, 270);
5. OwnerDrawCell イベントを追加し、CellRange にグラデーションを描画します。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
' グラデーションブラシを使用して
' セルの背景を描画します
If (e.Row >= rng.r1) And (e.Row <= rng.r2) Then
If (e.Col >= rng.c1) And (e.Col <= rng.c2) Then
' 背景を描画
e.Graphics.FillRectangle(GradientStyleBrush, e.Bounds)
333
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' セルの内容を描画
e.DrawCell(C1.Win.C1FlexGrid.DrawCellFlags.Content)
' 描画の終了
e.Handled = True
End If
End If
End Sub
C# コードの書き方
C#
private void flex_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
// グラデーションブラシを使用して
// セルの背景を描画します
if ((e.Row >= rng.r1) && (e.Row <= rng.r2))
{
if ((e.Col >= rng.c1) && (e.Col <= rng.c2))
{
// 背景を描画
e.Graphics.FillRectangle(GradientStyleBrush, e.Bounds);
// セルの内容を描画
e.DrawCell(C1.Win.C1FlexGrid.DrawCellFlags.Content);
// 描画の終了
e.Handled = true;
}
}
}
セルを塗りつぶす
FlexGrid には、VS-FlexGrid(ActiveX製品)の CellFloodPercent プロパティのような、セルを塗りつぶすための直接的な機能
はありません。ただ、オーナー描画セルとして、セル上に任意のグラフィックを表示する機能が実装されています。この場合、
実際の描画処理は .NET Framework の System.Drawing クラスを使用しますが、同クラスの FillRectangle メソッドを使用し
て、任意の四角形の領域を塗りつぶす動作が可能です。
セルを塗りつぶす具体的な処理・コードについては、製品付属の BarChart サンプルを確認してください。また、オーナー描画
機能の詳細については、「オーナー描画セル」や「OwnerDrawCell イベント」を参照してください。
【BarChar サンプル実行例】
334
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
セルラベルを表示する
ShowCellLabels プロパティを True に設定します。
【実行例】
Visual Basic コードの書き方
Visual Basic
flex.ShowCellLabels = True
C# コードの書き方
C#
flex.ShowCellLabels = true;
335
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
注意:
セル内にすべてのデータが表示されている場合、そのセルではラベルは表示されません。
付属の各サンプル、CellLabels、CellLabelDelay、CellLabelsNew も参照してください。
セルに画像を設定する
下記の方法でセル(範囲)に画像を設定します。例えば、Image.FromFile メソッドを使用することで、GDI+でサポートされて
いる画像フォーマット.png/JPEG/GIF/EMF/WMF/TIFF/PNG/ICOなど)を表示することができます。
【SetCellImageメソッドを使用する】
メソッドを使用する】
SetCellImage メソッドを使用して、セルに直接画像を設定します。
Visual Basic コードの書き方
Visual Basic
' 2行3列目のセルに画像を設定
flex.SetCellImage(2, 3, Image.FromFile("soccer.gif"))
flex(2, 3) = "サッカー"
C# コードの書き方
C#
// 2行3列目のセルに画像を設定
flex.SetCellImage(2, 3, Image.FromFile("soccer.gif"));
flex[2, 3] = "サッカー";
【Image プロパティを使用する】
Image プロパティを使用して、任意のセル(範囲)に画像を設定します。
336
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' 5行3列目-6行3列目に画像を表示
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(5, 3, 6, 3)
cr.Image = Image.FromFile("baseball.gif")
cr.Data = "野球"
C# コードの書き方
C#
// 5行3列目-6行3列目に画像を表示
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(5, 3, 6, 3);
cr.Image = Image.FromFile("baseball.gif");
cr.Data = "野球";
【オーナー描画の機能を使用する】
OwnerDrawCell イベントの e.Image に画像を設定します。
337
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Dim img As Image
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
img = Image.FromFile("basketball.gif")
End Sub
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
' 3行4列目に画像を表示
If e.Row = 3 And e.Col = 4 Then
e.Image = img
e.Text = "バスケット"
End If
End Sub
C# コードの書き方
C#
Image img;
private void Form1_Load(object sender, EventArgs e)
{
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
img = Image.FromFile("basketball.gif");
}
private void flex_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
// 3行4列目に画像を表示
if((e.Row == 3) && (e.Col == 4))
{
338
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
e.Image = img;
e.Text = "バスケット";
}
}
注意:
MultiColumnDictionary クラスを使用したマルチカラムコンボボックスの使用例について
は、MultiColumnDictionary サンプルを確認してください。
ImageAndText プロパティを使用して、セルにテキストと画像を表示するか、画像のみを表示するかを指定でき
ます。
新規追加行を示すアイコンを変更する
Glyphs プロパティで GlyphEnum.DBAdd を指定して変更します。
【実行例】
変更前(デフォルト)
339
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' 新規追加行を表示
flex.AllowAddNew = True
' 新規追加行の背景色を変更
flex.Styles.NewRow.BackColor = Color.Beige
' 新規追加行を示すアイコンを変更
flex.Glyphs(C1.Win.C1FlexGrid.GlyphEnum.DBAdd) = Image.FromFile("C:\arrow.png")
C# コードの書き方
C#
// 新規追加行を表示
flex.AllowAddNew = true;
// 新規追加行の背景色を変更
flex.Styles.NewRow.BackColor = Color.Beige;
// 新規追加行を示すアイコンを変更
flex.Glyphs[C1.Win.C1FlexGrid.GlyphEnum.DBAdd] = Image.FromFile(@"C:\arrow.png");
注意:
注意:Glyphs プロパティに Nothing(Null) を設定すると、デフォルトの画像が復元されます。アイコンを非表示にする
場合は、小さなブランク画像に設定してください。
エラー情報を表示する
ShowErrors プロパティを True に設定し、GetCellErrorInfo/GetRowErrorInfo イベントを使用して制御します。
【実行例】
340
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' エラー情報を表示
flex.ShowErrors = True
End Sub
Private Sub flex_GetCellErrorInfo(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.GetErrorInfoEventArgs) Handles flex.GetCellErrorInfo
' 1列目のデータが空白の場合、
' セルにエラーアイコンを表示
If e.Col = 1 And flex(e.Row, e.Col) = "" Then
e.ErrorText = "未入力"
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// エラー情報を表示
flex.ShowErrors = true;
}
private void flex_GetCellErrorInfo(object sender,
C1.Win.C1FlexGrid.GetErrorInfoEventArgs e)
{
// 1列目のデータが空白の場合、
// セルにエラーアイコンを表示
if((e.Col == 1) && (flex[e.Row, e.Col].ToString() == ""))
{
e.ErrorText = "未入力";
341
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
}
注意:
注意:エラー情報の表示については、付属の ErrorInfo サンプルも参照してください。
エラー情報のアイコンを変更する
Glyphs プロパティで GlyphEnum.ErrorInfo を指定して変更します。
【実行例】
変更前(デフォルト)
342
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
flex.ShowErrors = True
flex.Glyphs(C1.Win.C1FlexGrid.GlyphEnum.ErrorInfo) = Image.FromFile("C:\bikuri.gif")
C# コードの書き方
C#
flex.ShowErrors = true;
flex.Glyphs[C1.Win.C1FlexGrid.GlyphEnum.ErrorInfo] = Image.FromFile(@"C:\bikuri.gif")
注意:
Glyphs プロパティに Nothing(Null) を設定すると、デフォルトの画像が復元されます。アイコンを非表示にする
場合は、ShowErrors プロパティを False に設定してください。
エラー情報の表示方法については、「エラー情報を表示する」を参照してください。
カレント行を示すアイコンを表示する
ShowCursor プロパティを True に設定(デフォルトは False )すると、固定列に DB 形式のカーソルを表示することができま
す。
【実行例】
343
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
flex.ShowCursor = True
C# コードの書き方
C#
flex.ShowCursor = true;
注意:
注意:アイコンを変更する場合は、Glyphs プロパティで GlyphEnum.DBCursor を指定して変更します。
イメージを拡大
イメージを拡大/縮小する
縮小する
セルに表示されている画像の表示方法は、行列やスタイルの ImageAlign プロパティを使用して変更します。
列単位でイメージを拡大
列単位でイメージを拡大/縮小
縮小
グリッドの行がリサイズされたとき単一列のイメージを拡大/縮小するには、ImageAlign プロパティを Scale に設定します。
【行のリサイズ前】
344
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【行のリサイズ後】
デザイナの場合
1. [FlexGrid 列エディタ
列エディタ]を開きます。列エディタへのアクセス方法の詳細については、「列エディタにアクセス」を参照し
てください。
2. 右ペインからイメージを含む列を選択し、左ペインの ImageAlign プロパティを Scale に設定します。
345
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
3. 〈OK〉〉をクリックし、エディタを閉じます。
コードの場合
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 行の高さを設定
flex.Rows(1).Height = 2 * flex.Rows.DefaultSize
flex.Rows(2).Height = 2 * flex.Rows.DefaultSize
’ 3列目のみ設定
flex.Cols(3).ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Scale
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 行の高さを設定
flex.Rows[1].Height = 2 * flex.Rows.DefaultSize;
flex.Rows[2].Height = 2 * flex.Rows.DefaultSize;
// 3列目のみ設定
flex.Cols[3].ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Scale;
}
グリッド全体でイメージを拡大
グリッド全体でイメージを拡大/縮小
縮小
1つの列だけでなく、グリッド全体でイメージを拡大/縮小するには、Normal 組み込みスタイルの ImageAlign プロパティを
Scale に設定します。
346
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【行のリサイズ前】
【行のリサイズ後】
デザイナの場合
1. [FlexGrid スタイルエディタ
スタイルエディタ]を開きます。スタイルエディタへのアクセス方法の詳細については、「 スタイルエディタに
アクセス」を参照してください。
2. [組み込みスタイル]のリストで Normal を選択します。
3. 右ペインで、ImageAlign プロパティを探し、それを Scale に設定します。
347
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
4. 〈OK〉をクリックし、エディタを閉じます。
コードの場合
Form_Load イベントに次のコードを追加します。
Visual Basic コードの書き方
Visual Basic
flex.Styles("Normal").ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Scale
C# コードの書き方
C#
flex.Styles("Normal").ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Scale;
描画方法を変更する
C1FlexGrid の描画はデフォルトで GDI+ で行われますが、UseCompatibleTextRendering プロパティを False に設定する
ことで GDI で描画できます。
また、編集エディタは GDI で描画されます。そのため、編集中と非編集時で描画が少し異なります。このような場合には、
UseCompatibleTextRendering プロパティを False に設定し、非編集時の描画を GDI で行った上で、Editor 組み込みスタイ
ルの Margins プロパティ(マージン)を調整することで対応できます。
348
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' GDIで描画します
flex.UseCompatibleTextRendering = False
flex.Font = New Font("MS Pゴシック", 11)
' 編集時のマージンを設定
flex.Styles.Editor.Margins = New System.Drawing.Printing.Margins(3, 1, 2, 1)
flex.Cols(2).DataType = GetType(String)
flex(2, 2) = "12345678901234567890"
flex(3, 2) = "12345678901234567890"
flex.AutoSizeCol(2)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// GDIで描画します
flex.UseCompatibleTextRendering = false;
flex.Font = new Font("MS Pゴシック", 11);
// 編集時のマージンを設定
flex.Styles.Editor.Margins = new System.Drawing.Printing.Margins(3, 1, 2, 1);
flex.Cols[2].DataType = typeof(string);
flex[2, 2] = "12345678901234567890";
flex[3, 2] = "12345678901234567890";
flex.AutoSizeCol(2);
}
349
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
コンテキストメニューを表示する
非編集時の場合
ContextMenuStrip コントロールを使用して任意のコンテキストメニューを作成し、C1FlexGrid の ContextMenuStrip プロ
パティに設定します。
注意:
ContextMenuStrip コントロールの詳細は、MSDN を参照してください。
C1FlexGrid には ContextMenu プロパティも用意されています。以前のバージョンの ContextMenu コント
ロールを利用する場合に使用してください。
【実行例】
Visual Basic コードの書き方
Visual Basic
Dim cm As New ContextMenuStrip
cm.Items.Add("Menu1")
cm.Items.Add("Menu2")
cm.Items.Add("Menu3")
flex.ContextMenuStrip = cm
C# コードの書き方
C#
ContextMenuStrip cm = new ContextMenuStrip();
cm.Items.Add("Menu1");
cm.Items.Add("Menu2");
cm.Items.Add("Menu3");
flex.ContextMenuStrip = cm;
350
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
編集中の場合
編集中は編集用エディタに設定されているデフォルトのコンテキストメニューが表示されます。デフォルトのコンテキストメ
ニューを変更する場合は、StartEdit イベントで編集用エディタを取得し、別の ContextMenuStrip コントロールを設定しま
す。
【実行例 (デフォルトの状態)】
【実行例 (変更時)】
351
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub flex_StartEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.StartEdit
' 1列目のみコンテキストメニューを変更
If e.Col = 1 Then
' 編集用エディタを取得
Dim tb As TextBox
tb = CType(flex.Editor, TextBox)
' コンテキストメニューを作成
Dim cm2 As New ContextMenuStrip
cm2.Items.Add("Menu1-Edit")
cm2.Items.Add("Menu2-Edit")
cm2.Items.Add("Menu3-Edit")
' コンテキストメニューを設定
tb.ContextMenuStrip = cm2
Else
' コンテキストメニューをクリア(デフォルトに戻す)
flex.Editor.ContextMenuStrip = Nothing
End If
End Sub
C# コードの書き方
C#
private void flex_StartEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
// 1列目のみコンテキストメニューを変更
if (e.Col == 1)
{
// 編集用エディタを取得
TextBox tb = (TextBox)flex.Editor;
// コンテキストメニューを作成
ContextMenuStrip cm2 = new ContextMenuStrip();
cm2.Items.Add("Menu1-Edit");
cm2.Items.Add("Menu2-Edit");
cm2.Items.Add("Menu3-Edit");
// コンテキストメニューを設定
tb.ContextMenuStrip = cm2;
}
else
{
// コンテキストメニューをクリア(デフォルトに戻す)
flex.Editor.ContextMenuStrip = null; ;
}
}
ユーザーデータをツールチップに表示する
ユーザーデータを表示するツールチップを追加するには、MouseMove や MouseEnterCell/MouseLeaveCell イベントを
352
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
使用し、UserData プロパティを取得して ToolTip コントロールに表示します。ここでは、行、列、セル、セル範囲、スタイルの
UserData を ToolTips に表示する方法を紹介します。
行のユーザーデータをツールチップに表示
行のユーザーデータをツールチップに表示するには、MouseEnterCell イベントを使用し、UserData プロパティを取得して
ToolTip コントロールに表示します。
【実行例】
ツールチップは、行全体にわたって表示されます。
1. ツールボックスの ToolTip コントロールを探し、それをフォームに追加します。
2. Form_Load イベントで、行の UserData プロパティを設定します。この例では、LastName/FirstName 列のデータを
使用しています。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
For i As Integer = flex.Rows.Fixed To flex.Rows.Count - 1
flex.Rows(i).UserData = "顧客名:" & flex(i, 2) & " " & flex(i, 3)
Next
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
for (int i = flex.Rows.Fixed; i < flex.Rows.Count; i++)
{
flex.Rows[i].UserData = "顧客名:" + flex[i, 2] + " " + flex[i, 3];
}
}
353
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
3. 以下のコードを MouseEnterCell イベントとMouseLeaveCell イベントに追加し、行の UserData をツールチップに表
示します。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_MouseEnterCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseEnterCell
If e.Row >= flex.Rows.Fixed Then
Dim tip As String
tip = flex.Rows(e.Row).UserData
' ToolTipを表示
ToolTip1.SetToolTip(flex, tip)
End If
End Sub
Private Sub flex_MouseLeaveCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseLeaveCell
' ToolTipを非表示
ToolTip1.SetToolTip(flex, "")
End Sub
C# コードの書き方
C#
private void flex_MouseEnterCell(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
if (e.Row >= flex.Rows.Fixed)
{
string tip;
tip = flex.Rows[e.Row].UserData.ToString();
// ToolTipを表示
toolTip1.SetToolTip(flex, tip);
}
}
private void flex_MouseLeaveCell(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
// ToolTipを非表示
toolTip1.SetToolTip(flex, "");
}
注意:
注意:ToolTip コントロールの詳細は、MSDNなどを参照してください。
列のユーザーデータをツールチップに表示する
列のユーザーデータをツールチップに表示するには、MouseEnterCell イベントを使用し、UserData プロパティを取得して
ToolTip コントロールに表示します。
【実行例】
354
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ツールチップは2列目のみに表示されます。
1. ツールボックスの ToolTip コントロールを探し、それをフォームに追加します。
2. Form_Load イベントで、2列目の UserData プロパティを設定します。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
flex.Cols(2).UserData = "LastName"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.Cols[2].UserData = "LastName";
}
3. 以下のコードを MouseEnterCell イベントとMouseLeaveCell イベントに追加し、列の UserData をツールチップに表
示します。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_MouseEnterCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseEnterCell
If e.Col = 2 Then
Dim tip As String
tip = flex.Cols(2).UserData
' ToolTipを表示
ToolTip1.SetToolTip(flex, tip)
End If
End Sub
Private Sub flex_MouseLeaveCell(ByVal sender As Object, ByVal e As
355
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseLeaveCell
' ToolTipを非表示
ToolTip1.SetToolTip(flex, "")
End Sub
C# コードの書き方
C#
private void flex_MouseEnterCell(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
if (e.Col == 2)
{
string tip;
tip = flex.Cols[2].UserData.ToString();
// ToolTipを表示
toolTip1.SetToolTip(flex, tip);
}
}
private void flex_MouseLeaveCell(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
// ToolTipを非表示
toolTip1.SetToolTip(flex, "");
}
注意:
注意:ToolTip コントロールの詳細は、MSDN などを参照してください。
セルのユーザーデータをツールチップに表示
単一セルのユーザーデータをツールチップに表示するには、 MouseEnterCell イベントを使用し、 GetUserData プロパティ
を取得して ToolTip コントロールに表示します。
【実行例】
3行2列目のセルにマウスを移動すると、ツールチップが表示されます。
1. ツールボックスの ToolTip コントロールを探し、それをフォームに追加します。
356
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
2. Form_Load イベントで、行の GetUserData プロパティを設定します。この例では、LastName/FirstName 列のデー
タを使用しています。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim ud As String
ud = flex(3, 2) & " " & flex(3, 3) & "さんの誕生日:" & flex(3, 6)
flex.SetUserData(3, 2, ud)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
string ud;
ud = flex[3, 2] + " " + flex[3, 3] + "さんの誕生日:" +
((DateTime)flex[3, 6]).ToString("yyyy/MM/dd");
flex.SetUserData(3, 2, ud);
}
3. 以下のコードを MouseLeaveCell イベントに追加し、GetUserData メソッドで取得したセルの UserData をツールチッ
プに表示します。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_MouseEnterCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseEnterCell
Dim tip As String = ""
If e.Row = 3 And e.Col = 2 Then
tip = flex.GetUserData(3, 2)
End If
ToolTip1.SetToolTip(flex, tip)
End Sub
C# コードの書き方
C#
private void flex_MouseEnterCell(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
string tip = "";
if((e.Row == 3) && (e.Col == 2))
{
tip = flex.GetUserData(3, 2).ToString();
}
toolTip1.SetToolTip(flex, tip);
}
357
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
注意:
注意:ToolTip コントロールの詳細は、MSDNなどを参照してください。
セル範囲のユーザーデータをツールチップに表示
セル範囲のユーザーデータをツールチップに表示するには、MouseEnterCell イベントを使用し、UserData プロパティを取得
して ToolTip コントロールに表示します。
【実行例】
セル範囲全体で ToolTip が表示されます。
1. ツールボックスの ToolTip コントロールを探し、それをフォームに追加します。
2. Form_Load イベントでセル範囲に対して UserData プロパティを設定します。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' 6行1列目-8行3列目のセル範囲を取得します
Dim rng As C1.Win.C1FlexGrid.CellRange
rng = flex.GetCellRange(6, 1, 8, 3)
' セル範囲を見やすくするために背景色を設定します
rng.StyleNew.BackColor = Color.AliceBlue
' セル範囲のユーザーデータを設定します
rng.UserData = "EmployeeID 6~8"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 6行1列目-8行3列目のセル範囲を取得します
C1.Win.C1FlexGrid.CellRange rng = flex.GetCellRange(6, 1, 8, 3);
358
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// セル範囲を見やすくするために背景色を設定します
rng.StyleNew.BackColor = Color.AliceBlue;
// セル範囲のユーザーデータを設定します
rng.UserData = "EmployeeID 6~8";
}
3. MouseEnterCell イベントを使用して、ツールチップを表示します。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_MouseEnterCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseEnterCell
Dim tip As String = ""
If Not flex.GetUserData(e.Row, e.Col) Is Nothing Then
tip = flex.GetUserData(e.Row, e.Col)
End If
ToolTip1.SetToolTip(flex, tip)
End Sub
C# コードの書き方
C#
private void flex_MouseEnterCell(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
string tip = "";
if (flex.GetUserData(e.Row, e.Col) != null)
{
tip = flex.GetUserData(e.Row, e.Col).ToString();
}
toolTip1.SetToolTip(flex, tip);
}
注意:
注意:ToolTip コントロールの詳細は、MSDNなどを参照してください。
スタイルのユーザーデータをツールチップに表示
スタイルのユーザーデータをツールチップに表示するには、MouseEnterCell イベントを使用し、UserData プロパティを取得
して ToolTip コントロールに表示します。
【実行例】
スタイル全体で ToolTip が表示されます。
359
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
1. ツールボックスの ToolTip コントロールを探し、それをフォームに追加します。
2. Form_Load イベントで行と列のカスタムスタイルを作成して、スタイルを割り当てます。CellStyle の作成方法につい
ての詳細は、「行/列の外観を変更する」を参照してください。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' 列のCellStyleを作成します
Dim cc As C1.Win.C1FlexGrid.CellStyle
cc = flex.Styles.Add("ColumnColor")
cc.BackColor = Color.Cornsilk
' スタイル名を持つUserDataを追加します
cc.UserData = "ColumnColor Style"
' 行のCellStyleを作成します
Dim rs As C1.Win.C1FlexGrid.CellStyle
rs = flex.Styles.Add("RowColor")
rs.BackColor = Color.PowderBlue
' スタイル名を持つUserDataを追加します
rs.UserData2 = "RowColor Style"
' ColumnColorスタイルを列に割り当てます
flex.Cols(2).Style = flex.Styles("ColumnColor")
' RowColor スタイルを行に割り当てます。
flex.Rows(4).Style = flex.Styles("RowColor")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 列のCellStyleを作成します
C1.Win.C1FlexGrid.CellStyle cc;
cc = flex.Styles.Add("ColumnColor");
cc.BackColor = Color.Cornsilk;
360
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// スタイル名を持つUserDataを追加します
cc.UserData = "ColumnColor Style";
// 行のCellStyleを作成します
C1.Win.C1FlexGrid.CellStyle rs;
rs = flex.Styles.Add("RowColor");
rs.BackColor = Color.PowderBlue;
// スタイル名を持つUserDataを追加します
rs.UserData = "RowColor Style";
// ColumnColorスタイルを列に割り当てます
flex.Cols[2].Style = flex.Styles["ColumnColor"];
// RowColor スタイルを行に割り当てます。
flex.Rows[4].Style = flex.Styles["RowColor"];
}
3. 以下のコードを MouseEnterCell イベントと MouseLeaveCell イベントに追加し、UserData をツールチップを表示し
ます。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_MouseEnterCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseEnterCell
Dim tip As String = ""
If e.Row = 4 Then
tip = flex.Rows(4).Style.UserData
End If
If e.Col = 2 Then
tip = flex.Cols(2).Style.UserData
End If
' ToolTipを表示
ToolTip1.SetToolTip(flex, tip)
End Sub
Private Sub flex_MouseLeaveCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseLeaveCell
' ToolTipを非表示
ToolTip1.SetToolTip(flex, "")
End Sub
C# コードの書き方
C#
private void flex_MouseEnterCell(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
string tip = "";
if (e.Row == 4)
{
tip = flex.Rows[4].Style.UserData.ToString();
}
if (e.Col == 2)
{
tip = flex.Cols[2].Style.UserData.ToString();
}
361
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// ToolTipを表示
toolTip1.SetToolTip(flex, tip);
}
private void flex_MouseLeaveCell(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
// ToolTipを非表示
toolTip1.SetToolTip(flex, "");
}
注意:
注意:ToolTip コントロールの詳細は、MSDNなどを参照してください。
マウス下のセルをハイライト表示する
MouseEnterCell/MouseLeaveCellイベントを使用することで、セル内にマウスポインタが入ったとき、およびマウスポインタ
がセルから離れたときを判別できます。MouseEnterCell イベントでスタイルを設定し、MouseLeaveCell イベントで設定した
スタイルを削除することでマウス下のセルをハイライト表示します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' カスタムスタイルを作成
flex.Styles.Add("track")
flex.Styles("track").BackColor = Color.Gold
End Sub
Private Sub flex_MouseEnterCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseEnterCell
' セル内にマウスポインタが入ればスタイルを設定
362
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.SetCellStyle(e.Row, e.Col, flex.Styles("track"))
End Sub
Private Sub flex_MouseLeaveCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseLeaveCell
' セルから出た際にスタイルを削除
flex.SetCellStyle(e.Row, e.Col, CType(Nothing, C1.Win.C1FlexGrid.CellStyle))
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// カスタムスタイルを作成
flex.Styles.Add("track");
flex.Styles["track"].BackColor = Color.Gold;
}
private void flex_MouseEnterCell(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
// セル内にマウスポインタが入ればスタイルを設定
flex.SetCellStyle(e.Row, e.Col, flex.Styles["track"]);
}
private void flex_MouseLeaveCell(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
// セルから出た際にスタイルを削除
flex.SetCellStyle(e.Row, e.Col, (C1.Win.C1FlexGrid.CellStyle)null);
}
マージ
マージに関するタスクを紹介します。
隣接する同一データを自動マージする
グリッドの AllowMerging プロパティを Free にし(デフォルトはNone)、行や列の AllowMerging プロパティを True に設
定することで、固定セル・通常セルを自動的にマージして表示します。
【実行例】
2列目、5・7・8行目をマージ。8行目は列のマージが優先されます。
363
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Free
' 固定行数を設定
flex.Rows.Fixed = 2
' 各行、列のAllowMergingプロパティを設定
flex.Cols(2).AllowMerging = True
flex.Rows(5).AllowMerging = True
flex.Rows(8).AllowMerging = True
' データの設定
flex(0, 2) = "列のマージ"
flex(1, 2) = "列のマージ"
flex(2, 2) = "列のマージ"
flex(3, 2) = "列のマージ"
flex(5, 3) = "行のマージ"
flex(5, 4) = "行のマージ"
flex(7, 2) = "列のマージが優先"
flex(8, 2) = "列のマージが優先"
flex(8, 3) = "列のマージが優先"
C# コードの書き方
C#
// グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Free;
// 固定行数を設定
flex.Rows.Fixed = 2;
// 各行、列のAllowMergingプロパティを設定
flex.Cols[2].AllowMerging = true;
flex.Rows[5].AllowMerging = true;
flex.Rows[8].AllowMerging = true;
// データの設定
364
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex[0,
flex[1,
flex[2,
flex[3,
flex[5,
flex[5,
flex[7,
flex[8,
flex[8,
2]
2]
2]
2]
3]
4]
2]
2]
3]
=
=
=
=
=
=
=
=
=
"列のマージ";
"列のマージ";
"列のマージ";
"列のマージ";
"行のマージ";
"行のマージ";
"列のマージが優先";
"列のマージが優先";
"列のマージが優先";
注意:
固定セルと通常セルはマージされません。
自動マージの場合、特定の位置でのみマージする(同一データをマージしない)といった動作はできません。この
場合は、自動マージのカスタマイズや制限付きマージ、カスタムマージを検討してください。
行と列のマージが同時に行われた場合、列のマージが優先されます。
カスタムマージと自動マージを同時に実装することはできません。
隣接する同一データを自動マージする(制限付き)
グリッドの AllowMerging プロパティを RestrictRows(上にあるセルもマージされる場合)、またはRestrictCols(左にあるセ
ルもマージされる場合)、RestrictAll(上または左にあるセルもマージされる場合)にし、行や列の AllowMerging プロパティ
を True に設定します。
【実行例】 上にあるセルもマージされる場合(
上にあるセルもマージされる場合(RestrictRows))
1. 2行目をマージ。2行目のCCCのセルは、1行目がマージされているセルのみマージされます。
Visual Basic コードの書き方
Visual Basic
' グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.RestrictRows
' 各行、列のAllowMergingプロパティを設定
365
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Rows(1).AllowMerging = True
flex.Rows(2).AllowMerging = True
' 列ヘッダの設定
flex.Rows(1).Caption = "1行目"
flex.Rows(2).Caption = "2行目"
' データの設定
flex(1, 1) = "AAA"
flex(1, 2) = "AAA"
flex(1, 3) = "BBB"
flex(1, 4) = "BBB"
flex(2, 1) = "CCC"
flex(2, 2) = "CCC"
flex(2, 3) = "CCC"
flex(2, 4) = "CCC"
C# コードの書き方
C#
// グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.RestrictRows;
// 各行、列のAllowMergingプロパティを設定
flex.Rows[1].AllowMerging = true;
flex.Rows[2].AllowMerging = true;
// 列ヘッダの設定
flex.Rows[1].Caption = "1行目";
flex.Rows[2].Caption = "2行目";
// データの設定
flex[1, 1] = "AAA";
flex[1, 2] = "AAA";
flex[1, 3] = "BBB";
flex[1, 4] = "BBB";
flex[2, 1] = "CCC";
flex[2, 2] = "CCC";
flex[2, 3] = "CCC";
flex[2, 4] = "CCC";
【実行例】 左にあるセルもマージされる場合(
左にあるセルもマージされる場合(RestrictCols))
1. 2列目をマージ。2列目のCCCのセルは、1列目がマージされているセルのみマージされます。
366
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.RestrictCols
' 各行、列のAllowMergingプロパティを設定
flex.Cols(1).AllowMerging = True
flex.Cols(2).AllowMerging = True
' 列ヘッダの設定
flex.Cols(1).Caption = "1列目"
flex.Cols(2).Caption = "2列目"
' データの設定
flex(1, 1) = "AAA"
flex(2, 1) = "AAA"
flex(3, 1) = "BBB"
flex(4, 1) = "BBB"
flex(1, 2) = "CCC"
flex(2, 2) = "CCC"
flex(3, 2) = "CCC"
flex(4, 2) = "CCC"
C# コードの書き方
C#
// グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.RestrictCols;
// 各行、列のAllowMergingプロパティを設定
flex.Cols[1].AllowMerging = true;
flex.Cols[2].AllowMerging = true;
// 列ヘッダの設定
flex.Cols[1].Caption = "1列目";
flex.Cols[2].Caption = "2列目";
// データの設定
367
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex[1,
flex[2,
flex[3,
flex[4,
flex[1,
flex[2,
flex[3,
flex[4,
1]
1]
1]
1]
2]
2]
2]
2]
=
=
=
=
=
=
=
=
"AAA";
"AAA";
"BBB";
"BBB";
"CCC";
"CCC";
"CCC";
"CCC";
注意:
固定セルと通常セルはマージされません。
行と列のマージが同時に行われた場合、列のマージが優先されます。
カスタムマージと自動マージを同時に実装することはできません。
自動マージ処理をカスタマイズする
C1FlexGrid コントロールの自動マージでは、行のマージよりも列のマージが優先される仕様になっているため、行および列の
両方にまたがるブロックのセル範囲をマージすることができません。また、隣接するセルの値が同じ場合でも特定の位置では
マージしないといった動作もできないといった制限があります。
この場合、カスタムマージ(セル結合)で対応するか、C1FlexGrid を継承、GetMergeRange メソッドをオーバーライドし、自
動マージ処理をカスタマイズする方法があります。
【実行例】 ブロックのセル範囲をマージ (CustomCellMerge サンプル)
曜日(列)や時間(行)をまたがってブロック単位にマージされています。
【実行例】 マージ範囲を限定 (CustomCellMerge2 サンプル)
上下の隣接するセル同士が同じ値でもマージを行わず、[ID] 列ごとにマージしています。
368
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
注意:
注意:コード例については、付属の CustomCellMerge/CustomCellMerge2 サンプルを参照してください。
カスタムマージ(セル結合)を行う
グリッドのAllowMerging プロパティをCustom にし、マージ(結合)したいセル範囲を MergedRanges コレクションに追加し
ます。
【実行例】 2行
行2列目から
列目から5行
行3列目を結合
列目を結合
Visual Basic コードの書き方
Visual Basic
' グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom
369
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' マージ(結合)したいセル範囲を取得
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(2, 2, 5, 3)
' セル範囲にデータを設定
cr.Data = "マージ(セル結合)"
' セル範囲の背景色を設定
cr.StyleNew.BackColor = Color.AliceBlue
' セル範囲のテキスト表示位置を設定
cr.Style.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter
' セル範囲をMergedRangesコレクションに追加
flex.MergedRanges.Add(cr)
C# コードの書き方
C#
// グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom;
// マージ(結合)したいセル範囲を取得
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(2, 2, 5, 3);
// セル範囲にデータを設定
cr.Data = "マージ(セル結合)";
// セル範囲の背景色を設定
cr.StyleNew.BackColor = Color.AliceBlue;
// セル範囲のテキスト表示位置を設定
cr.Style.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter;
// セル範囲をMergedRangesコレクションに追加
flex.MergedRanges.Add(cr);
注意:
マージ(結合)を解除する場合は、MergedRanges コレクションから削除(Clear/
/RemoveAt)します。
カスタムマージと自動マージを同時に実装することはできません。
オーバーフロー表示を行う
グリッドの AllowMerging プロパティを Spill にします。1つのセル内に収まらない長いデータが隣のセル(空白の場合に限
り)にはみ出して表示されます。
【実行例】
370
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Spill
' データの設定
flex(2, 1) = "セル内に収まらない長いデータをオーバーフロー表示"
C# コードの書き方
C#
// グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Spill;
// データの設定
flex[2, 1] = "セル内に収まらない長いデータをオーバーフロー表示";
注意:
注意:カスタムマージや自動マージと同時に実装することはできません。
ノード行をマージする
グリッドの AllowMerging プロパティを Nodes にします。ノード行全体がマージされて表示されます。
【実行例】
371
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' グリッドの AllowMerging プロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Nodes
' 列数:6
flex.Cols.Count = 6
' 固定列:0
flex.Cols.Fixed = 0
' ツリー列:0
flex.Tree.Column = 0
' ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf
' 1行目をノード行に設定
flex.Rows(1).IsNode = True
' 階層レベルを0に設定
flex.Rows(1).Node.Level = 0
' 3行目をノード行に設定
flex.Rows(3).IsNode = True
' 階層レベルを0に設定
flex.Rows(3).Node.Level = 0
flex(1, 0) = "ノード行1"
flex(3, 0) = "ノード行2"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// グリッドのAllowMergingプロパティを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Nodes;
// 列数:6
flex.Cols.Count = 6;
// 固定列:0
flex.Cols.Fixed = 0;
372
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// ツリー列:0
flex.Tree.Column = 0;
// ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf;
// 1行目をノード行に設定
flex.Rows[1].IsNode = true;
// 階層レベルを0に設定
flex.Rows[1].Node.Level = 0;
// 3行目をノード行に設定
flex.Rows[3].IsNode = true;
// 階層レベルを0に設定
flex.Rows[3].Node.Level = 0;
flex[1, 0] = "ノード行1";
flex[3, 0] = "ノード行2";
}
固定セルと通常セルのマージモードを別々に設定する
AllowMergingFixed プロパティで固定セルのマージモードを、AllowMerging プロパティで通常セルのマージモードを設定
します。
注意:
注意:グリッドの AllowMerging プロパティを FixedOnly に設定すると、固定行/列のみが自動マージの対象になり、
通常セルがマージされません。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 固定行数の設定
flex.Rows.Fixed = 3
' 固定セルのマージモードを設定
373
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.AllowMergingFixed = C1.Win.C1FlexGrid.AllowMergingEnum.Custom
' マージ(結合)したいセル範囲を取得
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(0, 1, 2, 3)
' セル範囲にデータを設定
cr.Data = "マージ(セル結合)"
' セル範囲のテキスト表示位置を設定
cr.StyleNew.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter
' セル範囲をMergedRangesコレクションに追加
flex.MergedRanges.Add(cr)
' 通常セルのマージモードを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Free
' 各列のAllowMergingプロパティを設定
flex.Cols(1).AllowMerging = True
flex.Cols(2).AllowMerging = True
flex.Cols(3).AllowMerging = True
' データの設定
flex(3, 1) = "AAA"
flex(4, 1) = "AAA"
flex(5, 1) = "AAA"
flex(3, 2) = "BBB"
flex(4, 2) = "BBB"
flex(5, 2) = "BBB"
flex(6, 2) = "CCC"
flex(7, 2) = "CCC"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 固定行数の設定
flex.Rows.Fixed = 3;
// 固定セルのマージモードを設定
flex.AllowMergingFixed = C1.Win.C1FlexGrid.AllowMergingEnum.Custom;
// マージ(結合)したいセル範囲を取得
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(0, 1, 2, 3);
// セル範囲にデータを設定
cr.Data = "マージ(セル結合)";
// セル範囲のテキスト表示位置を設定
cr.StyleNew.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter;
// セル範囲をMergedRangesコレクションに追加
flex.MergedRanges.Add(cr);
// 通常セルのマージモードを設定
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Free;
// 各列のAllowMergingプロパティを設定
flex.Cols[1].AllowMerging = true;
flex.Cols[2].AllowMerging = true;
flex.Cols[3].AllowMerging = true;
// データの設定
374
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex[3,
flex[4,
flex[5,
flex[3,
flex[4,
flex[5,
flex[6,
flex[7,
1]
1]
1]
2]
2]
2]
2]
2]
=
=
=
=
=
=
=
=
"AAA";
"AAA";
"AAA";
"BBB";
"BBB";
"BBB";
"CCC";
"CCC";
}
注意:
行と列のマージが同時に行われた場合、列のマージが優先されます。
固定セルまたは通常セル内でカスタムマージと自動マージを同時に実装することはできません。
マージセルかどうかを判別する
GetMergedRange メソッドで任意のセルを含むセル範囲を取得し、CellRange オブジェクトの IsSingleCell プロパティで、取
得したセル範囲が単一セルで構成されるかどうかを参照します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' カスタムマージ(セル結合)
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(1, 1, 2, 3)
flex.MergedRanges.Add(cr)
End Sub
' 2行3列目のセルがマージセルかどうかを判別します
375
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 2行3列目のセルを含むCellRangeオブジェクトを取得
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetMergedRange(2, 3)
' マージセルかどうかを判別
If cr.IsSingleCell = False Then
' マージセルの場合の処理
MessageBox.Show("マージセルです")
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// カスタムマージ(セル結合)
flex.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom;
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(1, 1, 2, 3);
flex.MergedRanges.Add(cr);
}
// 2行3列目のセルがマージセルかどうかを判別します
private void button1_Click(object sender, EventArgs e)
{
// 2行3列目のセルを含むCellRangeオブジェクトを取得
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetMergedRange(2, 3);
// マージセルかどうかを判別
if(cr.IsSingleCell == false)
{
// マージセルの場合の処理
MessageBox.Show("マージセルです");
}
}
選択/移動
セルの選択や移動に関するタスクを紹介します。付属の下記サンプルも参照してください。
サンプル
説明
CustomSelection
テキストエディタのような非長方形の行範囲選択を実現します
LockedColumns
列単位でフォーカス不可に設定します
MultiSelection
Excel のような複数の範囲選択を実現します
SelectionMode
FlexGrid に実装されている選択方法の種類を紹介します
選択モードを変更する
376
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
SelectionMode プロパティを変更します。(デフォルトはDefault)
【実行例】 単一セルの選択(
単一セルの選択(Cell))
【実行例】 単一セル、セル範囲の選択(
単一セル、セル範囲の選択(CellRange))
【実行例】 単一列の選択(
単一列の選択(Column))
377
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】 単一列、連続する複数列の選択(
単一列、連続する複数列の選択(ColumnRange))
【実行例】 行、複数行、連続しない複数行の選択(
行、複数行、連続しない複数行の選択(ListBox))
378
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】 単一行の選択(
単一行の選択(Row))
【実行例】 連続する複数行の選択(
連続する複数行の選択(ScrollFlags.AlwaysVisible))
379
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox
C# コードの書き方
C#
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox;
注意:
注意:コントロールにフォーカスがないときにセルを強調表示するかどうかを指定するには、HighLight プロパティを使
用します。
複数の選択モードを利用する
行ヘッダをクリックした際に SelectionMode プロパティを ListBox に設定し、その他の部分をクリックした場合には Default
に戻します。このような処理で、Default+ListBox の選択モードを実装します。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_BeforeMouseDown(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.BeforeMouseDownEventArgs) Handles flex.BeforeMouseDown
' 行ヘッダがクリックされた場合、選択モードをListBoxに設定
If flex.HitTest(e.X, e.Y).Type = C1.Win.C1FlexGrid.HitTestTypeEnum.RowHeader Then
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox
Else
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.Default
End If
End Sub
C# コードの書き方
380
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
private void flex_BeforeMouseDown(object sender,
C1.Win.C1FlexGrid.BeforeMouseDownEventArgs e)
{
// 行ヘッダがクリックされた場合、選択モードをListBoxに設定
if (flex.HitTest(e.X, e.Y).Type == C1.Win.C1FlexGrid.HitTestTypeEnum.RowHeader)
{
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox;
}
else
{
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.Default;
}
}
行全体をハイライト表示する
SelectionMode プロパティを Row や RowRange、ListBox に設定して行選択にした上で、FocusRect プロパティを None
にしてカレントセルのフォーカス枠を非表示にします。
【実行例】
Visual Basic コードの書き方
Visual Basic
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox
flex.FocusRect = C1.Win.C1FlexGrid.FocusRectEnum.None
C# コードの書き方
C#
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox;
381
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.FocusRect = C1.Win.C1FlexGrid.FocusRectEnum.None;
選択範囲を作成する
2つの対角(カレントセルと、セル範囲の最後のセル)でセル範囲を作成します。Row/Col プロパティにてカレントセル
を、RowSel/ColSel プロパティにてセル範囲の最後のセルを設定します。Select メソッドでも同様の処理が可能です。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 3行2列目から6行3列目を選択範囲に設定
flex.Row = 3
flex.Col = 2
flex.RowSel = 6
flex.ColSel = 3
' 同じ処理
'flex.Select(3, 2, 6, 3)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 3行2列目から6行3列目を選択範囲に設定
flex.Row = 3;
flex.Col = 2;
flex.RowSel = 6;
382
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.ColSel = 3;
// 同じ処理
//flex.Select(3, 2, 6, 3);
}
注意:
注意:カレントセルを変更すると、選択範囲は自動的にリセットされます。
選択範囲を取得する
Selection プロパティを使用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.Selection
MessageBox.Show("選択範囲" & vbCrLf & _
cr.r1 & ":" & cr.c1 & "から" & cr.r2 & ":" & cr.c2)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.Selection;
MessageBox.Show("選択範囲\n" +
cr.r1 + ":" + cr.c1 + "から" + cr.r2 + ":" + cr.c2);
383
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
注意:
注意:カレントセルを変更すると、選択範囲は自動的にリセットされます。
複数行を選択する(
複数行を選択する(ListBox))
コードから複数行を選択する場合、SelectionMode プロパティを ListBox に設定し、選択したい行のSelected プロパティを
True にする方法があります。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 3、4行目を選択
' ※この場合、カレントセルは移動しません
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox
flex.Rows(3).Selected = True
flex.Rows(4).Selected = True
' 3、4行目全体を選択範囲に設定
' flex.Row = 3
' flex.Col = flex.Cols.Fixed
' flex.RowSel = 4
' flex.ColSel = flex.Cols.Count - 1
' 同じ処理
'flex.Select(3, flex.Cols.Fixed, 4, flex.Cols.Count - 1, False)
End Sub
C# コードの書き方
C#
384
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
private void button1_Click(object sender, EventArgs e)
{
// 3、4行目を選択
// ※この場合、カレントセルは移動しません
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox;
flex.Rows[3].Selected = true;
flex.Rows[4].Selected = true;
// 3、4行目全体を選択範囲に設定
//flex.Row = 3;
//flex.Col = flex.Cols.Fixed;
//flex.RowSel = 4;
//flex.ColSel = flex.Cols.Count - 1;
// 同じ処理
//flex.Select(3, flex.Cols.Fixed, 4, flex.Cols.Count - 1, false);
}
行の選択状態を取得する(
行の選択状態を取得する(ListBox))
SelectionMode プロパティを ListBox に設定している場合は、Selected プロパティから選択されている行を取得することが
できます。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim s As String = flex.Rows.Selected.Count & _
"行が選択されています。" & vbCrLf
For Each r As C1.Win.C1FlexGrid.Row In flex.Rows.Selected
385
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
s = s & r.Index & "行目" & vbCrLf
Next
' 同じ結果になります
For i As Integer = flex.Rows.Fixed To flex.Rows.Count - 1
If flex.Rows(i).Selected = True Then
s = s & i & "行目" & vbCrLf
End If
Next
MessageBox.Show(s)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
flex.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox;
String s = flex.Rows.Selected.Count + "行が選択されています。\n";
foreach (C1.Win.C1FlexGrid.Row r in flex.Rows.Selected)
{
s = s + r.Index + "行目\n";
}
// 同じ処理です
for (int i = flex.Rows.Fixed; i < flex.Rows.Count; i++)
{
if (flex.Rows[i].Selected = true)
{
s = s + i.ToString() + "行目\n";
}
}
MessageBox.Show(s);
}
カレントセルを移動/取得する
Row プロパティにてカレント行を、Col プロパティにてカレント列を設定することで、カレントセルを移動します。Select メソッド
を使用することでもカレントセルを移動できます。
カレントセルを取得する場合は、Row/
/Col プロパティを参照します。
【実行例】
3行2列目にカレントセルを移動
386
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' 行を移動
flex.Row = 3
' 列を移動
flex.Col = 2
' カレントセルを移動
flex.Select(3, 2, True)
C# コードの書き方
C#
// 行を移動
flex.Row = 3;
// 列を移動
flex.Col = 2;
// カレントセルを移動
flex.Select(3, 2, true);
Enter/Tab キーによりカレントセルを移動する
Enter キーでセルを移動するには、KeyActionEnter プロパティを変更します。(デフォルトMoveDown)
また、Tab キーでセルを移動するには、KeyActionTab プロパティを変更します。(デフォルトNone)
Visual Basic コードの書き方
Visual Basic
flex.KeyActionEnter = C1.Win.C1FlexGrid.KeyActionEnum.MoveAcross
flex.KeyActionTab = C1.Win.C1FlexGrid.KeyActionEnum.MoveAcrossOut
C# コードの書き方
387
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
flex.KeyActionEnter = C1.Win.C1FlexGrid.KeyActionEnum.MoveAcross;
flex.KeyActionTab = C1.Win.C1FlexGrid.KeyActionEnum.MoveAcrossOut;
注意:
注意:KeyActionEnter プロパティの設定は、編集時に Enter キーが押された際の動作になります。非編集時に Enter
キーを押すと、編集状態(編集モードに移行)になります。「Enter キーを押した際、編集モードに移行しないようにする」
も参照してください。
なお、KeyActionEnter プロパティでは、MoveAcrossOut の設定は有効になりません。最終行・最終列のセルで Enter キー
が押された際に別のコントロールに移動する場合は、別途コードで制御する必要があります。
【実行例】
移動後イメージ(
移動後イメージ(Button コントロールにフォーカスが移動)
388
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex.KeyActionEnter = C1.Win.C1FlexGrid.KeyActionEnum.MoveAcross
End Sub
' 編集時に最終行・最終列で[Enter]キーを押した際
' 次のコントロール(ボタン)にフォーカスを移動
Private Sub flex_KeyDownEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.KeyEditEventArgs) Handles flex.KeyDownEdit
If flex.Row = flex.Rows.Count - 1 And _
flex.Col = flex.Cols.Count - 1 And _
e.KeyCode = Keys.Enter Then
flex.FinishEditing()
Button1.Focus()
End If
End Sub
' 非編集時に最終行・最終列で[Enter]キーを押した際
' 次のコントロール(ボタン)にフォーカスを移動
Private Sub flex_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles flex.KeyPress
If flex.Row = flex.Rows.Count - 1 And _
flex.Col = flex.Cols.Count - 1 And _
Asc(e.KeyChar) = Keys.Enter Then
e.Handled = True
Button1.Focus()
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.KeyActionEnter = C1.Win.C1FlexGrid.KeyActionEnum.MoveAcross;
}
// 編集時に最終行・最終列で[Enter]キーを押した際
// 次のコントロール(ボタン)にフォーカスを移動
private void flex_KeyDownEdit(object sender, C1.Win.C1FlexGrid.KeyEditEventArgs e)
{
if ((flex.Row == flex.Rows.Count - 1) &&
(flex.Col == flex.Cols.Count - 1) &&
(e.KeyCode == Keys.Enter))
{
flex.FinishEditing();
button1.Focus();
}
}
// 非編集時に最終行・最終列で[Enter]キーを押した際
// 次のコントロール(ボタン)にフォーカスを移動
private void flex_KeyPress(object sender, KeyPressEventArgs e)
389
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
{
if ((flex.Row == flex.Rows.Count - 1) &&
(flex.Col == flex.Cols.Count - 1) &&
(e.KeyChar == '\r'))
{
e.Handled = true;
button1.Focus();
}
}
右クリックでカレントセルを移動する
デフォルトの動作では、右クリックでセルは移動しません。BeforeMouseDown や MouseDown イベントなどを利用して右ク
リックを判別し、カレントセルを移動します。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_BeforeMouseDown(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.BeforeMouseDownEventArgs) Handles flex.BeforeMouseDown
' 右クリック時
If e.Button = Windows.Forms.MouseButtons.Right Then
' クリックされた位置を取得
Dim h As C1.Win.C1FlexGrid.HitTestInfo
h = flex.HitTest(e.X, e.Y)
' カレントセルを移動
flex.Select(h.Row, h.Column)
End If
End Sub
C# コードの書き方
C#
private void flex_BeforeMouseDown(object sender,
C1.Win.C1FlexGrid.BeforeMouseDownEventArgs e)
{
// 右クリック時
if (e.Button == MouseButtons.Right)
{
// クリックされた位置を取得
C1.Win.C1FlexGrid.HitTestInfo h;
h = flex.HitTest(e.X, e.Y);
// カレントセルを移動
flex.Select(h.Row, h.Column);
}
}
関連項目
クリックされたセルを取得する
390
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
カレントセルを移動/取得する
任意のセルを表示する
Select メソッド、または ShowCell メソッドを使用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 任意のセル(10行5列目)を表示する
flex.Select(10, 5, True)
' flex.ShowCell(10, 5)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 任意のセル(10行5列目)を表示する
flex.Select(10, 5, true);
// flex.ShowCell(10, 5);
}
注意:
注意:ShowCell メソッドの場合、カレントセルは移動しません。
カレントセルのカーソルを非表示にする
391
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Row またはCol プロパティに -1 を設定します。
【実行例】
カーソル非表示後イメージ
Visual Basic コードの書き方
Visual Basic
' カレントセルのカーソルを非表示にする
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' Row(または Col)に-1を設定
flex.Row = -1
392
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
'flex.Col = -1
End Sub
C# コードの書き方
C#
// カレントセルのカーソルを非表示にする
private void button1_Click(object sender, EventArgs e)
{
// Row(または Col)に-1を設定
flex.Row = -1;
//flex.Col = -1;
}
注意:
注意:ユーザーがセルをクリックするか、-1 を設定した Row(または Col)プロパティに適切な値にすると、カーソルは再
度表示されます。
クリックされたセルを取得する
MouseRow/MouseCol プロパティにより取得します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub flex_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles flex.MouseDown
MessageBox.Show("クリックされたセル" & vbCrLf & _
"行:" & flex.MouseRow & vbCrLf & _
"列:" & flex.MouseCol)
End Sub
393
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
private void flex_MouseDown(object sender, MouseEventArgs e)
{
MessageBox.Show("クリックされたセル\n" +
"行:" + flex.MouseRow + "\n" +
"列:" + flex.MouseCol);
}
注意:
注意:HitTest メソッドを使用することでもセル位置を取得できます。(参照:「クリックされたセルの種類を判別する」)
クリックされたセルの種類を判別する
HitTest メソッドを使用してマウス位置の情報(HitTestInfo 構造体)を取得し、Type フィールドから判別します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub flex_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles flex.MouseDown
' マウス位置の情報を取得
Dim ht As C1.Win.C1FlexGrid.HitTestInfo
ht = flex.HitTest(e.X, e.Y)
' セルタイプ、行・列のインデックスを表示
MessageBox.Show("クリックされたセル" & vbCrLf & _
"セルタイプ:" & ht.Type.ToString & vbCrLf & _
"行:" & ht.Row & vbCrLf & _
"列:" & ht.Column)
End Sub
394
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
private void flex_MouseDown(object sender, MouseEventArgs e)
{
// マウス位置の情報を取得
C1.Win.C1FlexGrid.HitTestInfo ht;
ht = flex.HitTest(e.X, e.Y);
// セルタイプ、行・列のインデックスを表示
MessageBox.Show("クリックされたセル\n" +
"セルタイプ:" + ht.Type.ToString() + "\n" +
"行:" + ht.Row + "\n" +
"列:" + ht.Column);
}
ダブルクリック時にテキストを選択状態にする
「セルの編集」にもありますが、セルをダブルクリックすると編集モードに移行してクリックした場所の近くに入力キャレットが表
示されます。この動作を変更し、ダブルクリック時にセル内の値を選択状態にするには、次の処理を実装します。
BeforeDoubleClick イベントでダブルクリックを検出、無効にする
StartEditing メソッドで編集モードに移行する
編集用エディタを TextBox クラスに変換し、SelectAll メソッドで選択状態にする
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub flex_BeforeDoubleClick(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.BeforeMouseDownEventArgs) Handles flex.BeforeDoubleClick
' ダブルクリックを無効にする
e.Cancel = True
395
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' 編集モードに移行
flex.StartEditing()
' TextBoxクラスに変換し、SelectAllメソッドで選択状態にする
Dim tb As TextBox = CType(flex.Editor, TextBox)
tb.SelectAll()
End Sub
C# コードの書き方
C#
private void flex_BeforeDoubleClick(object sender,
C1.Win.C1FlexGrid.BeforeMouseDownEventArgs e)
{
// ダブルクリックを無効にする
e.Cancel = true;
// 編集モードに移行
flex.StartEditing();
// TextBoxクラスに変換し、SelectAllメソッドで選択状態にする
TextBox tb = (TextBox)flex.Editor;
tb.SelectAll();
}
入力
入力/編集
編集
セルの編集に関するタスクを紹介します。
常時入力モードにする
EditOptions プロパティのEditOnRequest フラグを False にします。
このフラグが True に設定されている場合(デフォルトの設定)、ユーザーが入力を開始するかまたはセルをダブルクリック、
[F2]キーを押すまで、グリッドは編集モードに入りません(MS Excel と同じ動作)。
このフラグが False に設定されている場合、グリッドがフォーカスを得たとき、また選択セルが変更されたときには、グリッドは
自動的に編集モードに入ります(MS Access と同じ動作)。
【実行例】
396
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 全部のフラグを False にします
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.None
' EditOnRequestのみをFalseにします
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.AutoSearch Or _
C1.Win.C1FlexGrid.EditFlags.CycleOnDoubleClick Or _
C1.Win.C1FlexGrid.EditFlags.DelayedCommit Or _
C1.Win.C1FlexGrid.EditFlags.ExitOnLeftRightKeys Or _
C1.Win.C1FlexGrid.EditFlags.MultiCheck Or _
C1.Win.C1FlexGrid.EditFlags.UseNumericEditor
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 全部のフラグを False にします
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.None;
// EditOnRequestのみをFalseにします
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.AutoSearch |
C1.Win.C1FlexGrid.EditFlags.CycleOnDoubleClick |
C1.Win.C1FlexGrid.EditFlags.DelayedCommit |
C1.Win.C1FlexGrid.EditFlags.ExitOnLeftRightKeys |
C1.Win.C1FlexGrid.EditFlags.MultiCheck |
C1.Win.C1FlexGrid.EditFlags.UseNumericEditor;
}
編集中のセルの外観を変更する
Editor 組み込みスタイルを使用して、編集中のセルの外観を変更します。非編集時のカレントセルの外観を変更する方法
は、「カレントセルの外観を変更する」を参照してください。
【実行例】
397
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 編集中のセルの外観を変更する
Dim cs As C1.Win.C1FlexGrid.CellStyle
cs = flex.Styles.Editor
cs.BackColor = Color.Yellow
cs.ForeColor = Color.Red
cs.Font = New Font(cs.Font.Name, 10, FontStyle.Italic)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 編集中のセルの外観を変更する
C1.Win.C1FlexGrid.CellStyle cs;
cs = flex.Styles.Editor;
cs.BackColor = Color.Yellow;
cs.ForeColor = Color.Red;
cs.Font = new Font(cs.Font.Name, 10, FontStyle.Italic);
}
注意:
注意:組み込みスタイルは、スタイルエディタ からも設定できます。
グリッド全体の編集を禁止する
グリッド全体の編集を無効にするには、デザイナまたはコードで、AllowEditing プロパティを False に設定します。反対に、編
集を有効にするには AllowEditing プロパティを True(デフォルト)に設定します。
398
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
デザイナの場合
C1FlexGrid タスク メニューで、[編集を有効にする]チェックボックスを OFF にします。
または、プロパティウィンドウで AllowEditing プロパティを探し、それを False に設定します。
コードの場合
Form_Load イベントに以下のコードを追加します。
Visual Basic コードの書き方
Visual Basic
flex.AllowEditing = False
C# コードの書き方
C#
flex.AllowEditing = false;
列単位で編集を禁止する
特定の列の編集を禁止するには、デザイナまたはコードで、AllowEditingプロパティを False に設定します。反対に、編集を
有効にするには AllowEditing プロパティを True(デフォルト)に設定します。
399
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
デザイナの場合
1. グリッドで編集を無効にしたい列を選択します。選択した列の Column タスク メニューが開きます。
2. [編集を有効にする]チェックボックスを OFF にします。
また、AllowEditing プロパティは、[FlexGrid 列エディタ]を使用して設定することもできます。
1. 列エディタ を開きます。[ FlexGrid 列エディタ]へのアクセス方法の詳細については、「列エディタにアクセス」を参照し
てください。
2. 右ペインから編集を無効にしたい列を選択し、左ペインで AllowEditing プロパティを False に設定します。
400
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
3. 〈OK〉をクリックし、列エディタを閉じます。
コードの場合
Form_Load イベントに以下のコードを追加し、1列目(Col1)の編集を制限します。
Visual Basic コードの書き方
Visual Basic
flex.Cols("Col1").AllowEditing = False
' 次のコードと同じ
'flex.Cols(1).AllowEditing = False
C# コードの書き方
C#
flex.Cols["Col1"].AllowEditing = false;
// 次のコードと同じ
//flex.Cols[1].AllowEditing = false;
行単位で編集を禁止する
特定の行の編集を禁止するには、AllowEditing プロパティを False に設定します。反対に、編集を有効にするには
AllowEditing プロパティを True(デフォルト)に設定します。このコード例では、6行目の編集を制限します。
Visual Basic コードの書き方
Visual Basic
flex.Rows(5).AllowEditing = False
C# コードの書き方
401
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
flex.Rows(5).AllowEditing = False;
セル単位で編集を禁止する
BeforeEdit/StartEdit イベントを使用して入力セルを判別し、e.Cancel を True に設定します。下記のサンプルコードでは、
2行3列目のセルを編集不可としています。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_BeforeEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.BeforeEdit
' 2行3列目のセルの編集を禁止
If e.Row = 2 And e.Col = 3 Then
e.Cancel = True
End If
End Sub
C# コードの書き方
C#
private void flex_BeforeEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
// 2行3列目のセルの編集を禁止
if((e.Row == 2) && (e.Col == 3))
{
e.Cancel = true;
}
}
Enter キーを押した際、編集モードに移行しないようにする
編集中ではないセルで Enter キーを押すと、(そのセルの編集が許可されていれば)セルは編集状態になります。この動作を
変更するには、KeyPress イベントで Enter キーの入力を無効にします。下記のサンプルコードでは、Enter キーが入力された
際、編集モードに移行せず、セルを移動しています。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles flex.KeyPress
If e.KeyChar = Chr(Keys.Enter) Then
' Enter キーの入力を無効にする
e.Handled = True
' セルの移動
' KeyActionEnum.MoveAcross+最終セルの場合は先頭へ移動
If flex.Col = flex.Cols.Count - 1 Then
flex.Col = flex.Cols.Fixed
If flex.Row = flex.Rows.Count - 1 Then
402
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Row = flex.Rows.Fixed
Else
flex.Row += 1
End If
Else
flex.Col += 1
End If
End If
End Sub
C# コードの書き方
C#
private void flex_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
// Enter キーの入力を無効にする
e.Handled = true;
// セルの移動
// KeyActionEnum.MoveAcross+最終セルの場合は先頭へ移動
if (flex.Col == flex.Cols.Count - 1)
{
flex.Col = flex.Cols.Fixed;
if (flex.Row == flex.Rows.Count - 1)
{
flex.Row = flex.Rows.Fixed;
}
else
{
flex.Row += 1;
}
}
else
{
flex.Col += 1;
}
}
}
注意:
上記コードを使用しても、F2 キーの入力やダブルクリック時にセルは編集モードに移行します。
KeyPress イベントの詳細は、MSDN を参照してください。
KeyActionEnter プロパティの設定は、編集中に Enter キーが押された際の動作を制御します(「Enter/Tab
キーによりカレントセルを移動する」)。
IMEモードを切り替える
モードを切り替える
C1FlexGrid コントロールにおいてIME制御を行う場合、編集モードに移行する前に発生する BeforeEdit イベント内
で、ImeMode プロパティを設定するという方法になります。
403
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub flex_BeforeEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.BeforeEdit
Select Case e.Col
Case 1
' 1列目は半角カタカナ
flex.ImeMode = Windows.Forms.ImeMode.KatakanaHalf
Case 2
' 2列目はカタカナ
flex.ImeMode = Windows.Forms.ImeMode.Katakana
Case 3
' 3列目はひらがな
flex.ImeMode = Windows.Forms.ImeMode.Hiragana
Case Else
' 上記以外はIMEオフ
flex.ImeMode = Windows.Forms.ImeMode.Off
End Select
End Sub
C# コードの書き方
C#
private void flex_BeforeEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
switch (flex.Col)
{
case 1:
// 1列目は半角カタカナ
flex.ImeMode = ImeMode.KatakanaHalf;
break;
case 2:
// 2列目はカタカナ
flex.ImeMode = ImeMode.Katakana;
break;
case 3:
// 3列目はひらがな
flex.ImeMode = ImeMode.Hiragana;
break;
default:
// 上記以外はIMEオフ
flex.ImeMode = ImeMode.Off;
break;
}
}
キー入力を検知する
非編集時にキーを入力すると、KeyDown/KeyPress/KeyUpイベントが発生します。また、編集中は
KeyDownEdit/KeyPressEdit/KeyUpEdit イベントが発生します。非編集時と編集時で発生するイベントが異なりますの
404
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
で、注意してください。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub flex_KeyDownEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.KeyEditEventArgs) Handles flex.KeyDownEdit
' 編集中に入力されたキーをラベルに出力
Label1.Text = Label1.Text & ":" & e.KeyCode.ToString
End Sub
C# コードの書き方
C#
private void flex_KeyDownEdit(object sender, C1.Win.C1FlexGrid.KeyEditEventArgs e)
{
// 編集中に入力されたキーをラベルに出力
label1.Text = label1.Text + ":" + e.KeyCode.ToString();
}
注意:
注意:KeyDown/KeyPress/KeyUp イベントの詳細は、MSDN を参照してください
セル単位で編集データをチェックする
セルの編集後に発生するValidateEdit イベント内で、編集エディタ(Editor.Text)の内容をチェックします。チェックの結果、編
集状態を維持して再度入力を促す場合などは Cancel 引数を True に設定します。また、セルは変更前の内容になっているた
め、編集エディタにセルの値を設定すると編集を無効にすることもできます。
【実行例】
405
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1列目を日付型にします
flex.Cols(1).DataType = GetType(Date)
End Sub
Private Sub flex_ValidateEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.ValidateEditEventArgs) Handles flex.ValidateEdit
If e.Col = 1 Then
' 過去の日付の場合、変更を許可しません
Dim d As Date = Date.Parse(flex.Editor.Text)
If d >= Date.Today Then
MessageBox.Show("過去の日付を入力してください。", "注意")
e.Cancel = True
End If
'変更の確認で No の場合、変更前の値に戻します
If MessageBox.Show("変更しますか?", "確認", _
MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then
flex.Editor.Text = flex(e.Row, e.Col)
End If
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 1列目を日付型にします
flex.Cols[1].DataType = typeof(DateTime);
}
406
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
private void flex_ValidateEdit(object sender, C1.Win.C1FlexGrid.ValidateEditEventArgs
e)
{
if(e.Col == 1)
{
// 過去の日付の場合、変更を許可しません
DateTime d = DateTime.Parse(flex.Editor.Text);
if (d >= DateTime.Today)
{
MessageBox.Show("過去の日付を入力してください。", "注意");
e.Cancel = true;
}
// 変更の確認で No の場合、変更前の値に戻します
if (MessageBox.Show("変更しますか?", "確認",
MessageBoxButtons.YesNo) == DialogResult.No)
{
flex.Editor.Text = flex[e.Row, e.Col].ToString();
}
}
}
注意:
注意:GetType メソッドや typeof 式、MssageBox.Show メソッドの詳細は、MSDNを参照してください。
関連項目
入力値の正当性検査
行単位で編集データをチェックする
行の移動時や他のコントロールにフォーカスが移動する際に発生するRowValidating/RowValidated イベントを利用でき
ます。チェックの結果、対象行から移動させないようにする場合は、Cancel 引数を True に設定します。
【実行例】
Visual Basic コードの書き方
407
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic
Private Sub flex_RowValidating(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.RowValidating
' 1列目の値は100以上とします
If flex(e.Row, 1) < 100 Then
e.Cancel = True
MessageBox.Show("データが不正です")
End If
End Sub
C# コードの書き方
C#
private void flex_RowValidating(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
// 1列目の値は100以上とします
if (int.Parse(flex[e.Row, 1].ToString()) < 100)
{
e.Cancel = true;
MessageBox.Show("データが不正です");
}
}
左右の矢印キーによる編集の終了を無効にする
EditOptions プロパティの ExitOnLeftRightKeys フラグを False にします。
このフラグが True に設定されている場合(デフォルトの設定)、組み込みの編集エディタは、キャレットが先頭位置にある状態
でユーザーが左矢印キーを押したとき、またはキャレットが末尾位置(TextLengthの位置)にある状態でユーザーが右矢印
キーを押したとき、編集モードを抜けます。
このフラグが False に設定されている場合、組み込みの編集エディタは、ユーザーが[Enter]キーを押すか、または別なセル
をクリックする、上下の矢印キーで隣接する行に移動するまで、編集モードを抜けません。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 全部のフラグを False にします
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.None
' ExitOnLeftRightKeysのみをFalseにします
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.AutoSearch Or _
C1.Win.C1FlexGrid.EditFlags.CycleOnDoubleClick Or _
C1.Win.C1FlexGrid.EditFlags.DelayedCommit Or _
C1.Win.C1FlexGrid.EditFlags.EditOnRequest Or _
C1.Win.C1FlexGrid.EditFlags.MultiCheck Or _
C1.Win.C1FlexGrid.EditFlags.UseNumericEditor
End Sub
C# コードの書き方
408
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
private void Form1_Load(object sender, EventArgs e)
{
// 全部のフラグを False にします
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.None;
// ExitOnLeftRightKeysのみをFalseにします
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.AutoSearch |
C1.Win.C1FlexGrid.EditFlags.CycleOnDoubleClick |
C1.Win.C1FlexGrid.EditFlags.DelayedCommit |
C1.Win.C1FlexGrid.EditFlags.EditOnRequest |
C1.Win.C1FlexGrid.EditFlags.MultiCheck |
C1.Win.C1FlexGrid.EditFlags.UseNumericEditor;
}
セル編集時の改行を禁止する
デフォルトではセル編集時に [Alt]+[Enter]、または [Ctrl]+[Enter]、 または [Shift]+[Enter]、[Ctrl]+[J]、[Ctrl]+[Shift]+
[J])で、テキストを改行することができます。この動作を禁止するには、KeyDownEdit/KeyPressEdit イベントを使用して
キー入力を無効にします。
Visual Basic コードの書き方
Visual Basic
' キー入力無効用のフラグ
Dim key_flag As Boolean = False
Private Sub flex_KeyDownEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.KeyEditEventArgs) Handles flex.KeyDownEdit
' [Alt]+[Enter]のキー入力を無効にします
If e.Alt = True And e.KeyCode = Keys.Enter Then
e.Handled = True
End If
' 次のキー入力はKeyPressEditイベントで無効にします
If e.Shift = True And e.KeyCode = Keys.Enter Or _
e.Control = True And e.KeyCode = Keys.Enter Or _
e.Control = True And e.KeyCode = Keys.J Or _
e.Control = True And e.KeyCode = Keys.J And e.Shift = True Then
key_flag = True
End If
End Sub
Private Sub flex_KeyPressEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.KeyPressEditEventArgs) Handles flex.KeyPressEdit
If key_flag = True Then
e.Handled = True
key_flag = False
End If
End Sub
C# コードの書き方
C#
// キー入力無効用のフラグ
409
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
bool key_flag = false;
private void flex_KeyDownEdit(object sender, C1.Win.C1FlexGrid.KeyEditEventArgs e)
{
// [Alt]+[Enter]のキー入力を無効にします
if ((e.Alt == true) && (e.KeyCode == Keys.Enter))
{
e.Handled = true;
}
// 次のキー入力はKeyPressEditイベントで無効にします
else if (((e.Shift == true) && (e.KeyCode == Keys.Enter)) ||
((e.Control == true) && (e.KeyCode == Keys.Enter)) ||
((e.Control == true) && (e.KeyCode == Keys.J)) ||
((e.Control == true) && (e.KeyCode == Keys.J) && (e.Shift == true)))
{
key_flag = true;
}
}
private void flex_KeyPressEdit(object sender, C1.Win.C1FlexGrid.KeyPressEditEventArgs
e)
{
if (key_flag == true)
{
e.Handled = true;
key_flag = false;
}
}
注意:
注意:EditOptions プロパティは、プロパティページからも設定できます。
文字数単位で入力を制限する
入力文字数を制限する方法としては、下記の方法があります。
EditMask プロパティを使用する
たとえば下記のコードでは、1列目の入力文字数を7文字に制限しています。EditMask プロパティは、郵便番号や電話番号な
ど、桁数が固定されているデータを入力する場合に有効です。
Visual Basic コードの書き方
Visual Basic
' 下線を表示
flex.Cols(1).EditMask = "&&&&&&&&"
' 下線を表示しない
flex.Cols(2).EditMask = "&&&&&&&&; "
' 電話番号
flex.Cols(3).EditMask = "(000)-(000)-0000"
C# コードの書き方
C#
410
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// 下線を表示
flex.Cols[1].EditMask = "&&&&&&&&";
// 下線を表示しない
flex.Cols[2].EditMask = "&&&&&&&&; ";
// 電話番号
flex.Cols[3].EditMask = "(000)-(000)-0000";
注意:
注意:EditMask プロパティを使用した入力マスクの設定は、設計時に Column タスク メニューや 列エディタ からも設定
できます。
カスタムエディタに TextBox コントロールを使用する
カスタムエディタの機能を使用して、エディタとして TextBox コントロールを使用します。また、TextBox コントロールの
MaxLength プロパティにより入力文字数を制限します。この方法は、桁数が可変のデータを入力制御する目的の場合に適し
ています。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim tb As TextBox = New TextBox
' 入力を7文字に制限
tb.MaxLength = 7
' カスタムエディタに設定
flex.Cols(1).Editor = tb
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
TextBox tb = new TextBox();
// 入力を7文字に制限
tb.MaxLength = 7;
// カスタムエディタに設定
flex.Cols[1].Editor = tb;
}
SetupEditor イベントを使用する
SetupEditor イベント内で、編集用エディタを TextBox クラスのオブジェクトにセット(変換)し、MaxLength プロパティを設定
することで、入力制御を行うことも可能です。この方法は、桁数が可変のデータを入力制御する目的の場合に適しています。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_SetupEditor(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.SetupEditor
' 1列目のみ入力制限
If e.Col = 1 Then
411
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' 入力を7文字に制限
Dim tb As TextBox = CType(flex.Editor, TextBox)
tb.MaxLength = 7
End If
End Sub
C# コードの書き方
C#
private void flex_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
// 1列目のみ入力制限
if (e.Col == 1)
{
// 入力を7文字に制限
TextBox tb = (TextBox)flex.Editor;
tb.MaxLength = 7;
}
}
ChangeEdit イベントを使用する
セルの値が変更された際には、ChangeEdit イベントが発生します。このイベント内で入力された文字数を判別し、指定文字
数以上の場合は入力文字をカットするような制御方法です。この方法は、桁数が可変のデータを入力制御する目的の場合に
適しています。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_ChangeEdit(ByVal sender As Object, ByVal e As System.EventArgs)
Handles flex.ChangeEdit
' 1列目のみ
If flex.Col = 1 Then
Dim tb As TextBox = CType(flex.Editor, TextBox)
' 7文字以上が入力された場合
If tb.TextLength > 7 Then
' 先頭から7文字のみをエディタに設定
flex.Editor.Text = Mid(tb.Text, 1, 7)
tb.SelectionStart = tb.TextLength
End If
End If
End Sub
C# コードの書き方
C#
private void flex_ChangeEdit(object sender, EventArgs e)
{
// 1列目のみ
if (flex.Col == 1)
{
412
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
TextBox tb = (TextBox)flex.Editor;
// 7文字以上が入力された場合
if (tb.TextLength > 7)
{
// 先頭から7文字のみをエディタに設定
flex.Editor.Text = flex.Editor.Text.Substring(0, 7);
tb.SelectionStart = tb.TextLength;
}
}
}
バイト単位で入力を制限する
セルの内容を変更すると発生するChangeEdit イベントを使用します。バイト関連の処理は(.NET Framework)Encoding クラ
スの GetByte、GetByteCount、GetString メソッドを使用します。下記のコードでは、10バイト以上が入力された場合に、先
頭から10バイト分のみを有効にしています。
Visual Basic コードの書き方
Visual Basic
' 入力を10バイトに制限
Private Sub flex_ChangeEdit(ByVal sender As Object, ByVal e As System.EventArgs)
Handles flex.ChangeEdit
' 1列目のみチェック
If flex.Col = 1 Then
Dim enc As System.Text.Encoding
enc = System.Text.Encoding.GetEncoding("shift-jis")
Dim tb As TextBox = Ctype(flex.Editor, TextBox)
' 10バイト以上が入力された場合
If enc.GetByteCount(tb.Text) > 10 Then
' 先頭から10バイトのみをエディタに設定
flex.Editor.Text = enc.GetString(enc.GetBytes(tb.Text), 0, 10)
tb.SelectionStart = tb.TextLength
End If
End If
End Sub
C# コードの書き方
C#
// 入力を10バイトに制限
private void flex_ChangeEdit(object sender, EventArgs e)
{
// 1列目のみチェック
if (flex.Col == 1)
{
System.Text.Encoding enc;
enc = System.Text.Encoding.GetEncoding("shift-jis");
TextBox tb = (TextBox)flex.Editor;
// 10バイト以上が入力された場合
if (enc.GetByteCount(tb.Text) > 10)
413
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
{
// 先頭から10バイトのみをエディタに設定
flex.Editor.Text = enc.GetString(enc.GetBytes(tb.Text), 0, 10);
tb.SelectionStart = tb.TextLength;
}
}
}
注意:
注意:クラスや GetByte メソッドなどの詳細は、MSDN をご覧ください。
数値のみの入力を許可する
セルに数値のみの入力を許可するには、KeyPressEdit イベントを使用し、無効なキーに対して e.Handled パラメータを True
に設定します。以下のコードを使用し、4番目の列を数値、[Back Space]、[Del]、[.]キーのみを受け付けるように設定しま
す。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_KeyPressEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.KeyPressEditEventArgs) Handles flex.KeyPressEdit
If e.Col = 3 Then
' 0-9、ピリオド、DELETE、BACKSPACEキー以外の入力を不可にします
If Not (e.KeyChar = Chr(48) Or e.KeyChar = Chr(49) Or _
e.KeyChar = Chr(50) Or e.KeyChar = Chr(51) Or _
e.KeyChar = Chr(52) Or e.KeyChar = Chr(53) Or _
e.KeyChar = Chr(54) Or e.KeyChar = Chr(55) Or _
e.KeyChar = Chr(56) Or e.KeyChar = Chr(57) Or _
e.KeyChar = Chr(46) Or e.KeyChar = Chr(127) Or _
e.KeyChar = Chr(8)) Then
' 不正な値として入力をキャンセル
e.Handled = True
End If
End If
End Sub
C# コードの書き方
C#
private void flex_KeyPressEdit(object sender, C1.Win.C1FlexGrid.KeyPressEditEventArgs
e)
{
if (e.Col == 3)
{
// 0-9、ピリオド、DELETE、BACKSPACEキー以外の入力を不可にします
if (!((e.KeyChar == 48) || (e.KeyChar == 49) ||
(e.KeyChar == 50) || (e.KeyChar == 51) || (e.KeyChar == 52) ||
(e.KeyChar == 53) || (e.KeyChar == 54) || (e.KeyChar == 55) ||
(e.KeyChar == 56) || (e.KeyChar == 57) || (e.KeyChar == 46) ||
(e.KeyChar == 127) |
// 不正な値として入力をキャンセル
e.Handled = true;
414
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
}
注意:
注意:セルのデータ型が数値型の場合、デフォルトで組み込み数値型エディタが使用され、数値以外の入力は禁止され
ます。
カスタムエディタを設定する
行や列単位でカスタムエディタを設定する場合はEditor プロパティを、スタイルごとに設定する場合は Editor プロパティを使
用して任意のコントロールを設定します。また、SetupEditor イベントを使用してセル単位での設定も可能です。
注意:
注意:設計時は、列エディタを使用してカスタムエディタ の設定を行えます。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' カスタムエディタを作成します
Dim editor As New NumericUpDown()
editor.BorderStyle = BorderStyle.None
' カスタムエディタを1列目に割り当てます
flex.Cols(1).Editor = editor
End Sub
Private Sub flex_StartEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.StartEdit
' 2行1列目のセルではTextBoxをカスタムエディタに割り当てます
If e.Row = 2 And e.Col = 1 Then
Dim tb As New TextBox
tb.BackColor = Color.Yellow
flex.Editor = tb
End If
End Sub
C# コードの書き方
415
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
private void Form1_Load(object sender, EventArgs e)
{
// カスタムエディタを作成します
NumericUpDown editor = new NumericUpDown();
editor.BorderStyle = BorderStyle.None;
// カスタムエディタを1列目に割り当てます
flex.Cols[1].Editor = editor;
}
private void flex_StartEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
// 2行1列目のセルではTextBoxをカスタムエディタに割り当てます
if((e.Row == 2) && (e.Col == 1))
{
TextBox tb = new TextBox();
tb.BackColor = Color.Yellow;
flex.Editor = tb;
}
}
入力マスクを設定する
グリッド全体ではEditMask プロパティを、行や列単位では EditMask プロパティを、スタイルごとの場合は EditMask プロパ
ティを使用します。
注意:
設計時は、[定型入力]ダイアログボックスを使用して入力マスクの設定を行えます。
入力マスクの詳細は「マスク」を参照してください。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
416
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Handles MyBase.Load
' 電話番号を入力するためのマスクを1列目に設定します
flex.Cols(1).EditMask = "(999) 999-9999"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 電話番号を入力するためのマスクを設定します
flex.Cols[1].EditMask = "(999) 999-9999;
}
パスワード入力を行う
パスワードの入力に使用するセルにプレースホルダ文字(*)を表示するには、SetupEditor イベントを使用します。
【実行例】
ユーザーがパスワード列に入力すると、テキストは自動的にアスタリスク(*)に変換されます。入力中もアスタリスク(*)で表示
されます。
1. グリッドにパスワード用の列を作成し、描画モードを設定します。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
flex.Cols(0).Width = flex.Rows(0).HeightDisplay
flex.ShowCursor = True
flex.Cols(1).Caption = "パスワード"
flex.Cols(1).Name = "パスワード"
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
End Sub
417
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.Cols[0].Width = flex.Rows[0].HeightDisplay;
flex.ShowCursor = true;
flex.Cols[1].Caption = flex.Cols[1].Name = "パスワード";
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
}
2. 次のコードを SetupEditor イベントに追加します。このコードは、ユーザーが入力中のテキストを自動的にアスタリスク
(*)に変換します。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_SetupEditor(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.SetupEditor
Dim tb As TextBox = flex.Editor
If Not (tb Is Nothing) Then
If flex.Cols(e.Col).Name = "パスワード" Then
tb.PasswordChar = "*"c
Else
tb.PasswordChar = CChar(ChrW(0))
End If
End If
End Sub
C# コードの書き方
C#
private void flex_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs
e)
{
TextBox tb = flex.Editor as TextBox;
if (tb != null)
{
if (flex.Cols[e.Col].Name == "パスワード")
tb.PasswordChar = '*';
else
tb.PasswordChar = (char)0;
}
}
3. 次のコードを OwnerDrawCell イベントに追加します。このコードにより入力後のテキストを自動的にアスタリスク(*)に
変換し、非表示にします。
Visual Basic コードの書き方
Visual Basic
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
418
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
If e.Row >= flex.Rows.Fixed And flex.Cols(e.Col).Name = "パスワード" Then
e.Text = New String("*"c, e.Text.Length)
End If
End Sub
C# コードの書き方
C#
private void flex_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
if (e.Row >= flex.Rows.Fixed && flex.Cols[e.Col].Name == "パスワード")
{
e.Text = new string('*', e.Text.Length);
}
}
大文字に変換して入力する
列に入力されたテキストを自動的に小文字から大文字にするには、SetupEditorイベントにて編集エディタを TextBox に変
換し、CharacterCasing プロパティを使用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub flex_SetupEditor(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.SetupEditor
' UCASECOL列では、大文字に変換して入力します
If flex.Cols(e.Col).Name = "UCASECOL" Then
Dim tb As TextBox = flex.Editor
tb.CharacterCasing = CharacterCasing.Upper
End If
End Sub
419
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
private void flex_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
// UCASECOL列では、大文字に変換して入力します
if (flex.Cols[e.Col].Name == "UCASECOL")
{
TextBox tb = flex.Editor as TextBox;
tb.CharacterCasing = CharacterCasing.Upper;
}
}
注意:
注意:TextBox コントロールや CharacterCasing プロパティの詳細は、MSDN を参照してください。
セルボタン
セルボタン/コンボボックス
コンボボックス
セルボタンやコンボボックスに関するタスクを紹介します。
関連項目
リストボックスとコンボボックス | セルボタン
セルボタンを表示する
グリッドの ComboList、行・列の ComboList、スタイルの ComboList プロパティの何れかに省略符号("...")を設定します。
注意:
セルボタンのセルで入力を許可する場合は、省略符号("...")前にパイプ文字を追加します。
セルボタンは、設計時に 列エディタ や Column タスク から設定することもできます。「リストボックスとコンボボッ
クス」の項目も参照してください。
【実行例】
420
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
flex.Cols(2).Caption = "セルボタン編集不可"
flex.Cols(3).Caption = "セルボタン編集可"
' 編集不可のセルボタン
flex.Cols(2).ComboList = "..."
' 編集可能なセルボタン
flex.Cols(3).ComboList = "
' 常にセルボタンを表示
flex.ShowButtons = C1.Win.C1FlexGrid.ShowThemedHeadersEnum.NoneAlways
C# コードの書き方
C#
flex.Cols[2].Caption = "セルボタン編集不可";
flex.Cols[3].Caption = "セルボタン編集可";
// 編集不可のセルボタン
flex.Cols[2].ComboList = "...";
// 編集可能なセルボタン
flex.Cols[3].ComboList = "
// 常にセルボタンを表示
flex.ShowButtons = C1.Win.C1FlexGrid.ShowThemedHeadersEnum.NoneAlways;
セルボタンの画像を変更する
CellButtonImage プロパティに任意の画像を設定します。
【実行例】
421
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
flex.Cols(2).Caption = "セルボタン"
' セルボタンを表示
flex.Cols(2).ComboList = "..."
' セルボタンの画像を変更
flex.CellButtonImage = Image.FromFile("Mycellbutton.ico")
' 常にセルボタンを表示
flex.ShowButtons = C1.Win.C1FlexGrid.ShowThemedHeadersEnum.Always
C# コードの書き方
C#
flex.Cols[2].Caption = "セルボタン";
// セルボタンを表示
flex.Cols[2].ComboList = "...";
// セルボタンの画像を変更
flex.CellButtonImage = Image.FromFile("Mycellbutton.ico");
// 常にセルボタンを表示
flex.ShowButtons = C1.Win.C1FlexGrid.ShowButtonsEnum.Always;
注意:
注意:行や列、セルごとに表示するセルボタンのイメージを変更する場合は、BeforeEdit イベントを使用します。(参照:
行や列、セルごとにセルボタンのイメージを変更する)
コンボボックスを表示する
グリッドの ComboList、行・列の ComboList、スタイルの ComboList プロパティの何れかにパイプ文字で区切った文字列を
設定します。
注意:
リスト以外の入力を許可する(ドロップダウンコンボ)場合は、文字列の先頭にパイプ文字を追加します。
422
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
コンボボックスは、設計時に 列エディタ や Column タスク から設定することもできます。「リストボックスとコンボ
ボックス」の項目も参照してください。
【実行例】
Visual Basic コードの書き方
Visual Basic
' リストから選択のみのコンボボックス
flex.Cols(2).Caption = "ドロップダウンリスト"
flex.Cols(2).ComboList = "Red|Blue
' リスト以外の入力を許可するコンボボックス
flex.Cols(3).Caption = "ドロップダウンコンボ"
flex.Cols(3).ComboList = "|Red|Blue
C# コードの書き方
C#
// リストから選択のみのコンボボックス
flex.Cols[2].Caption = "ドロップダウンリスト";
flex.Cols[2].ComboList = "Red|Blue
// リスト以外の入力を許可するコンボボックス
flex.Cols[3].Caption = "ドロップダウンコンボ";
flex.Cols[3].ComboList = "|Red|Blue
コンボボックスの背景色を変更する
グリッドが編集モードに入る前に発生するStartEdit イベントにおいて、組み込み CellStyle.Editor プロパティの背景色を設定
します。
【実行例】
423
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1列目にコンボボックスを表示
flex.Cols(1).ComboList = "リスト1|リスト2
End Sub
Private Sub flex_StartEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.StartEdit
If e.Col = 1 Then
flex.Styles.Editor.BackColor = Color.AliceBlue
Else
flex.Styles.Editor.Clear(C1.Win.C1FlexGrid.StyleElementFlags.BackColor)
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 1列目にコンボボックスを表示
flex.Cols[1].ComboList = "リスト1|リスト2
}
private void flex_StartEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
if(e.Col == 1)
{
flex.Styles.Editor.BackColor = Color.AliceBlue;
}
else
424
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
{
flex.Styles.Editor.Clear(C1.Win.C1FlexGrid.StyleElementFlags.BackColor);
}
}
リストにアイコンを表示させる
イメージマップの機能を使用します。行や列の ImageMap または、スタイルの ImageMap プロパティを使用することでリスト
にアイコンを表示できます。イメージマップは、特定のセル値に画像を関連付けます。セルの内容が変更されると、画像も自動
的に更新されます。
【実行例】
Visual Basic コードの書き方
Visual Basic
' イメージマップを設定
Dim imgMap As New Hashtable
imgMap.Add("サッカー", Image.FromFile("soccer.gif"))
imgMap.Add("野球", Image.FromFile("baseball.gif"))
imgMap.Add("バスケット", Image.FromFile("basketball.gif"))
imgMap.Add("ギター", Image.FromFile("guitar.gif"))
imgMap.Add("マイク", Image.FromFile("mike.gif"))
flex.Cols(1).ComboList = "|サッカー|野球|バスケット|ギター
flex.Cols(1).ImageMap = imgMap
flex.Cols(1).ImageAndText = True
flex.Cols(1).ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.LeftCenter
flex.Cols(1).ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.LeftCenter
C# コードの書き方
C#
425
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// イメージマップを設定
Hashtable imgMap = new Hashtable();
imgMap.Add("サッカー", Image.FromFile("soccer.gif"));
imgMap.Add("野球", Image.FromFile("baseball.gif"));
imgMap.Add("バスケット", Image.FromFile("basketball.gif"));
imgMap.Add("ギター", Image.FromFile("guitar.gif"));
imgMap.Add("マイク", Image.FromFile("mike.gif"));
flex.Cols[1].ComboList = "サッカー|野球|バスケット|ギター
flex.Cols[1].ImageMap = imgMap;
flex.Cols[1].ImageAndText = true;
flex.Cols[1].ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.LeftCenter;
flex.Cols[1].TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.LeftCenter;
注意:
注意:ImageAndText プロパティを使用して、セルにテキストと画像を表示するか、画像のみを表示するかを指定でき
ます。
表示値/実値のように2種類のデータを持たせる
データマップの機能を使用します。行や列のDataMap または、スタイルの DataMap プロパティを使用することでグリッド上
に表示する値と、実際に設定される値を別々に持たせることができます。
また、GetDataDisplay/GetData メソッドを使用することで表示値と実値を取得できます。
【実行例】
426
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim dtMap As Hashtable = New Hashtable()
dtMap.Add("001", "東京")
dtMap.Add("002", "仙台")
dtMap.Add("003", "大坂")
flex.Cols(1).DataMap = dtMap
flex.Cols(1).Caption = "データマップ"
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
MessageBox.Show("実値:" & flex.GetData(flex.Row, flex.Col) & vbCrLf & _
"表示値:" & flex.GetDataDisplay(flex.Row, flex.Col))
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
System.Collections.Hashtable dtMap;
dtMap = new System.Collections.Hashtable();
dtMap.Add("001", "東京");
dtMap.Add("002", "仙台");
dtMap.Add("003", "大坂");
flex.Cols[1].DataMap = dtMap;
flex.Cols[1].Caption = "データマップ";
}
private void button1_Click(object sender, EventArgs e)
{
427
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
MessageBox.Show("実値:" + flex.GetData(flex.Row, flex.Col) + "\n" +
"表示値:" + flex.GetDataDisplay(flex.Row, flex.Col));
}
注意:
「マップリスト」も参照してください。
クリップボードの自動処理(AutoClipboard プロパティを True に設定)で対象となるのは、表示値になります。
選択されたインデックスを取得する
選択されたインデックスは、SelectedIndex プロパティで、アイテムはSelectedItem プロパティで取得します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' コンボボックスを設定
flex.Cols(2).Caption = "ドロップダウンリスト"
flex.Cols(2).ComboList = "東京|仙台
End Sub
Private Sub flex_ComboCloseUp(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.ComboCloseUp
MessageBox.Show("選択されたインデックス:" & _
flex.ComboBoxEditor.SelectedIndex & vbCrLf & _
"選択されたアイテム:" & _
flex.ComboBoxEditor.SelectedItem)
End Sub
C# コードの書き方
428
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
private void Form1_Load(object sender, EventArgs e)
{
// コンボボックスを設定
flex.Cols[2].Caption = "ドロップダウンリスト";
flex.Cols[2].ComboList = "東京|仙台
}
private void flex_ComboCloseUp(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
MessageBox.Show("選択されたインデックス:" +
flex.ComboBoxEditor.SelectedIndex + "\n" +
"選択されたアイテム:" +
flex.ComboBoxEditor.SelectedItem);
}
注意:
注意:ComboBoxEditor プロパティはコンボボックスがアクティブではない場合、null または -1 を返します。
マルチカラムコンボボックスを表示する
MultiColumnDictionary クラスを使用します。
【実行例】
429
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 文字列に基づくMultiColumnDictionaryを作成
' 表示値:0列目、実値:自動生成される int 型のキー
Dim s As String = "泉スタジアム" & vbTab & "泉区|" & _
"紫山武道館" & vbTab & "富谷|" & _
"新劇場" & vbTab & "仙台区|" & _
"GCスタジアム" & vbTab & "長町"
Dim map As C1.Win.C1FlexGrid.MultiColumnDictionary
map = New C1.Win.C1FlexGrid.MultiColumnDictionary(s, 0, True)
flex.Cols(2).DataMap = map
flex.Cols(2).Caption = "マルチカラムコンボ"
' イメージマップを設定
Dim imgMap As New Hashtable
imgMap.Add(0, Image.FromFile("soccer.gif"))
imgMap.Add(1, Image.FromFile("guitar.gif"))
imgMap.Add(2, Image.FromFile("mike.gif"))
imgMap.Add(3, Image.FromFile("baseball.gif"))
flex.Cols(2).ImageMap = imgMap
End Sub
Private Sub flex_ComboCloseUp(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.ComboCloseUp
Console.WriteLine("選択されたインデックス:" & _
flex.ComboBoxEditor.SelectedIndex & vbCrLf & _
"選択されたアイテム:" & _
flex.ComboBoxEditor.SelectedItem)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
MessageBox.Show("実値:" & flex.GetData(flex.Row, flex.Col) & vbCrLf & _
"表示値:" & flex.GetDataDisplay(flex.Row, flex.Col))
430
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 文字列に基づくMultiColumnDictionaryを作成
// 表示値:0列目、実値:自動生成される int 型のキー
String s = "泉スタジアム\t泉区
"紫山武道館\t富谷
"新劇場\t仙台区
"GCスタジアム\t長町";
C1.Win.C1FlexGrid.MultiColumnDictionary map;
map = new C1.Win.C1FlexGrid.MultiColumnDictionary(s, 0, true);
flex.Cols[2].DataMap = map;
flex.Cols[2].Caption = "マルチカラムコンボ";
// イメージマップを設定
System.Collections.Hashtable imgMap;
imgMap = new System.Collections.Hashtable();
imgMap.Add(0, Image.FromFile("soccer.gif"));
imgMap.Add(1, Image.FromFile("guitar.gif"));
imgMap.Add(2, Image.FromFile("mike.gif"));
imgMap.Add(3, Image.FromFile("baseball.gif"));
flex.Cols[2].ImageMap = imgMap;
}
private void flex_ComboCloseUp(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
Console.WriteLine("選択されたインデックス:" +
flex.ComboBoxEditor.SelectedIndex + "\n" +
"選択されたアイテム:" +
flex.ComboBoxEditor.SelectedItem);
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("実値:" + flex.GetData(flex.Row, flex.Col) + "\n" +
"表示値:" + flex.GetDataDisplay(flex.Row, flex.Col));
}
注意:
注意:製品付属の MultiColumnDropDown サンプルも参照してください。
コンボボタン
コンボボタン/セルボタンを表示するタイミングを変更する
セルボタンを表示するタイミングを変更する
コンボボタンやセルボタンを表示するタイミングは、ShowButtons プロパティで設定します。(デフォルト
はShowButtonsEnum.WithFocus)
【実行例】
常に表示(ShowButtonsEnum.Always)
431
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' コンボボックスを表示
flex.Cols(2).Caption = "コンボボックス"
flex.Cols(2).ComboList = "Red|Blue
' セルボタンを表示
flex.Cols(3).Caption = "セルボタン"
flex.Cols(3).ComboList = "..."
' コンボボタン・セルボタンを表示するタイミングを変更
flex.ShowButtons = C1.Win.C1FlexGrid.ShowButtonsEnum.Always
C# コードの書き方
C#
// コンボボックスを表示
flex.Cols[2].Caption = "コンボボックス";
flex.Cols[2].ComboList = "Red|Blue
// セルボタンを表示
flex.Cols[3].Caption = "セルボタン";
flex.Cols[3].ComboList = "...";
// コンボボタン・セルボタンを表示するタイミングを変更
flex.ShowButtons = C1.Win.C1FlexGrid.ShowButtonsEnum.Always;
注意:
注意:行や列単位で表示するタイミングを変更する機能は用意されていません。ShowButtons プロパティの設定は、グ
リッド全体に影響します。
コンボボックスの幅を設定する
編集用のエディタ(コンボボックス)が表示される前に発生するSetupEditor イベントにおいて、組み込みエディタを
ComboBox 型の変数に設定した上で、DropDownWidth プロパティにて指定します。
432
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1列目にコンボボックスを表示
flex.Cols(1).ComboList = "リスト1|リスト2
End Sub
Private Sub flex_SetupEditor(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.SetupEditor
If e.Col = 1 Then
Dim cb As ComboBox = CType(flex.Editor, ComboBox)
' コンボボックスの幅を250pxにします
cb.DropDownWidth = 250
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 1列目にコンボボックスを表示
flex.Cols[1].ComboList = "リスト1|リスト2
}
private void flex_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
if(e.Col == 1)
{
// コンボボックスの幅を250pxにします
ComboBox cb = (ComboBox)flex.Editor;
433
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
cb.DropDownWidth = 250;
}
}
注意:
注意:ComboBox.DropDownWidth プロパティ(System.Windows.Forms)の詳細は、MSDN を参照してください。
表示するリストの数を変更する
SetupEditor イベント内で編集用エディタを取得、ComboBox クラスのオブジェクトに設定した上で、(ComboBox クラス
の)MaxDropDownItems プロパティを使用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex.Cols(1).ComboList = "|item1|item2|item3|item4|item5|item6|item7|item8|item9
End Sub
Private Sub flex_SetupEditor(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.SetupEditor
If e.Col = 1 Then
CType(flex.Editor, ComboBox).MaxDropDownItems = 4
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.Cols[1].ComboList = "|item1|item2|item3|item4|item5|item6|item7|item8|item9
434
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
private void flex_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
if(e.Col == 1)
{
((ComboBox)flex.Editor).MaxDropDownItems = 4;
}
}
注意:
注意:ComboBox クラスの MaxDropDownItems プロパティなどの詳細は、MSDN を参照してください。
表示するリストの順番を設定する
ComboList プロパティを使用した場合は文字列順にリストが表示されます。また、DataMap プロパティを使用する場合
は、Hashtable クラスではなく、SortedList/
/ListDictionary クラスを使用することで、コンボリスト内のデータ並び順を設定
することが可能です。
注意:
注意:Hashtable、SortedList、ListDictionary クラスの詳細は、MSDN を参照してください。
SortedList クラス
SortedList クラスを使用することで、コンボリスト内のデータをキーの昇順でソートできます。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' SortedListにデータを追加
' キーで項目をソート
435
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Dim sl As SortedList = New SortedList
sl.Add(3, "three")
sl.Add(5, "five")
sl.Add(2, "two")
sl.Add(1, "one")
sl.Add(4, "four")
' 列のデータ型を設定
flex.Cols(1).DataType = GetType(Integer)
' データマップを使用
flex.Cols(1).DataMap = sl
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// SortedListにデータを追加
// キーで項目をソート
System.Collections.SortedList sl = new System.Collections.SortedList();
sl.Add(3, "three");
sl.Add(5, "five");
sl.Add(2, "two");
sl.Add(1, "one");
sl.Add(4, "four");
// 列のデータ型を設定
flex.Cols[1].DataType = typeof(int);
// データマップを使用
flex.Cols[1].DataMap = sl;
}
ListDictionary クラス
ListDictionary クラスを使用することで、コンボボックス内の並び順序をデータを追加した順番にすることができます。詳細につ
いては、製品ヘルプの下記項目をご参照ください。
【実行例】
436
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' ListDictionaryにデータを追加
' リストに追加された順序を維持
Dim ld As New Specialized.ListDictionary()
ld.Add(3, "three")
ld.Add(5, "five")
ld.Add(2, "two")
ld.Add(1, "one")
ld.Add(4, "four")
' 列のデータ型を設定
flex.Cols(1).DataType = GetType(Integer)
' データマップを使用
flex.Cols(1).DataMap = ld
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// ListDictionaryにデータを追加
// リストに追加された順序を維持
System.Collections.Specialized.ListDictionary ld;
ld = new System.Collections.Specialized.ListDictionary();
ld.Add(3, "three");
ld.Add(5, "five");
ld.Add(2, "two");
ld.Add(1, "one");
ld.Add(4, "four");
// 列のデータ型を設定
437
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Cols[1].DataType = typeof(int);
// データマップを使用
flex.Cols[1].DataMap = ld;
}
関連項目
マップリスト
リストの内容を行ごとに変更する
SetupEditor イベントを使用して動的にComboList プロパティの値を変更します。
【実行例】
奇数行と偶数行でリストを変更
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1列目にコンボボックスを表示
flex.Cols(1).Caption = "コンボボックス"
flex.Cols(1).ComboList = "奇数行1|奇数行2
End Sub
Private Sub flex_StartEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.StartEdit
If e.Col = 1 Then
If e.Row Mod 2 = 0 Then
' 偶数行の設定
flex.Cols(1).ComboList = "偶数行1|偶数行2
438
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Else
' 奇数行の設定
flex.Cols(1).ComboList = "奇数行1|奇数行2
End If
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 1列目にコンボボックスを表示
flex.Cols[1].Caption = "コンボボックス";
flex.Cols[1].ComboList = "奇数行1|奇数行2
}
private void flex_StartEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
if(e.Col == 1)
{
if(e.Row % 2 == 0)
{
// 偶数行の設定
flex.Cols[1].ComboList = "偶数行1|偶数行2
}
else
{
// 奇数行の設定
flex.Cols[1].ComboList = "奇数行1|奇数行2
}
}
}
注意:
注意:表示したいリストごとにカスタムスタイルを作成し、ComboList プロパティを設定、任意のセルに割り当てる方法
でも可能です。カスタムスタイルを使用した方法については、「セルごとにコンボボックスを設定する」を参照してくださ
い。
データマップの内容を行ごとに変更する
列内でデータマップの内容を変更する場合は、カスタムスタイルを作成してCellStyle クラスの DataMap プロパティを使用す
る必要があります。通常のコンボボックスのように行・列のDataMap プロパティを変更してしまうと、表示値-実値のマッピング
ができなくなってしまうためです。
【実行例】
奇数行と偶数行でデータマップを変更
439
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' カスタムスタイルを作成し、DataMap1を設定
Dim dtMap1 As Specialized.ListDictionary
dtMap1 = New Specialized.ListDictionary
dtMap1.Add("001", "青森")
dtMap1.Add("002", "秋田")
dtMap1.Add("003", "宮城")
flex.Styles.Add("DataMap1")
flex.Styles("DataMap1").DataMap = dtMap1
' 別のカスタムスタイルを作成し、DataMap2を設定
Dim dtMap2 As Specialized.ListDictionary
dtMap2 = New Specialized.ListDictionary
dtMap2.Add("004", "東京")
dtMap2.Add("005", "神奈川")
dtMap2.Add("006", "千葉")
flex.Styles.Add("DataMap2")
flex.Styles("DataMap2").DataMap = dtMap2
' 2列目のスタイルにDataMap1を設定
flex.Cols(1).Style = flex.Styles("DataMap1")
' 奇数行にはDataMap2を設定
For i As Integer = flex.Rows.Fixed To flex.Rows.Count - 1
If i Mod 2 = 1 Then
flex.SetCellStyle(i, 1, flex.Styles("DataMap2"))
End If
Next
flex.Cols(1).Caption = "データマップ"
End Sub
C# コードの書き方
440
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
private void Form1_Load(object sender, EventArgs e)
{
// カスタムスタイルを作成し、DataMap1を設定
System.Collections.Specialized.ListDictionary dtMap1;
dtMap1 = new System.Collections.Specialized.ListDictionary();
dtMap1.Add("001", "青森");
dtMap1.Add("002", "秋田");
dtMap1.Add("003", "宮城");
flex.Styles.Add("DataMap1");
flex.Styles["DataMap1"].DataMap = dtMap1;
// 別のカスタムスタイルを作成し、DataMap2を設定
System.Collections.Specialized.ListDictionary dtMap2;
dtMap2 = new System.Collections.Specialized.ListDictionary();
dtMap2.Add("004", "東京");
dtMap2.Add("005", "神奈川");
dtMap2.Add("006", "千葉");
flex.Styles.Add("DataMap2");
flex.Styles["DataMap2"].DataMap = dtMap2;
// 2列目のスタイルにDataMap1を設定
flex.Cols[1].Style = flex.Styles["DataMap1"];
// 奇数行にはDataMap2を設定
for (int i = flex.Rows.Fixed; i < flex.Rows.Count; i++)
{
if (i % 2 == 1)
{
flex.SetCellStyle(i, 1, "DataMap2");
}
}
flex.Cols[1].Caption = "データマップ";
}
セルごとにコンボボックスを設定する
カスタムスタイルを使用します。カスタムスタイルのComboList プロパティを設定し、作成したスタイルを任意の行や列、セル
(範囲)に割りあってることで、任意のセルにコンボボックスを表示することができます。
【実行例】
441
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' カスタムスタイル"Combo1"を作成、
' ComboListプロパティを設定
flex.Styles.Add("Combo1")
flex.Styles("Combo1").ComboList = "東京|神奈川
flex.Styles("Combo1").BackColor = Color.AliceBlue
flex.Styles("Combo1").ForeColor = Color.Blue
' カスタムスタイル"Combo2"を作成、
' ComboListプロパティを設定
flex.Styles.Add("Combo2")
flex.Styles("Combo2").ComboList = "京都|大阪
flex.Styles("Combo2").BackColor = Color.YellowGreen
flex.Styles("Combo2").ForeColor = Color.Yellow
' カスタムスタイル"Combo3"を作成、
' ComboListプロパティを設定
flex.Styles.Add("Combo3")
flex.Styles("Combo3").ComboList = "青森|秋田
flex.Styles("Combo3").BackColor = Color.Beige
' 2行目全体にカスタムスタイル"Combo1"を設定
flex.Rows(2).Style = flex.Styles("Combo1")
' 4列目全体にカスタムスタイル"Combo2"を設定
flex.Cols(4).Style = flex.Styles("Combo2")
' 9行1列-10行2列目のセル範囲にカスタムスタイル"Combo3"を設定
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(9, 1, 10, 2)
cr.Style = flex.Styles("Combo3")
' 4行1列目のセルにカスタムスタイル"Combo3"を設定
flex.SetCellStyle(4, 1, flex.Styles("Combo3"))
End Sub
442
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// カスタムスタイル"Combo1"を作成、
// ComboListプロパティを設定
flex.Styles.Add("Combo1");
flex.Styles["Combo1"].ComboList = "東京|神奈川
flex.Styles["Combo1"].BackColor = Color.AliceBlue;
flex.Styles["Combo1"].ForeColor = Color.Blue;
// カスタムスタイル"Combo2"を作成、
// ComboListプロパティを設定
flex.Styles.Add("Combo2");
flex.Styles["Combo2"].ComboList = "京都|大阪
flex.Styles["Combo2"].BackColor = Color.YellowGreen;
flex.Styles["Combo2"].ForeColor = Color.Yellow;
// カスタムスタイル"Combo3"を作成、
// ComboListプロパティを設定
flex.Styles.Add("Combo3");
flex.Styles["Combo3"].ComboList = "青森|秋田
flex.Styles["Combo3"].BackColor = Color.Beige;
// 2行目全体にカスタムスタイル"Combo1"を設定
flex.Rows[2].Style = flex.Styles["Combo1"];
// 4列目全体にカスタムスタイル"Combo2"を設定
flex.Cols[4].Style = flex.Styles["Combo2"];
// 9行1列-10行2列目のセル範囲にカスタムスタイル"Combo3"を設定
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(9, 1, 10, 2);
cr.Style = flex.Styles["Combo3"];
// 4行1列目のセルにカスタムスタイル"Combo3"を設定
flex.SetCellStyle(4, 1, flex.Styles["Combo3"]);
}
注意:
カスタムスタイルを使用すれば、コンボボックス以外にもデータマップや背景色など、さまざまな要素をセル単位
で設定することができます。
行・列のスタイルを両方とも設定したセルでは、列に適用したスタイルが優先されます。
チェックボックス
チェックボックスに関するタスクを紹介します。
関連項目
チェックボックス(セルの編集)
チェックボックスを表示する
443
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
セルに適用されているスタイルのデータ型(DataType)や、行や列のデータ型(DataType)がブール型であれば、自動的に
チェックボックスが表示されます。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1列目のデータ型をブール型に設定
flex.Cols(1).DataType = GetType(Boolean)
flex.Cols(1).Caption = "チェックボックス"
' カスタムスタイル"CheckBox1"を作成、
' データ型をブール型に設定
flex.Styles.Add("CheckBox1")
flex.Styles("CheckBox1").DataType = GetType(Boolean)
flex.Styles("CheckBox1").BackColor = Color.AliceBlue
flex.Styles("CheckBox1").ImageAlign =
C1.Win.C1FlexGrid.ImageAlignEnum.CenterCenter
' 4行3列-5行4列目のセル範囲にカスタムスタイル"CheckBox1"を適用
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(4, 3, 5, 4)
cr.Style = flex.Styles("CheckBox1")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 1列目のデータ型をブール型に設定
flex.Cols[1].DataType = typeof(bool);
444
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Cols[1].Caption = "チェックボックス";
// カスタムスタイル"CheckBox1"を作成、
// データ型をブール型に設定
flex.Styles.Add("CheckBox1");
flex.Styles["CheckBox1"].DataType = typeof(bool);
flex.Styles["CheckBox1"].BackColor = Color.AliceBlue;
flex.Styles["CheckBox1"].ImageAlign =
C1.Win.C1FlexGrid.ImageAlignEnum.CenterCenter;
// 4行3列-5行4列目のセル範囲にカスタムスタイル"CheckBox1"を適用
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(4, 3, 5, 4);
cr.Style = flex.Styles["CheckBox1"];
}
注意:
注意:連結(バウンド)モードのグリッドにおける列のデータ型は、FlexGridと接続しているデータソースに依存します。
チェックボックスを表示する(
チェックボックスを表示する(SetCellCheck))
SetCellCheck メソッドを使用してセルにチェックボックスを表示します。この場合、セルのデータ型をブール型にする必要はあ
りません。チェックボックスとテキストの両方を表示することもできます。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 3行2列目のセルにチェックボックス(Checked)を設定
flex.SetCellCheck(3, 2, C1.Win.C1FlexGrid.CheckEnum.Checked)
' 3行2列目のセルにデータを設定
flex(3, 2) = "チェック"
' 3行3列目のセルにチェックボックス(Unchecked)を設定
445
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.SetCellCheck(3, 3, C1.Win.C1FlexGrid.CheckEnum.Unchecked)
' 3行3列目のセルにデータを設定
flex(3, 3) = "未チェック"
' 4行2列目のセルにチェックボックス(TSChecked)を設定
flex.SetCellCheck(4, 2, C1.Win.C1FlexGrid.CheckEnum.TSChecked)
' 4行2列目のセルにデータを設定
flex(4, 2) = "チェック"
' 4行3列目のセルにチェックボックス(TSUnchecked)を設定
flex.SetCellCheck(4, 3, C1.Win.C1FlexGrid.CheckEnum.TSUnchecked)
' 4行3列目のセルにデータを設定
flex(4, 3) = "未チェック"
' 4行4列目のセルにチェックボックス(TSGrayed)を設定
flex.SetCellCheck(4, 4, C1.Win.C1FlexGrid.CheckEnum.TSGrayed)
' 4行4列目のセルにデータを設定
flex(4, 4) = "グレー"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 3行2列目のセルにチェックボックス(Checked)を設定
flex.SetCellCheck(3, 2, C1.Win.C1FlexGrid.CheckEnum.Checked);
// 3行2列目のセルにデータを設定
flex[3, 2] = "チェック";
// 3行3列目のセルにチェックボックス(Unchecked)を設定
flex.SetCellCheck(3, 3, C1.Win.C1FlexGrid.CheckEnum.Unchecked);
// 3行3列目のセルにデータを設定
flex[3, 3] = "未チェック";
// 4行2列目のセルにチェックボックス(TSChecked)を設定
flex.SetCellCheck(4, 2, C1.Win.C1FlexGrid.CheckEnum.TSChecked);
// 4行2列目のセルにデータを設定
flex[4, 2] = "チェック";
// 4行3列目のセルにチェックボックス(TSUnchecked)を設定
flex.SetCellCheck(4, 3, C1.Win.C1FlexGrid.CheckEnum.TSUnchecked);
// 4行3列目のセルにデータを設定
flex[4, 3] = "未チェック";
// 4行4列目のセルにチェックボックス(TSGrayed)を設定
flex.SetCellCheck(4, 4, C1.Win.C1FlexGrid.CheckEnum.TSGrayed);
// 4行4列目のセルにデータを設定
flex[4, 4] = "グレー";
}
チェックボックスのイメージを変更する
Glyphs プロパティでGlyphEnum.Checked/GlyphEnum.Unchecked を指定して変更します。
【実行例】
446
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1列目のデータ型をブール型にしてチェックボックスを表示
flex.Cols(1).DataType = GetType(Boolean)
flex.Cols(1).Caption = "チェックボックス"
' 3行3列目のセルにチェックボックス(Checked)を設定
flex.SetCellCheck(3, 3, C1.Win.C1FlexGrid.CheckEnum.Checked)
flex(3, 3) = "オン"
' 3行4列目のセルにチェックボックス(Unchecked)を設定
flex.SetCellCheck(3, 4, C1.Win.C1FlexGrid.CheckEnum.Unchecked)
flex(3, 4) = "オフ"
' オンのチェックボックスイメージを変更
flex.Glyphs(C1.Win.C1FlexGrid.GlyphEnum.Checked) = New Bitmap("ok.gif")
' オフのチェックボックスイメージを変更
flex.Glyphs(C1.Win.C1FlexGrid.GlyphEnum.Unchecked) = New Bitmap("cancel.gif")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 1列目のデータ型をブール型にしてチェックボックスを表示
flex.Cols[1].DataType = typeof(bool);
flex.Cols[1].Caption = "チェックボックス";
// 3行3列目のセルにチェックボックス(Checked)を設定
flex.SetCellCheck(3, 3, C1.Win.C1FlexGrid.CheckEnum.Checked);
flex[3, 3] = "オン";
// 3行4列目のセルにチェックボックス(Unchecked)を設定
flex.SetCellCheck(3, 4, C1.Win.C1FlexGrid.CheckEnum.Unchecked);
447
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex[3, 4] = "オフ";
// オンのチェックボックスイメージを変更
flex.Glyphs[C1.Win.C1FlexGrid.GlyphEnum.Checked] = new Bitmap("ok.gif");
// オフのチェックボックスイメージを変更
flex.Glyphs[C1.Win.C1FlexGrid.GlyphEnum.Unchecked] = new Bitmap("cancel.gif");
}
チェックボックスのセルにテキストを表示する
SetCellCheck メソッドを使用するか、オーナー描画の機能を使用します。オーナー描画を使用すると、チェックボックスの値に
応じてテキストを表示することもできます。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1列目のデータ型をブール型にしてチェックボックスを表示
flex.Cols(1).DataType = GetType(Boolean)
flex.Cols(1).Caption = "チェックボックス"
flex.Cols(1).Style.Display = C1.Win.C1FlexGrid.DisplayEnum.Stack
flex.Cols(1).Style.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.LeftCenter
flex.Cols(1).Style.ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.LeftCenter
' オーナー描画
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
End Sub
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
If e.Row >= flex.Rows.Fixed And e.Col = 1 Then
' True/Falseで異なるデータを表示
448
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
If flex(e.Row, e.Col) Is Nothing Or flex(e.Row, e.Col) = "False" Then
e.Text = "OFF"
Else
e.Text = "ON"
End If
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 1列目のデータ型をブール型にしてチェックボックスを表示
flex.Cols[1].DataType = typeof(bool);
flex.Cols[1].Caption = "チェックボックス";
flex.Cols[1].Style.Display = C1.Win.C1FlexGrid.DisplayEnum.Stack;
flex.Cols[1].Style.TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.LeftCenter;
flex.Cols[1].Style.ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.LeftCenter;
// オーナー描画
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
}
private void flex_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
if ((e.Row >= flex.Rows.Fixed) && (e.Col == 1))
{
// True/Falseで異なるデータを表示
if ((flex[e.Row, e.Col] == null) |
{
e.Text = "OFF";
}
else
{
e.Text = "ON";
}
}
注意:
注意:SetCellCheck メソッドを使用する方法については、「チェックボックスを表示する(SetCellCheck)」を参照してくだ
さい。
日付型セル
日付型に設定されたセルにおけるタスクを紹介します。
カレンダーコントロールを使用して日付の入力を行う
セルに適用されているスタイルのデータ型(DataType)や、行や列のデータ型(DataType)が日付型であれば、自動的にカレ
ンダー(DateTimePicker)コントロールによる入力ができます。
449
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1列目のデータ型を日付型に設定
flex.Cols(1).DataType = GetType(Date)
flex.Cols(1).Caption = "日付"
' カスタムスタイル"DatePicker1"を作成、
' データ型を日付型に設定
flex.Styles.Add("DatePicker1")
flex.Styles("DatePicker1").DataType = GetType(Date)
flex.Styles("DatePicker1").BackColor = Color.AliceBlue
' 4行3列-5行4列目のセル範囲にカスタムスタイル"DatePicker1"を適用
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(4, 3, 5, 4)
cr.Style = flex.Styles("DatePicker1")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 1列目のデータ型を日付型に設定
flex.Cols[1].DataType = typeof(DateTime);
flex.Cols[1].Caption = "日付";
// カスタムスタイル"DatePicker1"を作成、
// データ型を日付型に設定
flex.Styles.Add("DatePicker1");
flex.Styles["DatePicker1"].DataType = typeof(DateTime);
450
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Styles["DatePicker1"].BackColor = Color.AliceBlue;
// 4行3列-5行4列目のセル範囲にカスタムスタイル"DatePicker1"を適用
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(4, 3, 5, 4);
cr.Style = flex.Styles["DatePicker1"];
}
注意:
注意:連結(バウンド)モードのグリッドにおける列のデータ型は、C1FlexGrid コントロールと接続しているデータソースに
依存します。
カレンダーコントロールを表示しない
「カレンダーコントロールを使用して日付の入力を行う」にもありますが、セルのデータ型が日付型に設定されていれば、セル
編集時、自動的にカレンダーコントロールが表示されます。カレンダーコントロールを表示しないようにするには、「スピンボタン
を使用して日付の入力を行う」方法に加えて、EditMask プロパティにてセルにマスクを設定する方法があります。日付として
正しい入力かどうかは、ValidateEdit イベントを使用してチェック可能です。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 列のデータ型を Date 型に設定
flex.Cols(1).DataType = GetType(Date)
' マスクを設定
flex.Cols(1).EditMask = "0000/00/00"
End Sub
' 入力チェック
Private Sub flex_ValidateEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.ValidateEditEventArgs) Handles flex.ValidateEdit
If e.Col = 1 Then
451
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Dim d As Date
If Date.TryParse(flex.Editor.Text, d) = False Then
e.Cancel = True
MessageBox.Show("無効な日付です")
End If
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 列のデータ型を Date 型に設定
flex.Cols[1].DataType = typeof(DateTime);
// マスクを設定
flex.Cols[1].EditMask = "0000/00/00";
}
// 入力チェック
private void flex_ValidateEdit(object sender, C1.Win.C1FlexGrid.ValidateEditEventArgs
e)
{
if (e.Col == 1)
{
DateTime d;
if (DateTime.TryParse(flex.Editor.Text, out d) == false)
{
e.Cancel = true;
MessageBox.Show("無効な日付です");
}
}
}
注意:
注意:連結(バウンド)モードのグリッドにおける列のデータ型は、C1FlexGrid コントロールと接続しているデータソースに
依存します。
関連項目
カレンダーコントロールを使用して日付の入力を行う
スピンボタンを使用して日付の入力を行う
スピンボタンを使用して日付の入力を行う
SetupEditor イベントを使用し、日付型セルで編集用エディタを DateTimePicker に変換した上で、ShowUpDown プロパ
ティを True に設定します。
【実行例】
452
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Pivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1列目のデータ型を日付型に設定
flex.Cols(1).DataType = GetType(Date)
flex.Cols(1).Caption = "日付"
End Sub
Private Sub flex_SetupEditor(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.SetupEditor
If e.Col = 1 Then
' 編集エディタをDateTimePickerに変換
Dim dt As DateTimePicker
dt = CType(flex.Editor, DateTimePicker)
' スピンボタンを表示
dt.ShowUpDown = True
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 1列目のデータ型を日付型に設定
flex.Cols[1].DataType = typeof(DateTime);
flex.Cols[1].Caption = "日付";
}
private void flex_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
if(e.Col == 1)
{
453
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// 編集エディタをDateTimePickerに変換
DateTimePicker dt;
dt = (DateTimePicker)flex.Editor;
// スピンボタンを表示
dt.ShowUpDown = true;
}
}
注意:
DateTimePicker コントロールの詳細については、MSDN を参照してください。
連結(バウンド)モードのグリッドにおける列のデータ型は、C1FlexGrid コントロールと接続しているデータソース
に依存します。
日付の書式を設定する
日付型セルの書式を設定するには、セルに適用されているスタイルのFormat や、行や列の Format を設定します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1列目のデータ型を日付型に設定
flex.Cols(1).DataType = GetType(Date)
flex.Cols(1).Caption = "日付"
' 日付の書式を設定:Long Date(長い日付)
flex.Cols(1).Format = "D"
' カスタムスタイル"Date1"を作成、
' データ型、書式を設定
flex.Styles.Add("Date1")
454
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Styles("Date1").DataType = GetType(Date)
' 日付の書式を設定:カスタムDateTime書式指定文字列
flex.Styles("Date1").Format = "yyyy年MM月dd日"
flex.Styles("Date1").BackColor = Color.AliceBlue
' 4行3列-5行4列目のセル範囲にカスタムスタイル"Date1"を適用
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.GetCellRange(4, 3, 5, 4)
cr.Style = flex.Styles("Date1")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 1列目のデータ型を日付型に設定
flex.Cols[1].DataType = typeof(DateTime);
flex.Cols[1].Caption = "日付";
// 日付の書式を設定:Long Date(長い日付)
flex.Cols[1].Format = "D";
// カスタムスタイル"Date1"を作成、
// データ型、書式を設定
flex.Styles.Add("Date1");
flex.Styles["Date1"].DataType = typeof(DateTime);
// 日付の書式を設定:カスタムDateTime書式指定文字列
flex.Styles["Date1"].Format = "yyyy年MM月dd日";
flex.Styles["Date1"].BackColor = Color.AliceBlue;
// 4行3列-5行4列目のセル範囲にカスタムスタイル"Date1"を適用
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.GetCellRange(4, 3, 5, 4);
cr.Style = flex.Styles["Date1"];
}
注意:
列の書式設定は、設計時に Column タスク メニューや 列エディタ からも設定できます。
連結(バウンド)モードのグリッドにおける列のデータ型は、C1FlexGrid コントロールと接続しているデータソース
に依存します。
和暦で表示する
C1FlexGrid コントロールの書式設定に和暦表示はありません。そのため、JapaneseCalendarクラスを使用して和暦に変換
し、オーナー描画にて表示します。
【実行例】
455
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Dim c As System.Globalization.CultureInfo
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 1、2列目のデータ型を日付型に設定
flex.Cols(1).DataType = GetType(Date)
flex.Cols(1).Caption = "日付"
flex.Cols(2).DataType = GetType(Date)
flex.Cols(2).Caption = "和暦表示"
' データの設定
flex(1, 1) = "2007/09/16"
flex(1, 2) = "2007/09/16"
flex(2, 1) = "2010/09/21"
flex(2, 2) = "2010/09/21"
flex(3, 1) = "2008/02/29"
flex(3, 2) = "2008/02/29"
flex(4, 1) = "1973/09/01"
flex(4, 2) = "1973/09/01"
flex(5, 1) = "1895/12/24"
flex(5, 2) = "1895/12/24"
flex(6, 1) = "1994/05/13"
flex(6, 2) = "1994/05/13"
' オーナー描画
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
flex.AutoSizeCol(2)
' JapanseCalendarクラスを使用
c = New System.Globalization.CultureInfo("ja-JP")
c.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar
End Sub
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
' 2列目を和暦で表示
456
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
If e.Col = 2 And e.Row > 0 Then
If e.Text = "" Or e.Text Is Nothing Then
Return
End If
' 表示データの設定(和暦表示)
e.Text = Date.Parse(e.Text).ToString("ggyy年MM月dd日(dddd)", c)
End If
End Sub
C# コードの書き方
C#
System.Globalization.CultureInfo c;
Private void Form1_Load(object sender, EventArgs e)
{
// 1、2列目のデータ型を日付型に設定
flex.Cols[1].DataType = typeof(DateTime);
flex.Cols[1].Caption = "日付";
flex.Cols[2].DataType = typeof(DateTime);
flex.Cols[2].Caption = "和暦表示";
// データの設定
flex[1, 1] = "2007/09/16";
flex[1, 2] = "2007/09/16";
flex[2, 1] = "2010/09/21";
flex[2, 2] = "2010/09/21";
flex[3, 1] = "2008/02/29";
flex[3, 2] = "2008/02/29";
flex[4, 1] = "1973/09/01";
flex[4, 2] = "1973/09/01";
flex[5, 1] = "1895/12/24";
flex[5, 2] = "1895/12/24";
flex[6, 1] = "1994/05/13";
flex[6, 2] = "1994/05/13";
// オーナー描画
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
flex.AutoSizeCol(2);
// JapanseCalendarクラスを使用
c = new System.Globalization.CultureInfo("ja-JP");
c.DateTimeFormat.Calendar = new System.Globalization.JapaneseCalendar();
}
private void flex_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
// 2列目を和暦で表示
if ((e.Col == 2) && (e.Row > 0))
{
if((e.Text == "") |
{
return;
}
// 表示データの設定(和暦表示)
e.Text = DateTime.Parse(e.Text).ToString("ggyy年MM月dd日(dddd)", c);
457
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
}
注意:
JapaneseCalendar クラスの詳細は、MSDN を参照してください。
連結(バウンド)モードのグリッドにおける列のデータ型は、C1FlexGrid コントロールと接続しているデータソース
に依存します。
時刻のみを表示する
日付型のセルで時刻のみを表示するには、セルに適用されているスタイルのFormat や、行や列の Format をShort
Time(短い時刻)やLong Time(長い時刻)に設定し、スピンボタンにより編集します。
【実行例】
Visual Basic コードの書き方
Visual Basic
' Short Time(短い時刻)
flex.Cols(1).DataType = GetType(Date)
flex.Cols(1).Format = "t"
C# コードの書き方
C#
// Short Time(短い時刻)
flex.Cols[1].DataType = typeof(DateTime);
flex.Cols[1].Format = "t";
注意:
列の書式設定は、設計時に Column タスク メニューや 列エディタ からも設定できます。
458
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
連結(バウンド)モードのグリッドにおける列のデータ型は、C1FlexGrid コントロールと接続しているデータソース
に依存します。
入力可能な日付を設定する
SetupEditor イベントを使用して、日付型セルの編集用エディタを DateTimePicker に変換した上で、DateTimePicker クラス
の MinDate/MaxDate プロパティを設定します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 列のデータ型を Date 型に設定
flex.Cols(1).DataType = GetType(Date)
End Sub
Private Sub flex_SetupEditor(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.SetupEditor
If e.Col = 1 Then
Dim dt As DateTimePicker = CType(flex.Editor, DateTimePicker)
dt.MinDate = "2009/02/08"
dt.MaxDate = "2009/02/21"
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 列のデータ型を Date 型に設定
459
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Cols[1].DataType = typeof(DateTime);
}
private void flex_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
if (e.Col == 1)
{
DateTimePicker dt;
dt = (DateTimePicker)flex.Editor;
dt.MinDate = DateTime.Parse("2009/02/08");
dt.MaxDate = DateTime.Parse("2009/02/21");
}
}
注意:
DateTimePicker コントロールの詳細は、MSDN を参照してください。
連結(バウンド)モードのグリッドにおける列のデータ型は、C1FlexGrid コントロールと接続しているデータソース
に依存します。
数値型セル
数値型に設定されたセルにおけるタスクを紹介します。
数値エディタを使用する
EditOptions プロパティにUseNumericEditor フラグを追加します。
組み込みの数値エディタには、下記の特長があります。
数値エディタはスタイルや列に割り当てられた Format プロパティを使用して入力中の書式設定を行います。そのた
め、入力中に3桁区切りでカンマを表示するといった動作が可能です。
数値エディタはキーチェックを行うため、数値型のセルで文字列が入力されることを防ぎます。
数値エディタはデータ型に応じた範囲チェックを提供します。Intege r 型のセルでは、Integer 型の最小値から最大値
までの入力のみを提供します。
EditFlags 列挙体に UseNumericEditor フラグを含めないことで、組み込み数値エディタを無効にできます。
デザイナの場合
プロパティページで EditOptions プロパティを選択し、All をチェックするか、UseNumericEditor をチェックします。
コードの場合
Visual Basic コードの書き方
460
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.All
' UseNumericEditorとCycleOnDoubleClickのみ
' flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.UseNumericEditor Or _
' C1.Win.C1FlexGrid.EditFlags.CycleOnDoubleClick
C# コードの書き方
C#
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.All;
// UseNumericEditorとCycleOnDoubleClickのみ
// flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.UseNumericEditor |
// C1.Win.C1FlexGrid.EditFlags.CycleOnDoubleClick;
数値型セルの書式を設定する
行や列、各スタイルの Format プロパティを使用して書式を設定します。また、EditOptions プロパティにUseNumericEditor
フラグを追加して数値エディタを使用することで、編集中も書式設定が有効になります。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 組み込みの数値エディタを使用
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.All
' 1列目のデータ型を数値型に設定
flex.Cols(1).DataType = GetType(Decimal)
' 1列目の書式を設定
flex.Cols(1).Format = "C"
End Sub
461
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 組み込みの数値エディタを使用
flex.EditOptions = C1.Win.C1FlexGrid.EditFlags.All;
// 1列目のデータ型を数値型に設定
flex.Cols[1].DataType = typeof(decimal);
// 1列目の書式を設定
flex.Cols[1].Format = "C";
}
注意:
列の書式設定は、設計時に Column タスク メニューや 列エディタ からも設定できます。
行や列単位で書式を設定する方法は、「行列の書式を設定する」を参照してください。
スタイルを使用して書式を設定する方法は、「書式を設定する」を参照してください。
ツリー表示/小計行
アウトラインツリーや小計行に関するタスクを紹介します。
小計行を表示する
小計行は、Subtotal メソッドを使用して表示します。小計行の表示位置は、SubtotalPosition プロパティで上下どちらかに
設定することができます。
【実行例】
Visual Basic コードの書き方
Visual Basic
462
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Prvate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex(1, 2) = 180
flex(2, 2) = 20
flex(3, 2) = 74
' 2列目を合計した小計行を表示
' 計算:合計、レベル:-1(総計行)、境界の開始列:-1(なし)、計算対象の列:2
flex.Subtotal(C1.Win.C1FlexGrid.AggregateEnum.Sum, -1, -1, 2)
' 総計行の組み込みスタイルを変更
flex.Styles("GrandTotal").BackColor = Color.YellowGreen
flex.Styles("GrandTotal").ForeColor = Color.Red
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex[1, 2] = 180;
flex[2, 2] = 20;
flex[3, 2] = 74;
// 2列目を合計した小計行を表示
// 計算:合計、レベル:-1(総計行)、境界の開始列:-1(なし)、計算対象の列:2
flex.Subtotal(C1.Win.C1FlexGrid.AggregateEnum.Sum, -1, -1, 2);
// 総計行の組み込みスタイルを変更
flex.Styles["GrandTotal"].BackColor = Color.YellowGreen;
flex.Styles["GrandTotal"].ForeColor = Color.Red;
}
関連項目
組み込みスタイルの位置について
小計行をカスタマイズして表示する
Subtotal メソッドを使用すると、BeforeSubtotal/AfterSubtotal イベントが発生します。これらのイベントを使用して新しい
小計行で使用されるキャプション、スタイル、および集計値をカスタマイズできます。
【実行例】
463
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex(1, 2) = 180
flex(2, 2) = 20
flex(3, 2) = 74
' 2列目を合計した小計行を表示
' 計算:合計、レベル:-1(総計行)、境界の開始列:-1(なし)、計算対象の列:2
flex.Subtotal(C1.Win.C1FlexGrid.AggregateEnum.Sum, -1, -1, 2)
' 総計行の組み込みスタイルを変更
flex.Styles("GrandTotal").BackColor = Color.YellowGreen
flex.Styles("GrandTotal").ForeColor = Color.Yellow
flex.Styles("GrandTotal").TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.RightCenter
End Sub
Private Sub flex_BeforeSubtotal(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.SubtotalEventArgs) Handles flex.BeforeSubtotal
e.AggregateValue = "<" & e.AggregateValue & ">"
End Sub
Private Sub flex_AfterSubtotal(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.SubtotalEventArgs) Handles flex.AfterSubtotal
flex(e.NewRowIndex, 1) = "合計:"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex[1, 2] = 180;
flex[2, 2] = 20;
flex[3, 2] = 74;
// 2列目を合計した小計行を表示
// 計算:合計、レベル:-1(総計行)、境界の開始列:-1(なし)、計算対象の列:2
flex.Subtotal(C1.Win.C1FlexGrid.AggregateEnum.Sum, -1, -1, 2);
464
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// 総計行の組み込みスタイルを変更
flex.Styles["GrandTotal"].BackColor = Color.YellowGreen;
flex.Styles["GrandTotal"].ForeColor = Color.Yellow;
flex.Styles["GrandTotal"].TextAlign =
C1.Win.C1FlexGrid.TextAlignEnum.RightCenter;
}
private void flex_BeforeSubtotal(object sender, C1.Win.C1FlexGrid.SubtotalEventArgs
e)
{
e.AggregateValue = "<" + e.AggregateValue + ">";
}
private void flex_AfterSubtotal(object sender, C1.Win.C1FlexGrid.SubtotalEventArgs e)
{
flex[e.NewRowIndex, 1] = "合計:";
}
関連項目
組み込みスタイルの位置について
小計行を使用してアウトラインツリーを表示する
Column プロパティでツリーが表示される列を、Style プロパティでツリーの外観を指定します。その上で、Subtotal メソッドを
使用して小計行を表示します。小計行の表示位置は、SubtotalPosition プロパティで上下どちらかに設定することができま
す。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
465
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Handles MyBase.Load
flex(1, 0) = "AAA"
flex(1, 1) = 10
flex(2, 0) = "AAA"
flex(2, 1) = 20
flex(3, 0) = "BBB"
flex(3, 1) = 30
flex(4, 0) = "BBB"
flex(4, 1) = 40
flex(5, 0) = "BBB"
flex(5, 1) = 50
' 固定列:0
flex.Cols.Fixed = 0
' ツリー列:0
flex.Tree.Column = 0
' ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf
' 小計行(全ての合計)を表示
' 計算:合計、レベル:0、境界の開始列:-1(なし)、計算対象の列:1, キャプション
flex.Subtotal(C1.Win.C1FlexGrid.AggregateEnum.Sum, 0, -1, 1, "全ての合計")
' 小計行(0列目ごとの合計)を表示
' 計算:合計、レベル:1、境界の開始列:0、計算対象の列:1, キャプション
flex.Subtotal(C1.Win.C1FlexGrid.AggregateEnum.Sum, 1, 0, 1, "{0}の合計")
' レベル0の組み込みスタイルを変更
flex.Styles2("Subtotal0").BackColor = Color.YellowGreen
flex.Styles("Subtotal0").ForeColor = Color.Red
' レベル1の組み込みスタイルを変更
flex.Styles("Subtotal1").BackColor = Color.AliceBlue
flex.Styles("Subtotal1").ForeColor = Color.Green
' 列幅の自動調整
flex.AutoSizeCol(0)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex[1, 0] = "AAA";
flex[1, 1] = 10;
flex[2, 0] = "AAA";
flex[2, 1] = 20;
flex[3, 0] = "BBB";
flex[3, 1] = 30;
flex[4, 0] = "BBB";
flex[4, 1] = 40;
flex[5, 0] = "BBB";
flex[5, 1] = 50;
// 固定列:0
flex.Cols.Fixed = 0;
// ツリー列:0
flex.Tree.Column = 0;
466
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf;
// 小計行(全ての合計)を表示
// 計算:合計、レベル:0、境界の開始列:-1(なし)、計算対象の列:1, キャプション
flex.Subtotal(C1.Win.C1FlexGrid.AggregateEnum.Sum, 0, -1, 1, "全ての合計");
// 小計行(0列目ごとの合計)を表示
// 計算:合計、レベル:1、境界の開始列:0、計算対象の列:1, キャプション
flex.Subtotal(C1.Win.C1FlexGrid.AggregateEnum.Sum, 1, 0, 1, "{0}の合計");
// レベル0の組み込みスタイルを変更
flex.Styles["Subtotal0"].BackColor = Color.YellowGreen;
flex.Styles["Subtotal0"].ForeColor = Color.Red;
// レベル1の組み込みスタイルを変更
flex.Styles["Subtotal1"].BackColor = Color.AliceBlue;
flex.Styles["Subtotal1"].ForeColor = Color.Green;
// 列幅の自動調整
flex.AutoSizeCol(0);
}
関連項目
組み込みスタイルの位置について
組み込みスタイルの位置について組み込みスタイルの位置について
データにあわせて行/列のサイズを調整する
ノード行を指定してアウトラインツリーを表示する
Column プロパティでツリーが表示される列を、Style プロパティでツリーの外観を指定します。また、任意の行のIsNode プロ
パティを True にしてノード行とすることでアウトラインツリーを表示します。ノード行の階層レベルは、各ノード行のNode オブ
ジェクトを取得し、そのLevel プロパティを設定することで定義します。大きい値ほど、アウトラインツリー上のより深い(よりイン
デントした)階層レベルを意味します。
注意:
注意:IsNode プロパティは、非連結時のみ設定可能です。連結モード時は使用できません。
【実行例】
467
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 固定列:0
flex.Cols.Fixed = 0
' ツリー列:0
flex.Tree.Column = 0
' ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf
' 1行目をノード行に設定
flex.Rows(1).IsNode = True
' 階層レベルを0に設定
flex.Rows(1).Node.Level = 0
' 3行目をノード行に設定
flex.Rows(3).IsNode = True
' 階層レベルを0に設定
flex.Rows(3).Node.Level = 0
flex(1, 0) = "ノード行1"
flex(3, 0) = "ノード行2"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 固定列:0
flex.Cols.Fixed = 0;
// ツリー列:0
flex.Tree.Column = 0;
// ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf;
468
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// 1行目をノード行に設定
flex.Rows[1].IsNode = true;
// 階層レベルを0に設定
flex.Rows[1].Node.Level = 0;
// 3行目をノード行に設定
flex.Rows[3].IsNode = true;
// 階層レベルを0に設定
flex.Rows[3].Node.Level = 0;
flex[1, 0] = "ノード行1";
flex[3, 0] = "ノード行2";
}
連結グリッドでアウトラインツリーを表示する
IsNode プロパティは連結時に使用できないため、InsertNode メソッドでノード行を挿入してアウトラインツリーを表示します。
階層レベルは、InsertNode メソッドの引数で指定します。大きい値ほど、アウトラインツリー上のより深い(よりインデントした)
階層レベルを意味します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
...
' 連結グリッド
flex.DataSource = dt
' 固定列:0
flex.Cols.Fixed = 0
' ツリー列:0
flex.Tree.Column = 0
' ツリースタイルを設定
469
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf
' ノード行を挿入(レベル:0)
Dim n As C1.Win.C1FlexGrid.Node
n = flex.Rows.InsertNode(1, 0)
n.Data = "A~B"
n = flex.Rows.InsertNode(13, 0)
n.Data = "C~F"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
...
// 連結グリッド
flex.DataSource = dt;
// 固定列:0
flex.Cols.Fixed = 0;
// ツリー列:0
flex.Tree.Column = 0;
// ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf;
// ノード行を挿入(レベル:0)
C1.Win.C1FlexGrid.Node n;
n = flex.Rows.InsertNode(1, 0);
n.Data = "A~B";
n = flex.Rows.InsertNode(13, 0);
n.Data = "C~F";
}
ノード行にチェックボックスを表示する
Checked プロパティ、または C1FlexGridBase.SetCellChecked メソッドを使用します。
【実行例】
470
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 固定列:0
flex.Cols.Fixed = 0
' ツリー列:0
flex.Tree.C2olumn = 0
' ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf
' 1行目をノード行に設定
flex.Rows(1).IsNode = True
' 階層レベルを0に設定
flex.Rows(1).Node.Level = 0
' 3行目をノード行に設定
flex.Rows(3).IsNode = True
' 階層レベルを1に設定
flex.Rows(3).Node.Level = 1
' チェックボックスを表示
flex.Rows(3).Node.Checked = C1.Win.C1FlexGrid.CheckEnum.Checked
flex(1, 0) = "ノード行1"
flex(3, 0) = "ノード行2"
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 固定列:0
flex.Cols.Fixed = 0;
// ツリー列:0
flex.Tree.Column = 0;
471
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf;
// 1行目をノード行に設定
flex.Rows[1].IsNode = true;
// 階層レベルを0に設定
flex.Rows[1].Node.Level = 0;
// 3行目をノード行に設定
flex.Rows[3].IsNode = true;
// 階層レベルを1に設定
flex.Rows[3].Node.Level = 1;
// チェックボックスを表示
flex.Rows[3].Node.Checked = C1.Win.C1FlexGrid.CheckEnum.Checked;
flex[1, 0] = "ノード行1";
flex[3, 0] = "ノード行2";
}
縮小・展開をコードで実行する
Show メソッドを使用します。Show メソッドは、指定された階層レベルを折りたたみ、それより上位のレベルを展開します。各
ノード行が縮小・展開されているかどうかは、Expanded プロパティを使用して参照できます。
注意:
注意:Show メソッドによるノード行の展開/縮小は、Subtotal メソッドやIsNode プロパティ、InsertNode メソッドのい
ずれの方法で作成したアウトラインツリー表示でも使用できます。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 固定列:0
flex.Cols.Fixed = 0
472
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' ツリー列:0
flex.Tree.Column = 0
' ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf
' 1行目をノード行に設定
flex.Rows(1).IsNode = True
' 階層レベルを0に設定
flex.Rows(1).Node.Level = 0
' 2行目をノード行に設定
flex.Rows(2).IsNode = True
' 階層レベルを1に設定
flex.Rows(2).Node.Level = 1
' 3行目をノード行に設定
flex.Rows(3).IsNode = True
' 階層レベルを2に設定
flex.Rows(3).Node.Level = 2
flex(1, 0) = "階層レベル0"
flex(2, 0) = "階層レベル1"
flex(3, 0) = "階層レベル2"
flex.AutoSizeCol(0)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 階層レベル1で縮小
flex.Tree.Show(1)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
' 全階層レベルを展開
flex.Tree.Show(flex.Tree.MaximumLevel + 1)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 固定列:0
flex.Cols.Fixed = 0;
// ツリー列:0
flex.Tree.Column = 0;
// ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf;
// 1行目をノード行に設定
flex.Rows[1].IsNode = true;
// 階層レベルを0に設定
flex.Rows[1].Node.Level = 0;
// 2行目をノード行に設定
flex.Rows[2].IsNode = true;
// 階層レベルを1に設定
flex.Rows[2].Node.Level = 1;
// 3行目をノード行に設定
473
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Rows[3].IsNode = true;
// 階層レベルを2に設定
flex.Rows[3].Node.Level = 2;
flex[1, 0] = "階層レベル0";
flex[2, 0] = "階層レベル1";
flex[3, 0] = "階層レベル2";
flex.AutoSizeCol(0);
}
private void button1_Click(object sender, EventArgs e)
{
// 階層レベル1で縮小
flex.Tree.Show(1);
}
private void button2_Click(object sender, EventArgs e)
{
// 全階層レベルを展開
flex.Tree.Show(flex.Tree.MaximumLevel + 1);
}
縮小・展開イメージを変更する
Glyphs プロパティで、展開の場合はGlyphEnum.Expanded を、縮小の場合はGlyphEnum.Collapsed を指定して変更しま
す。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 固定列:0
flex.Cols.Fixed = 0
474
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' ツリー列:0
flex.Tree.Column = 0
' ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf
' 1行目をノード行に設定
flex.Rows(12).IsNode = True
' 階層レベルを0に設定
flex.Rows(1).Node.Level = 0
' 2行目をノード行に設定
flex.Rows(2).IsNode = True
' 階層レベルを1に設定
flex.Rows(2).Node.Level = 1
' 3行目をノード行に設定
flex.Rows(3).IsNode = True
' 階層レベルを2に設定
flex.Rows(3).Node.Level = 2
flex(1, 0) = "階層レベル0"
flex(2, 0) = "階層レベル1"
flex(3, 0) = "階層レベル2"
flex.AutoSizeCol(0)
' 展開のアイコンを変更
flex.Glyphs(C1.Win.C1FlexGrid.GlyphEnum.Expanded) = Image.FromFile("arrow.gif")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// 固定列:0
flex.Cols.Fixed = 0;
// ツリー列:0
flex.Tree.Column = 0;
// ツリースタイルを設定
flex.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf;
// 1行目をノード行に設定
flex.Rows[1].IsNode = true;
// 階層レベルを0に設定
flex.Rows[1].Node.Level = 0;
// 2行目をノード行に設定
flex.Rows[2].IsNode = true;
// 階層レベルを1に設定
flex.Rows[2].Node.Level = 1;
// 3行目をノード行に設定
flex.Rows[3].IsNode = true;
// 階層レベルを2に設定
flex.Rows[3].Node.Level = 2;
flex[1, 0] = "階層レベル0";
flex[2, 0] = "階層レベル1";
flex[3, 0] = "階層レベル2";
flex.AutoSizeCol(0);
// 展開のアイコンを変更
475
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.Glyphs[C1.Win.C1FlexGrid.GlyphEnum.Expanded] = Image.FromFile("arrow.gif");
}
注意:
注意:Image.FromFile メソッドを使用すると、アプリケーション起動時に画像ファイルがロックされます。詳細は、MSDN
などを参照してください。
フィルタリング
フィルタリングにおけるタスクを紹介します。
ユーザーによるフィルタリングを許可する
グリッドのAllowFiltering プロパティを True に変更します。また、列の AllowFiltering プロパティを None 以外に設定(デ
フォルト値:Default)します。
データフィルタリング機能は、Windows7 や Vista において Microsoft が使用しているスタイルに従っています。ユーザーが列
ヘッダ上にマウスポインタを動かしたときに、グリッドはヘッダ上にフィルタボタンを表示します。フィルタボタンのクリックによ
り、表示するデータを選択するフィルタエディタが起動します。また、フィルタが適用されている列には、マウスが列ヘッダ上に
置かれていないときでも、ヘッダにフィルタアイコンが表示されます。
【実行例】 値フィルタ+条件フィルタ(
値フィルタ+条件フィルタ(Default))
476
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】 条件フィルタ(
条件フィルタ(ByCondition))
ユーザーが“指定の値より大きい”、”指定の値を含む” といった条件を指定できる条件フィルタ
【実行例】 値フィルタ(
値フィルタ(ByValue))
ユーザーが表示する特定の値を選択できる値フィルタ
477
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】 フィルタリングを許可しない(
フィルタリングを許可しない(None))
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
478
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT * FROM Customers"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Customers")
' グリッドに接続します
flex.DataSource = ds.Tables("Customers")
' グリッドのAllowFilteringプロパティをTrueに設定
flex.AllowFiltering = True
' 各列のAllowFilteringプロパティを設定
flex.Cols(1).AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.Default
flex.Cols(2).AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.ByCondition
flex.Cols(3).AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.ByValue
flex.Cols(4).AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.None
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT * FROM Customers";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, " Customers ");
// グリッドに接続します
flex.DataSource = ds.Tables["Customers"];
// グリッドのAllowFilteringプロパティをTrueに設定
flex.AllowFiltering = true;
// 各列のAllowFilteringプロパティを設定
flex.Cols[1].AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.Default;
flex.Cols[2].AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.ByCondition;
flex.Cols[3].AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.ByValue;
flex.Cols[4].AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.None;
}
注意:
ユーザーによるフィルタリングの許可は、設計時にスマートタグの C1FlexGrid タスク や Column タスク メニュー
からも設定できます。
任意の列でフィルタリングを禁止する場合は、AllowFiltering プロパティを None に設定します。
サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Customers テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
コードによりフィルタリングを適用する
グリッドの AllowFiltering プロパティを True に変更した上で、ConditionFilter を作成し、フィルタ条件を指定します。ま
479
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
た、ApplyFilters メソッドで作成したフィルタ条件をグリッドに適用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT * FROM Customers"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Customers")
' グリッドに接続します
flex.DataSource = ds.Tables("Customers")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' グリッドのフィルタリングを有効にします
flex.AllowFiltering = True
' 新しいConditionFilterを作成します
Dim Filter = New C1.Win.C1FlexGrid.ConditionFilter()
' "C"で始まる要素を選択するフィルタを構成します
Filter.Condition1.Operator = C1.Win.C1FlexGrid.ConditionOperator.BeginsWith
Filter.Condition1.Parameter = "C"
' 新しいフィルタを"CustomerID"列に割り当てます
flex.Cols("CustomerID").Filter = Filter
' フィルタ条件を適用します
flex.ApplyFilters()
End Sub
480
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT * FROM Customers";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, " Customers ");
// グリッドに接続します
flex.DataSource = ds.Tables["Customers"];
}
private void button1_Click(object sender, EventArgs e)
{
// グリッドのフィルタリングを有効にします
flex.AllowFiltering = true;
// 新しいConditionFilterを作成します
C1.Win.C1FlexGrid.ConditionFilter Filter;
Filter = new C1.Win.C1FlexGrid.ConditionFilter();
// "C"で始まる要素を選択するフィルタを構成します
Filter.Condition1.Operator = C1.Win.C1FlexGrid.ConditionOperator.BeginsWith;
Filter.Condition1.Parameter = "C";
// 新しいフィルタを"CustomerID"列に割り当てます
flex.Cols["CustomerID"].Filter = Filter;
// フィルタ条件を適用します
flex.ApplyFilters();
}
注意:
任意の列でフィルタリングを禁止する場合は、AllowFiltering プロパティを None に設定します。
サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Customers テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
フィルタアイコンに独自のアイコンを表示する
フィルタが適用されている列のヘッダに表示されるフィルタアイコンは、Glyphs プロパティで、GlyphEnum.FilteredColumn
を指定して変更します。
【実行例】
481
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex(0, 1) = "苗字"
flex(1, 1) = "山田"
flex(2, 1) = "川田"
flex(3, 1) = "尾田"
flex(4, 1) = "竹中"
flex(5, 1) = "皆藤"
flex(6, 1) = "北島"
flex(7, 1) = "小林"
' グリッドのフィルタリングを有効にします
flex.AllowFiltering = True
' 新しいConditionFilterを作成します
Dim Filter = New C1.Win.C1FlexGrid.ConditionFilter()
' "田"で終わる要素を選択するフィルタを構成します
Filter.Condition1.Operator = C1.Win.C1FlexGrid.ConditionOperator.EndsWith
Filter.Condition1.Parameter = "田"
' 新しいフィルタを1列目に割り当てます
flex.Cols(1).Filter = Filter
' フィルタ条件を適用します
flex.ApplyFilters()
' 独自のアイコンをフィルタアイコンに適用します
flex.Glyphs(C1.Win.C1FlexGrid.GlyphEnum.FilteredColumn) =
Image.FromFile("myBack.png")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
482
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex[0, 1] = "苗字";
flex[1, 1] = "山田";
flex[2, 1] = "川田";
flex[3, 1] = "尾田";
flex[4, 1] = "竹中";
flex[5, 1] = "皆藤";
flex[6, 1] = "北島";
flex[7, 1] = "小林";
// グリッドのフィルタリングを有効にします
flex.AllowFiltering = true;
// 新しいConditionFilterを作成します
C1.Win.C1FlexGrid.ConditionFilter Filter;
Filter = new C1.Win.C1FlexGrid.ConditionFilter();
// 田"で終わる要素を選択するフィルタを構成します
Filter.Condition1.Operator = C1.Win.C1FlexGrid.ConditionOperator.EndsWith;
Filter.Condition1.Parameter = "田";
// 新しいフィルタを1列目に割り当てます
flex.Cols["CustomerID"].Filter = Filter;
// フィルタ条件を適用します
flex.ApplyFilters();
// 独自のアイコンをフィルタアイコンに適用します
flex.Glyphs[C1.Win.C1FlexGrid.GlyphEnum.FilteredColumn] =
Image.FromFile("myBack.png");
}
注意:
注意:任意の列でフィルタリングを禁止する場合は、AllowFiltering プロパティを None に設定します。
フィルタボタンに独自のアイコンを表示する
フィルタエディタを起動するフィルタボタンは、Glyphs プロパティで、GlyphEnum.FilterEditor を指定して変更します。
【実行例】
483
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT * FROM Customers"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Customers")
' グリッドに接続します
flex.DataSource = ds.Tables("Customers")
' 独自のアイコンをフィルタボタンに適用します
flex.Glyphs(C1.Win.C1FlexGrid.GlyphEnum.FilterEditor) =
Image.FromFile("myNote.png")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT * FROM Customers";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, " Customers ");
// グリッドに接続します
flex.DataSource = ds.Tables["Customers"];
// 独自のアイコンをフィルタボタンに適用します
flex.Glyphs[C1.Win.C1FlexGrid.GlyphEnum.FilterEditor] =
Image.FromFile("myNote.png");
}
注意:
フィルタボタンは、ユーザーが列ヘッダ上にマウスポインタを動かしたときに、ヘッダ上に表示されます。
任意の列でフィルタリングを禁止する場合は、AllowFiltering プロパティを None に設定します。
サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Customers テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
ソート
ソートに関するタスクを紹介します。
484
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ユーザーによるソートを許可する
AllowSorting プロパティを AllowSortingEnum.SingleColumn(デフォルト) またはAllowSortingEnum.MultiColumn
に設定します。各列の AllowSorting プロパティを False にすることで、ユーザーが特定の列を基準にしたソートを不可にする
ことができます。
【実行例】
Visual Basic コードの書き方
Visual Basic
flex.AllowSorting = C1.Win.C1FlexGrid.AllowSortingEnum.SingleColumn
C# コードの書き方
C#
flex.AllowSorting = C1.Win.C1FlexGrid.AllowSortingEnum.SingleColumn;
注意:
注意:AllowSorting プロパティは、「C1FlexGrid タスク」や「Column タスク」からも設定できます。
関連項目
特定列でのソートを制限する
特定列でのソートを制限する
特定の列でソートを制限するには、デザイナまたはコードのいずれかで、AllowSorting プロパティを False に設定します。
【デザイナを使用する場合】
1. 編集するグリッドの列を選択します。その列の[列タスク
列タスク]メニューが開きます。
485
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
2. [ソートを有効にする
ソートを有効にする]チェックボックスをオフにします。
または、C1FlexGrid 列エディタを使用して
列エディタを使用して、AllowSorting プロパティを設定することができます。
3. C1FlexGrid 列エディタを開きます。C1FlexGrid 列エディタにアクセスする方法について詳しくは、「列エディタにアクセ
ス」を参照してください。
4. 右ペインから編集する列を選択し、左ペインで AllowSorting プロパティを False に設定します。
5. [OK]をクリックして、エディタを閉じます。
【コードを使用する場合】
次のコードを Form_Load イベントに追加して、[AtomicNumber]列のソートを制限します。
Visual Basic コードの書き方
Visual Basic
flex.Cols("AtomicNumber").AllowSorting = False
' 同じです: flex.Cols(1).AllowEditing = False
C# コードの書き方
C#
flex.Cols["AtomicNumber"].AllowSorting = false;
486
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// 同じです: flex.Cols[1].AllowEditing = false;
ソート順序について
連結モードと非連結モードでソート順序が異なります。
連結モード
連結モードの C1FlexGrid で列ヘッダをクリックされた際は、DataTable の DefaultView.Sort プロパティを設定した場合と同じ
ソート順序になります。DefaultView.Sort プロパティの詳細については、MSDN を参照してください。
非連結モード
非連結モードの C1FlexGrid におけるソート順序は、下記のようになります。
String.Compare メソッドに準拠
現在のカルチャを使用し、大文字と小文字は区別します。
非連結モードのソート例
ソート前
ソート後(昇順)
注意:
注意:カスタムソートを実装する方法については、SortNulls サンプルを参照してください。
ソート処理を無効にする
C1FlexGrid を連結モードで使用している場合は、グリッドのソート条件を消去(DefaultView.Sort プロパティに空文字を設
487
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
定)することで行ったソート処理を無効にします。ソート条件を消去した場合、グリッドの表示もソートされていない状態に戻りま
す(ソート条件のみをクリアし、グリッド上の表示順序は変更しないといった機能は用意されていません)。
注意:
注意:連結モードの C1FlexGrid では、一旦ソートを行うとソート条件がグリッドに残ります。そのため、ソートを行った
キー列のデータを変更した場合、編集終了後(ValidateEdit やAfterEdit イベントが発生した後)、他のセルにカレント
セルを移動した際などに、変更後のデータで再ソートされます。この動作は、FlexGrid for WinForms の仕様です。
1. DataTable を作成してグリッドに連結します。たとえば、次のコードを入力し、9人の顧客から成るテーブルを作成し
てC1FlexGrid に連結します。
Visual Basic コードの書き方
Visual Basic
Dim CustTable As DataTable
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' DataTable を作成します。
CustTable = New DataTable("Customers")
' 列を DataTable に追加します。
CustTable.Columns.Add("顧客ID", GetType(Int32))
CustTable.Columns.Add("姓", GetType(String))
' 行を DataTable に追加します。
Dim CustRow As DataRow
For i As Integer = 1 To 9
CustRow = CustTable.NewRow()
CustRow(0) = i
CustRow(1) = "姓" & i.ToString()
CustTable.Rows.Add(CustRow)
Next
' DataTable に連結します。
flex.DataSource = CustTable
End Sub
C# コードの書き方
C#
DataTable CustTable;
private void Form1_Load(object sender, EventArgs e)
{
// DataTable を作成します。
CustTable = new DataTable("Customers");
// 列を DataTable に追加します。
CustTable.Columns.Add("顧客ID", typeof(Int32));
CustTable.Columns.Add("姓", typeof(string));
// 行を DataTable に追加します。
DataRow CustRow;
for (int i = 1; i <= 9; i++)
{
CustRow = CustTable.NewRow();
CustRow[0] = i;
CustRow[1] = "姓" + i.ToString();
CustTable.Rows.Add(CustRow);
488
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
// DataTable に連結します。
flex.DataSource = CustTable;
}
グリッドは次のような外観になります。
【実行例】
2. クリックされたときテーブルのソートを元に戻すボタンを作成します。次のコードを Button1_Click イベントに追加しま
す。
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
CustTable.DefaultView.Sort = ""
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
CustTable.DefaultView.Sort = "";
}
注意:
注意:DataTable.DefaultView は DataTable の DataView を返します。ソート文字列を null に設定すると、DataView
は直前のソートを元に戻します。
【実行例】
「姓」列を降順にソートします。
489
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
〈ソートを元に戻す
ソートを元に戻す〉ボタンをクリックします。ソートは元に戻ります。
なお、(列ヘッダに表示されている)ソート方向を示すインジケータのみを消去したい場合は、ShowSort プロパティを False に
設定してアイコンを非表示にするか、ShowSortAt メソッドを使用します。ShowSort プロパティを False に設定した場合は、
再度ソートを行ってもアイコンは表示されなくなりますので、注意してください。非連結モードのグリッドでも使用可能です。
関連項目
インジケータを非表示にする
コードによりソートする
Sort メソッドを使用します。ソート方法は、SortFlags 列挙体
列挙体で指定します。複数のソート方法を同時に設定する場合は、Or
(C# では ”|”)を使用します。
490
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex(1, 1) = "AAA"
flex(2, 1) = "bbb"
flex(3, 1) = "aaa"
flex(4, 1) = "BBB"
' 1列目をソート:降順、大文字と小文字を無視する
flex.Sort(C1.Win.C1FlexGrid.SortFlags.Descending Or
C1.Win.C1FlexGrid.SortFlags.IgnoreCase, 1)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex[1, 1] = "AAA";
flex[2, 1] = "bbb";
flex[3, 1] = "aaa";
flex[4, 1] = "BBB";
// 1列目をソート:降順、大文字と小文字を無視する
flex.Sort(C1.Win.C1FlexGrid.SortFlags.Descending
}
複数列のソートを実行する
複数列をソートするには、各列の Sort プロパティを設定し、Sort メソッドを使用して列設定に基づいてソートします。
491
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
1. Form_Load イベントに以下のコードを追加し、1列目の列を昇順で、2列目の列を降順でソートするように設定します。
Visual Basic コードの書き方
Visual Basic
flex.Cols(1).Sort = C1.Win.C1FlexGrid.SortFlags.Ascending
flex.Cols(2).Sort = C1.Win.C1FlexGrid.SortFlags.Descending
C# コードの書き方
C#
flex.Cols(1).Sort = C1.Win.C1FlexGrid.SortFlags.Ascending;
flex.Cols(2).Sort = C1.Win.C1FlexGrid.SortFlags.Descending;
2. 次の Sort メソッドを追加し、列1と列2の設定に基づいてソートします。
Visual Basic コードの書き方
Visual Basic
flex.Sort(C1.Win.C1FlexGrid.SortFlags.UseColSort, 1, 2)
C# コードの書き方
C#
flex.Sort(C1.Win.C1FlexGrid.SortFlags.UseColSort, 1, 2);
【実行例】
[Order Details]テーブル例
グリッドは、以下のように、1列目の列が昇順で、2列目列が降順でソートされた外観になります。この例では、グリッドはま
ず、OrderID 列に基づいて昇順ソートされ、次に、ProductID 列に基づいて降順ソートされます。
インジケータを明示的に表示する
492
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
列ヘッダ部分にソートインジケータを表示するには、ShowSortAt メソッドを使用します。
注意:
ShowSortAt メソッドを使用してソートインジケータを表示してもソートは実行されません。
ソートインジケータが表示されるのは1列のみです。複数列に対してインジケータを表示することはできません。
【実行例】
1列目にソートインジケータを表示(ソートは未実行)
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex(1, 1) = "444"
flex(2, 1) = "222"
flex(3, 1) = "333"
flex(4, 1) = "111"
' 1列目に降順のソートインジケータを表示
' ソートは実行されません
flex.ShowSortAt(C1.Win.C1FlexGrid.SortFlags.Descending, 1)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex[1, 1] = "444";
flex[2, 1] = "222";
flex[3, 1] = "333";
493
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex[4, 1] = "111";
// 1列目に降順のソートインジケータを表示
// ソートは実行されません
flex.ShowSortAt(C1.Win.C1FlexGrid.SortFlags.Descending, 1);
}
インジケータを非表示にする
ShowSort プロパティを False に設定します。
注意:
注意:ShowSort プロパティを使用してソートインジケータを非表示にしてもソートは無効になりません。
【実行例】
ソートは実行されていますが、インジケータは非表示になります。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex(1, 1) = "111"
flex(2, 1) = "222"
flex(3, 1) = "333"
flex(4, 1) = "444"
' 1列目をソート:降順
flex.Sort(C1.Win.C1FlexGrid.SortFlags.Descending, 1)
' ソートインジケータを非表示にする
flex.ShowSort = False
End Sub
C# コードの書き方
494
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
private void Form1_Load(object sender, EventArgs e)
{
flex[1, 1] = "111";
flex[2, 1] = "222";
flex[3, 1] = "333";
flex[4, 1] = "444";
// 1列目をソート:降順
flex.Sort(C1.Win.C1FlexGrid.SortFlags.Descending, 1);
// ソートインジケータを非表示にする
flex.ShowSort = false;
}
インジケータに独自のアイコンを表示する
Glyphs プロパティで、昇順のインジケータはGlyphEnum.Ascending を、降順のインジケータはGlyphEnum.Descending
を指定して変更します。
【実行例】
降順のソートインジケータを変更
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex(1, 1) = "111"
flex(2, 1) = "222"
flex(3, 1) = "333"
flex(4, 1) = "444"
' 1列目をソート:降順
flex.Sort(C1.Win.C1FlexGrid.SortFlags.Descending, 1)
495
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' 降順のインジケータを変更
flex.Glyphs(C1.Win.C1FlexGrid.GlyphEnum.Descending) = Image.FromFile("back.gif")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex[1, 1] = "111";
flex[2, 1] = "222";
flex[3, 1] = "333";
flex[4, 1] = "444";
// 1列目をソート:降順
flex.Sort(C1.Win.C1FlexGrid.SortFlags.Descending, 1);
// 降順のインジケータを変更
flex.Glyphs[C1.Win.C1FlexGrid.GlyphEnum.Descending] = Image.FromFile("back.gif");
}
データ連結
データ連結に関するタスクを紹介します。
非連結列を追加する
C1FlexGrid を連結モードで使用している場合、連結しているデータソースのデータがグリッドに表示されます。しかし、この場
合でもデータソースに存在しない列を使ってデータを表示したいことがあります。このような場合には、非連結列を使用します。
非連結列は、グリッドにデータソースを連結した後に、デザイン時またはコードにより追加します。非連結列のデータは連結し
ているデータソースにないため、GetUnboundValue イベントやOwnerDrawCell イベントを使用して非連結列にデータを表
示する必要ガあります。
注意:
非連結列の使用方法については、UnboundColumnsサンプル
サンプルも参照してください。
サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Employees テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
【実行例】 Employees テーブル
496
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT FirstName, LastName FROM Employees"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Employees")
' グリッドに接続します
flex.DataSource = ds.Tables("Employees")
' 非連結列を追加
Dim col As C1.Win.C1FlexGrid.Column = flex.Cols.Add()
col.Name = "FullName"
col.Caption = "FullName(Unbound)"
' 変更を許可しません
col.AllowEditing = False
flex.AutoSizeCol(3)
End Sub
Private Sub flex_GetUnboundValue(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.UnboundValueEventArgs) Handles flex.GetUnboundValue
If e.Row >= flex.Rows.Fixed Then
' "FullName"列(非連結列)の値を設定します
If flex.Cols(e.Col).Name = "FullName" Then
e.Value = flex(e.Row, "FirstName") + " " + flex(e.Row, "LastName")
End If
End If
End Sub
C# コードの書き方
497
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT FirstName, LastName FROM Employees";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Employees");
// グリッドに接続します
flex.DataSource = ds.Tables["Employees"];
// 非連結列を追加
C1.Win.C1FlexGrid.Column col = flex.Cols.Add();
col.Name = "FullName";
col.Caption = "FullName(Unbound)";
// 変更を許可しません
col.AllowEditing = false;
flex.AutoSizeCol(3);
}
private void flex_GetUnboundValue(object sender,
C1.Win.C1FlexGrid.UnboundValueEventArgs e)
{
if(e.Row >= flex.Rows.Fixed)
{
// "FullName"列(非連結列)の値を設定します
if(flex.Cols[e.Col].Name == "FullName")
{
e.Value = flex[e.Row, "FirstName"] + " " + flex[e.Row, "LastName"];
}
}
}
非連結列の入力を許可する
ユーザーに非連結列の入力(更新)を許可する場合、SetUnboundValue イベントでユーザーが非連結列に入力(更新)した
データを取得し、GetUnboundValue イベントで更新されたデータを表示する必要があります。下記のサンプルコードでは、
HashTable オブジェクトを使用して非連結列に表示するデータを保持しています。
注意:
注意:非連結列の使用方法については、UnboundColumnsサンプル
サンプルも参照してください。
【実行例】
498
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
' 非連結列の値を保持する Hashtable
Dim _hash As New Hashtable()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' DataTableオブジェクトを作成
Dim dt As New DataTable()
dt.Columns.Add("背番号", GetType(Integer))
dt.Columns.Add("選手名", GetType(String))
Dim dtRow As DataRow
dtRow = dt.NewRow
dtRow("背番号") = 10
dtRow("選手名") = "財前"
dt.Rows.Add(dtRow)
' DataTableを連結(連結モード)
flex.DataSource = dt
flex.AllowAddNew = True
' 非連結列を追加
Dim col As C1.Win.C1FlexGrid.Column = flex.Cols.Add()
col.Name = "得点"
col.Caption = "得点(Unbound)"
' 非連結列に表示する初期値
_hash(10) = "11"
End Sub
' "背番号"の値をキーにして、
' Hashtable からデータを取得し、非連結列に表示
Private Sub flex_GetUnboundValue(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.UnboundValueEventArgs) Handles flex.GetUnboundValue
Dim drv As DataRowView = CType(flex.Rows(e.Row).DataSource, DataRowView)
e.Value = _hash(drv("背番号"))
End Sub
' "背番号"の値をキーにして、
499
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' 非連結列上に表示されているデータを Hashtable に保存
Private Sub flex_SetUnboundValue(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.UnboundValueEventArgs) Handles flex.SetUnboundValue
Dim drv As DataRowView = CType(flex.Rows(e.Row).DataSource, DataRowView)
_hash(drv("背番号")) = e.Value
End Sub
C# コードの書き方
C#
// 非連結列の値を保持する Hashtable
System.Collections.Hashtable _hash = new System.Collections.Hashtable();
private void Form1_Load(object sender, EventArgs e)
{
// DataTableオブジェクトを作成
DataTable dt = new DataTable();
dt.Columns.Add("背番号", typeof(int));
dt.Columns.Add("選手名", typeof(string));
DataRow dtRow;
dtRow = dt.NewRow();
dtRow["背番号"] = 10;
dtRow["選手名"] = "財前";
dt.Rows.Add(dtRow);
// DataTableを連結(連結モード)
flex.DataSource = dt;
flex.AllowAddNew = true;
// 非連結列を追加
C1.Win.C1FlexGrid.Column col = flex.Cols.Add();
col.Name = col.Caption = "得点";
// 非連結列に表示する初期値
_hash[10] = "11";
}
// "背番号"の値をキーにして、
// Hashtable からデータを取得し、非連結列に表示
private void flex_GetUnboundValue(object sender,
C1.Win.C1FlexGrid.UnboundValueEventArgs e)
{
DataRowView drv = (DataRowView)flex.Rows[e.Row].DataSource;
e.Value = _hash[drv["背番号"]];
}
// "背番号"の値をキーにして、
// 非連結列上に表示されているデータを Hashtable に保存
private void flex_SetUnboundValue(object sender,
C1.Win.C1FlexGrid.UnboundValueEventArgs e)
{
DataRowView drv = (DataRowView)flex.Rows[e.Row].DataSource;
_hash[drv["背番号"]] = e.Value;
}
固定列にデータを表示する
500
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C1FlexGrid を連結(バウンド)モードで使用する場合、固定列に特定のフィールドを連結して表示する機能は用意されていま
せん。連結しているデータは、通常の列から表示されます。そのため、下記2通りの方法で対応してください。
注意:
注意:サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Customers テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
固定列にデータをコピーする
固定列にデータをコピーして対応します。例えば、グリッドの固定列が1でデータソースと連結している場合、連結後に1列目
(データソースの最初の列)の値を0列目(固定列)にコピーします。また、コピーした1列目は非表示にすることで固定列が連結
されているように表示されます。
【実行例 Customers テーブル
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT * FROM Customers"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Customers")
' 連結モード
' グリッドに接続します
flex.DataSource = ds.Tables("Customers")
' 固定列に表示したいデータをコピーします
For i As Integer = 0 To flex.Rows.Count - 1
flex(i, 0) = flex(i, 1)
501
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Next
' 固定列に表示した列は非表示
flex.Cols(1).Visible = False
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT * FROM Customers";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
// 連結モード
// グリッドに接続します
flex.DataSource = ds.Tables["Customers"];
// 固定列に表示したいデータをコピーします
for (int i = 0; i < flex.Rows.Count; i++)
{
flex[i, 0] = flex[i, 1];
}
// 固定列に表示した列は非表示
flex.Cols[1].Visible = false;
}
静止列を使用する
固定列の代わりに静止列を使用します。スタイルを固定列と同様にすることで静止列を固定列のように使用します。
【実行例 Customers テーブル
502
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT * FROM Customers"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Customers")
' 連結モード
' グリッドに接続します
flex.DataSource = ds.Tables("Customers")
' 固定列は0
flex.Cols.Fixed = 0
' 静止列を使用
flex.Cols.F2rozen = 1
' 編集を不可に設定
flex.Cols(0).AllowEditing = False
' 静止セルのスタイルを設定
flex.Styles.Frozen.BackColor = flex.Styles.Fixed.BackColor
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
503
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
string rs = "SELECT * FROM Customers";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
// 連結モード
// グリッドに接続します
flex.DataSource = ds.Tables["Customers"];
// 固定列は0
flex.Cols.Fixed = 0;
// 静止列を使用
flex.Cols.Frozen = 1;
// 編集を不可に設定
flex.Cols[0].AllowEditing = false;
// 静止セルのスタイルを設定
flex.Styles.Frozen.BackColor = flex.Styles.Fixed.BackColor;
}
フィールドにビットマップイメージを表示する
ビットマップイメージ(OLE オブジェクト型)のフィールド連結時にイメージを表示させたい場合は、バイト配列であるデータを適
切に処理したうえでオーナー描画の機能を使用して表示する必要があります。
注意:
ビットマップイメージの表示方法については、DBImagesサンプル
サンプルも参照してください。
サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Employees テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
MemoryStream クラスなどの詳細は、MSDN を参照してください。
【実行例】 Employees テーブル
Visual Basic コードの書き方
504
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT Photo, FirstName, LastName, Country, City, Address
FROM Employees"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Employees")
' グリッドに接続します
flex.DataSource = ds.Tables("Employees")
' "Photo"列を表示し、編集不可に設定します
flex.Cols("Photo").Visible = True
flex.Cols("Photo").AllowEditing = False
flex.Cols("Photo").ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Scale
' 画像を表示するために、行の高さなどを調整します
Dim hei As Integer = flex.Rows.DefaultSize
flex.Rows.DefaultSize = hei * 4
flex.Rows(0).Height = hei
flex.Cols(0).Width = 20
flex.Cols(1).Width = 60
' OwnerDrawCellイベントを発生させます
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
End Sub
Private Sub flex_OwnerDrawCell(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles flex.OwnerDrawCell
If e.Row >= flex.Rows.Fixed Then
' "Photo"列:画像はバイト配列としてデータベースに格納されています
If flex.Cols(e.Col).Name = "Photo" Then
' 画像をロードします
e.Image = LoadImage(flex(e.Row, e.Col))
' 画像を取得できた場合は、TextはNullにします
If Not (e.Image Is Nothing) Then
e.Text = Nothing
End If
End If
End If
End Sub
Function LoadImage(ByVal picData() As Byte) As Image
' オブジェクトを確認します
Const bmData As Integer = 78
If picData Is Nothing Or picData.Length < bmData + 2 Then
Return Nothing
End If
If picData(0) <> &H15 Or picData(1) <> &H1C Then
Return Nothing
End If
' Bitmapのみを処理します
' 画像をロードします
505
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Dim img As Image = Nothing
Try
Dim ms As New IO.MemoryStream(picData, bmData, picData.Length - bmData)
img = Image.FromStream(ms)
Catch
End Try
Return img
End Function
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT Photo, FirstName, LastName, Country, City, Address FROM
Employees";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Employees");
// グリッドに接続します
flex.DataSource = ds.Tables["Employees"];
// "Photo"列を表示し、編集不可に設定します
flex.Cols["Photo"].Visible = true;
flex.Cols["Photo"].AllowEditing = false;
flex.Cols["Photo"].ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Scale;
// 画像を表示するために、行の高さなどを調整します
int hei = flex.Rows.DefaultSize;
flex.Rows.DefaultSize = hei * 4;
flex.Rows[0].Height = hei;
flex.Cols[0].Width = 20;
flex.Cols[1].Width = 60;
// OwnerDrawCellイベントを発生させます
flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
}
private void flex_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
if (e.Row >= flex.Rows.Fixed)
{
// "Photo"列:画像はバイト配列としてデータベースに格納されています
if (flex.Cols[e.Col].Name == "Photo")
{
// 画像をロードします
e.Image = LoadImage(flex[e.Row, e.Col] as byte[]);
// 画像を取得できた場合は、TextはNullにします
if (e.Image != null) e.Text = null;
}
}
506
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
Image LoadImage(byte[] picData)
{
// オブジェクトを確認します
const int bmData = 78;
if (picData == null || picData.Length < bmData + 2) return null;
if (picData[0] != 0x15 |
// Bitmap のみを処理します
if (picData[bmData] != 'B' |
// 画像をロードします
Image img = null;
try
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(picData, bmData,
picData.Length - bmData);
img = Image.FromStream(ms);
}
catch { }
return img;
}
自動で列幅を調整する
グリッドとデータソースを連結する前に、C1FlexGridBase.AutoResize プロパティを True (デフォルト)に設定します。
AutoResize プロパティは、データのロード時に列幅を自動的に調節するかどうかを決定します。
注意:
注意:サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Customers テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
【実行例】 Customers テーブル 列幅の自動調整
【実行例】 Customers テーブル 列幅の自動調整なし
507
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT * FROM Customers"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Customers")
' 列幅の自動調節機能を使用
flex.AutoResize = True
' グリッドに接続します
flex.DataSource = ds.Tables("Customers")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT * FROM Customers";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
// 列幅の自動調節機能を使用
508
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
flex.AutoResize = true;
// グリッドに接続します
flex.DataSource = ds.Tables["Customers"];
}
印刷
印刷に関するタスクを紹介します。
印刷(プレビュー)を実行する
PrintGrid メソッドを使用します。印刷プレビューを表示する場合は、引数に PrintGridFlags.ShowPreviewDialog を指定し
ます。複数の印刷オプションを同時に設定する場合は、Or (C# では ”|”)を使用します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 印刷プレビュー+FitToPage
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog
Or C1.Win.C1FlexGrid.PrintGridFlags.FitToPage)
End Sub
C# コードの書き方
C#
509
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
private void button1_Click(object sender, EventArgs e)
{
// 印刷プレビュー+FitToPage
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog
}
ページ範囲を指定して印刷する
PrintRange プロパティに SomePages を設定した上で、FromPage/
/ToPage プロパティを設定します。
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 2ページ目から3ページ目を印刷
With flex.PrintParameters.PrintDocument.PrinterSettings
.PrintRange = Printing.PrintRange.SomePages
.MaximumPage = Short.MaxValue
.MinimumPage = 1
.FromPage = 2
.ToPage = 3
End With
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 2ページ目から3ページ目を印刷
flex.PrintParameters.PrintDocument.PrinterSettings.PrintRange =
System.Drawing.Printing.PrintRange.SomePages;
flex.PrintParameters.PrintDocument.PrinterSettings.MaximumPage = short.MaxValue;
flex.PrintParameters.PrintDocument.PrinterSettings.MinimumPage = 1;
flex.PrintParameters.PrintDocument.PrinterSettings.FromPage = 2;
flex.PrintParameters.PrintDocument.PrinterSettings.ToPage = 3;
flex.PrintGrid("TEST", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog);
}
注意:
注意:PrintRange や FromPage/ToPage プロパティの詳細は、MSDN を参照してください。
印刷ページの余白を設定する
PrintGrid メソッドにて印刷を行う前に、DefaultPageSettings.Margins プロパティを使用してマージンを設定しま
す。Margins クラスは、.NET Framework の Margins クラスと同様になりますので、各余白を 1/100 インチ単位で取得または
設定します。
【実行例】
510
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 印刷マージンを設定します(1.5インチ)。
With flex.PrintParameters.PrintDocument.DefaultPageSettings
.Margins.Top = 150
.Margins.Bottom = 150
'.Margins = New System.Drawing.Printing.Margins(100, 100, 150, 150)
End With
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog
Or _
C1.Win.C1FlexGrid.PrintGridFlags.ShowPageSetupDialog)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 印刷マージンを設定します(1.5インチ)。
flex.PrintParameters.PrintDocument.DefaultPageSettings.Margins.Top = 150;
flex.PrintParameters.PrintDocument.DefaultPageSettings.Margins.Bottom = 150;
//flex.PrintParameters.PrintDocument.DefaultPageSettings.Margins =
//new System.Drawing.Printing.Margins(100, 100, 150, 150);
flex.PrintGrid("TEST", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog |
511
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C1.Win.C1FlexGrid.PrintGridFlags.ShowPageSetupDialog);
}
注意:
注意:Margins クラスの詳細は、MSDN を参照してください。
印刷ヘッダ/フッタを設定する
印刷ヘッダ/フッタは、PrintGrid メソッドの引数で指定します。
また、印刷ヘッダおよびフッタ文字列は、タブ記号で左右位置(左揃え、中央揃え、右揃え)を、改行コードで行を設定します。設
定する順番に注意してください。まず、左揃えにしたい行を設定します。改行コードを設定することで任意の行を左揃えに設定
できます。次に、タブ記号を追加し、中央揃えにしたい行を設定します。中央揃えにしたい行も改行コードを設定することで任
意の行を中央揃えに設定できます。最後に、タブ記号をもう1つ追加し、右揃えにしたい行を設定します。同様に改行コードを
設定することで任意の行を右揃えに設定することが可能です。
フォントは、PrintParameters.HeaderFont/
/FooterFont プロパティで変更します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
flex.PrintGrid("C1FlexGrid", _
C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog, _
vbCrLf + "2行目(ヘッダ左揃え)" + _
vbTab + "1行目(ヘッダ中央揃え)" + _
vbCrLf + vbCrLf + vbCrLf + "4行目(ヘッダ中央揃え)" + _
vbTab + vbCrLf + vbCrLf + "3行目(ヘッダ右揃え)", _
vbCrLf + "2行目(フッタ左揃え)" + _
512
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
vbTab + "1行目(フッタ中央揃え)" + _
vbTab + vbCrLf + vbCrLf + "3行目(フッタ右揃え)")
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
flex.PrintGrid("C1FlexGrid",
C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog,
"\n" + "2行目(ヘッダ左揃え)" +
"\t" + "1行目(ヘッダ中央揃え)" +
"\n" + "\n" + "\n" + "4行目(ヘッダ中央揃え)" +
"\t" + "\n" + "\n" + "3行目(ヘッダ右揃え)",
"\n" + "2行目(フッタ左揃え)" +
"\t" + "1行目(フッタ中央揃え)" +
"\t" + "\n" + "\n" + "3行目(フッタ右揃え)");
}
印刷フッタにページ番号を出力する
現在のページ番号とページ総数は、プレースホルダ({0} と {1})を使用して出力します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
513
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' 印刷ヘッダ/フッタのフォント変更
flex.PrintParameters.HeaderFont = New Font("メイリオ", 14, FontStyle.Bold)
flex.PrintParameters.FooterFont = New Font("メイリオ", 20, FontStyle.Italic)
' フッタにページ番号/ページ総数を表示
flex.PrintGrid("C1FlexGrid", _
C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog, _
"ヘッダ", vbTab + "ページ {0} / {1}")
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 印刷ヘッダ/フッタのフォント変更
flex.PrintParameters.HeaderFont = new Font("メイリオ", 14, FontStyle.Bold);
flex.PrintParameters.FooterFont = new Font("メイリオ", 20, FontStyle.Italic);
// フッタにページ番号/ページ総数を表示
flex.PrintGrid("C1FlexGrid",
C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog,
"ヘッダ", "\t" + "ページ {0} / {1}");
}
ページごとに印刷ヘッダ(フッタ)を設定する
PrintPage イベントを使用して、GridPrinterHeader(GridPrinterFooter)プロパティを動的に変更することで、ページごとに印
刷ヘッダ(フッタ)を変更することができます。PrintPage イベントは「グリッドがページの出力を終了した後に発生」するた
め、PrintPage イベントで設定したヘッダやフッタは次のページに反映される点に注意してください。
【実行例】
Visual Basic コードの書き方
Visual Basic
514
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 印刷ヘッダの設定(1ページ目はこの設定で印刷される)
flex.PrintParameters.Header = "ページヘッダ:印刷1枚目"
flex.PrintParameters.HeaderFont = New Font("メイリオ", 10)
flex.PrintParameters.Footer = "Page {0} of {1}"
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog)
End Sub
' 1ページ目が印刷された後、以降繰り返し発生
Private Sub flex_PrintPage(ByVal sender As Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles flex.PrintPage
' ヘッダを動的に変更
Dim gp As C1.Win.C1FlexGrid.GridPrinter
gp = flex.PrintParameters
gp.Header = "ページヘッダ:印刷" & gp.PageNumber + 1 & "枚目"
Select Case gp.PageNumber
Case 1
gp.HeaderFont = New Font("メイリオ", 10, FontStyle.Bold)
Case 2
gp.HeaderFont = New Font("メイリオ", 10, FontStyle.Italic)
Case Else
gp.HeaderFont = New Font("メイリオ", 10, FontStyle.Underline)
End Select
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 印刷ヘッダの設定(1ページ目はこの設定で印刷される)
flex.PrintParameters.Header = "ページヘッダ:印刷1枚目";
flex.PrintParameters.HeaderFont = new Font("MS ゴシック", 10);
flex.PrintParameters.Footer = "Page {0} of {1}";
flex.PrintGrid("TEST", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog);
}
// 1ページ目が印刷された後、以降繰り返し発生
private void flex_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs
e)
{
// ヘッダを動的に変更
C1.Win.C1FlexGrid.GridPrinter gp;
gp = flex.PrintParameters;
gp.Header = "ページヘッダ:印刷" + (gp.PageNumber + 1) + "枚目";
switch (gp.PageNumber)
{
case 1:
gp.HeaderFont = new Font("MS ゴシック", 10, FontStyle.Bold);
break;
case 2:
gp.HeaderFont = new Font("MS ゴシック", 10, FontStyle.Italic);
break;
515
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
default:
gp.HeaderFont = new Font("MS ゴシック", 10, FontStyle.Underline);
break;
}
}
コントロールの境界線を表示せずに印刷する
組み込みスタイルEmptyArea の境界線のスタイルを None に設定します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 印刷時のグリッドの枠線を非表示
flex.Styles.EmptyArea.Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.None
' 印刷プレビュー
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog)
' グリッドの枠線を元に戻します
flex.Styles.EmptyArea.Clear(C1.Win.C1FlexGrid.StyleElementFlags.Border)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 印刷時のグリッドの枠線を非表示
flex.Styles.EmptyArea.Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.None;
516
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// 印刷プレビュー
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog);
// グリッドの枠線を元に戻します
flex.Styles.EmptyArea.Clear(C1.Win.C1FlexGrid.StyleElementFlags.Border);
}
印刷プレビュー画面を最大化して表示する
WindowState プロパティを Maximized に設定することで、印刷プレビュー画面を最大化して表示します。(Minimized に設
定した場合は最小化して表示)
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 最大化
flex.PrintParameters.PrintPreviewDialog.WindowState = FormWindowState.Maximized
' 印刷プレビューを表示
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 最大化
flex.PrintParameters.PrintPreviewDialog.WindowState = FormWindowState.Maximized;
// 印刷プレビューを表示
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog);
}
注意:
注意:WindowState プロパティの詳細は、MSDN を参照してください。
印刷プレビュー画面をカスタマイズする
C1FlexGrid における印刷処理は独自のものではなく、.NET Framework によって提供されている各印刷処理を用いてその機
能を実現しています。そのため、PrintPreviewDialog プロパティからグリッドの印刷プレビューの表示に使用される
PrintPreviewDialog への参照を取得し各設定を変更することで、カスタマイズした印刷プレビュー画面を表示できます。
【実行例】 デフォルト
517
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
【実行例】 カスタマイズ
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 印刷プレビューに使用するPrintPreviewDialogを取得
Dim pi As PrintPreviewDialog = flex.PrintParameters.PrintPreviewDialog
' キャプションを設定
pi.Text = "カスタマイズされたプレビュー画面"
' Iconを変更
Dim.png As Bitmap = Image.FromFile("printer.gif")
pi.Icon = System.Drawing.Icon.FromHandle.png.GetHicon())
' 各プロパティを変更します
Dim ts As ToolStrip = pi.Controls(1)
ts.BackColor = Color.LemonChiffon
ts.ForeColor = Color.Blue
ts.Items(0).Visible = False
518
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
ts.Items(1).Text = "拡大/縮小"
ts.Items(1).TextAlign = ContentAlignment.BottomCenter
ts.Items(3).Visible = False
ts.Items(4).Visible = False
ts.Items(5).Visible = False
ts.Items(9).Text = "終わり"
ts.Items(9).BackColor = Color.Cyan
ts.Items(11).Text = "頁"
' 印刷プレビュー
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// 印刷プレビューに使用するPrintPreviewDialogを取得
PrintPreviewDialog pi = flex.PrintParameters.PrintPreviewDialog;
// キャプションを設定
pi.Text = "カスタマイズされたプレビュー画面";
// Iconを変更
Bitmap.png = (Bitmap)Image.FromFile("printer.gif");
pi.Icon = System.Drawing.Icon.FromHandle.png.GetHicon());
// 各プロパティを変更します
ToolStrip ts = (ToolStrip)pi.Controls[1];
ts.BackColor = Color.LemonChiffon;
ts.ForeColor = Color.Blue;
ts.Items[0].Visible = false;
ts.Items[1].Text = "拡大/縮小";
ts.Items[1].TextAlign = ContentAlignment.BottomCenter;
ts.Items[3].Visible = false;
ts.Items[4].Visible = false;
ts.Items[5].Visible = false;
ts.Items[9].Text = "終わり";
ts.Items[9].BackColor = Color.Cyan;
ts.Items[11].Text = "頁";
// 印刷プレビュー
flex.PrintGrid("C1FlexGrid", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog);
}
注意:
注意:PrintPreviewDialog クラス(System.Windows.Forms)の詳細は、MSDN を参照してください。
複数のグリッドを印刷する
出力するグリッドごとに1つの PrintDocumentGridRenderer を作成します。また、ドキュメントのイベントを処理し
て、CurrentPage プロパティの値がPageCount プロパティの値に等しくなるまでレンダラのPrintPage イベントを呼び出しま
す。以下は、フォームに配置されている2つのグリッドを単一の PrintDocument にレンダリングする例です。
【実行例】
519
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private _g1, _g2 As C1.Win.C1FlexGrid.PrintDocumentGridRenderer
Private printDocument1 As Printing.PrintDocument
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex1(1, 1) = "グリッド1"
flex1.Styles.Normal.BackColor = Color.AliceBlue
flex2(1, 1) = "グリッド2"
flex2.Styles.Normal.BackColor = Color.YellowGreen
' PrintDocumentを生成し、イベントハンドラを追加
Me.printDocument1 = New Printing.PrintDocument
AddHandler printDocument1.BeginPrint, AddressOf printDocument1_BeginPrint
520
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
AddHandler printDocument1.PrintPage, AddressOf printDocument1_PrintPage
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 印刷プレビューダイアログを表示
Using dlg As New PrintPreviewDialog()
dlg.Document = Me.printDocument1
dlg.ShowDialog(Me)
End Using
End Sub
Private Sub printDocument1_BeginPrint(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintEventArgs)
' 1つ目のグリッドのレンダラを作成し、印刷オプションを設定
_g1 = New C1.Win.C1FlexGrid.PrintDocumentGridRenderer(flex1)
_g1.Options = C1.Win.C1FlexGrid.PrintGridFlags.FitToPageWidth
' 2つ目のグリッドのレンダラを作成し、印刷オプションを設定
_g2 = New C1.Win.C1FlexGrid.PrintDocumentGridRenderer(flex2)
_g2.Options = C1.Win.C1FlexGrid.PrintGridFlags.FitToPageWidth
End Sub
Private Sub printDocument1_PrintPage(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs)
' 印刷ヘッダの表示
Dim fnt As Font = New Font(Control.DefaultFont.FontFamily, 10.0F,
FontStyle.Regular)
e.Graphics.DrawString("複数グリッドの印刷", fnt, Brushes.Black, 50, 50)
If (_g1.CurrentPage < _g1.PageCount) Then
' 1つ目のグリッドをレンダリングします
_g1.PrintPage(e)
e.HasMorePages = True
ElseIf (_g2.CurrentPage < _g2.PageCount) Then
' 2つ目のグリッドをレンダリングします
_g2.PrintPage(e)
e.HasMorePages = _g2.CurrentPage < _g2.PageCount
End If
End Sub
C# コードの書き方
C#
private C1.Win.C1FlexGrid.PrintDocumentGridRenderer _g1, _g2;
private System.Drawing.Printing.PrintDocument printDocument1;
private void Form1_Load(object sender, EventArgs e)
{
flex1[1, 1] = "グリッド1";
flex1.Styles.Normal.BackColor = Color.AliceBlue;
flex2[1, 1] = "グリッド2";
flex2.Styles.Normal.BackColor = Color.YellowGreen;
// PrintDocumentを生成し、イベントハンドラを追加
this.printDocument1 = new System.Drawing.Printing.PrintDocument();
printDocument1.BeginPrint += new
System.Drawing.Printing.PrintEventHandler(printDocument1_BeginPrint);
printDocument1.PrintPage += new
521
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
}
private void button1_Click(object sender, EventArgs e)
{
// 印刷プレビューダイアログを表示
using (PrintPreviewDialog dlg = new PrintPreviewDialog())
{
dlg.Document = this.printDocument1;
dlg.ShowDialog(this);
}
}
void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs
e)
{
// 1つ目のグリッドのレンダラを作成し、印刷オプションを設定
_g1 = new C1.Win.C1FlexGrid.PrintDocumentGridRenderer(flex1);
_g1.Options = C1.Win.C1FlexGrid.PrintGridFlags.FitToPageWidth;
// 2つ目のグリッドのレンダラを作成し、印刷オプションを設定
_g2 = new C1.Win.C1FlexGrid.PrintDocumentGridRenderer(flex2);
_g2.Options = C1.Win.C1FlexGrid.PrintGridFlags.FitToPageWidth;
}
void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
// 1つ目のグリッドをレンダリングします
if (_g1.CurrentPage < _g1.PageCount)
{
_g1.PrintPage(e);
e.HasMorePages = true;
}
// 2つ目のグリッドをレンダリングします
else if (_g2.CurrentPage < _g2.PageCount)
{
_g2.PrintPage(e);
e.HasMorePages = _g2.CurrentPage < _g2.PageCount;
}
}
注意:
複数のグリッドを同一ページ内に印刷することはできません。
PrintDocument クラス(System.Drawing.Printing)や PrintPreviewDialog クラス(System
ファイル入出力
ファイル入出力に関するタスクを紹介します。
Excel ファイルの保存とロード
グリッドの内容を Excel ファイルに保存するには、SaveExcel メソッド、またはSaveGrid メソッドを使用します。
Excel ファイルの内容をグリッドにロードするには、LoadExcel メソッド、またはLoadGrid メソッドを使用します。
522
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
使用できるオプション(FileFlags 列挙体
列挙体)は以下のとおりです。
FileFlags 列挙体
説明
AsDisplayed
表示された状態の値をファイルに保存します(書式設定とマッピングがある場合はそれらを含む)。
IncludeFixedCells
ファイルの保存またはロード時に固定セルを含めます。
IncludeMergedRanges SaveExcel/LoadExcel メソッドを使用したファイルの保存/ロード時にマージ状態を含めます。
LoadMergedRanges
LoadExcel メソッドを使用したファイルのロード時にマージ状態を含めます。
NoFreezing
SaveExcel/LoadExcel メソッドを使用したファイルの保存/ロード時に行と列をフリーズしませ
ん。
None
デフォルトの設定を使用してファイルの保存とロードを行います。
OpenXm
ファイルを OpenXml(Office 2007)フォーマットで読み込むか、または保存します。
SaveMergedRanges
SaveExcel メソッドを使用したファイルの保存時にマージ状態を含めます。
SelectedRowsOnly
選択されている行だけをファイルに保存します。
VisibleOnly
表示されている行と列だけをファイルに保存します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT * FROM Customers"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
523
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Customers")
' グリッドに接続します
flex.DataSource = ds.Tables("Customers")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' 保存ファイル名:flex.xls
' 保存シート名:Customers
' オプション:保存時に固定セルを含める
flex.SaveExcel("flex.xls", "Customers",
C1.Win.C1FlexGrid.FileFlags.IncludeFixedCells)
MessageBox.Show("ファイルを保存しました")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
' バウンドモード時、Excel ファイルからのロードはできません
flex.DataSource = Nothing
' ロードするファイル名:flex.xls
' ロードするシート名:Customers
' オプション:ロード時に固定セルを含める
flex.LoadExcel("flex.xls", "Customers",
C1.Win.C1FlexGrid.FileFlags.IncludeFixedCells)
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT * FROM Customers";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
// グリッドに接続します
flex.DataSource = ds.Tables["Customers"];
}
private void button1_Click(object sender, EventArgs e)
{
// 保存ファイル名:flex.xls
// 保存シート名:Customers
// オプション:保存時に固定セルを含める
flex.SaveExcel("flex.xls", "Customers",
C1.Win.C1FlexGrid.FileFlags.IncludeFixedCells);
MessageBox.Show("ファイルを保存しました");
}
private void button2_Click(object sender, EventArgs e)
{
524
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// バウンドモード時、Excel ファイルからのロードはできません
flex.DataSource = null;
// ロードするファイル名:flex.xls
// ロードするシート名:Customers
// オプション:ロード時に固定セルを含める
flex.LoadExcel("flex.xls", "Customers",
C1.Win.C1FlexGrid.FileFlags.IncludeFixedCells);
}
注意:
サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Customers テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
Excel ファイルへの保存時、イメージやデータマップ、およびセルボーダーなどの特性は保存されません。
Excel ファイルからのロード時、イメージやセルボーダー、計算式などの特性はロードされません。
バウンドモード時、Excel ファイルからのロードはできません。実行すると例外が発生します。
XMLファイルの保存とロード
ファイルの保存とロード
WriteXml/ReadXml メソッドを使用します。
ReadXml/WriteXml メソッドによる XML ドキュメントの入出力では、データ以外にもプロパティやスタイルなどのグリッド設
定も対象になります。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
525
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
";"
Dim rs As String = "SELECT * FROM Customers"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Customers")
' グリッドに接続します
flex.DataSource = ds.Tables("Customers")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
flex.WriteXml("flex.xml")
MessageBox.Show("ファイルを保存しました")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
flex.ReadXml("flex.xml")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT * FROM Customers";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
// グリッドに接続します
flex.DataSource = ds.Tables["Customers"];
}
private void button1_Click(object sender, EventArgs e)
{
flex.WriteXml("flex.xml");
MessageBox.Show("ファイルを保存しました");
}
private void button2_Click(object sender, EventArgs e)
{
flex.ReadXml("flex.xml");
}
注意:
サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Customers テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
保存される XML ファイルは、C1FlexGrid の独自ファイル形式です。
バウンドモード時にファイルをロードした場合、DataSource プロパティはクリアされます。
関連項目
526
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
レイアウトを保存/ロードする
テキストファイルの保存とロード
SaveGrid/LoadGrid メソッドを使用します。
使用できるオプション(FileFlags 列挙体
列挙体)は以下のとおりです。
FileFlags 列挙体
説明
IncludeFixedCells
ファイルの保存またはロード時に固定セルを含めます。
None
デフォルトの設定を使用してファイルの保存とロードを行います。
SelectedRowsOnly
選択されている行だけをファイルに保存します。
VisibleOnly
表示されている行と列だけをファイルに保存します。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT * FROM Customers"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Customers")
' グリッドに接続します
flex.DataSource = ds.Tables("Customers")
527
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
Handles Button1.Click
' 保存するファイル名:flex.txt
' 列の区切り文字:Tab
' オプション:固定セルを含める
' エンコード:SHIFT-JIS
flex.SaveGrid("flex.txt", _
C1.Win.C1FlexGrid.FileFormatEnum.TextTab, _
C1.Win.C1FlexGrid.FileFlags.IncludeFixedCells,
System.Text.Encoding.GetEncoding(932))
MessageBox.Show("ファイルを保存しました")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e
Handles Button2.Click
' ロードするファイル名:flex.txt
' 列の区切り文字:Tab
' オプション:固定セルを含める
' エンコード:SHIFT-JIS
flex.LoadGrid("flex.txt", _
C1.Win.C1FlexGrid.FileFormatEnum.TextTab, _
C1.Win.C1FlexGrid.FileFlags.IncludeFixedCells,
System.Text.Encoding.GetEncoding(932))
End Sub
As System.EventArgs)
_
As System.EventArgs)
_
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT * FROM Customers";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
// グリッドに接続します
flex.DataSource = ds.Tables["Customers"];
}
private void button1_Click(object sender, EventArgs e)
{
// 保存するファイル名:flex.txt
// 列の区切り文字:Tab
// オプション:固定セルを含める
// エンコード:SHIFT-JIS
C1.Win.C1FlexGrid.FileFormatEnum.TextTab,
C1.Win.C1FlexGrid.FileFlags.IncludeFixedCells,
System.Text.Encoding.GetEncoding(932));
MessageBox.Show("ファイルを保存しました");
}
528
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
private void button2_Click(object sender, EventArgs e)
{
// ロードするファイル名:flex.txt
// 列の区切り文字:Tab
// オプション:固定セルを含める
// エンコード:SHIFT-JIS
flex.LoadGrid("flex.txt",
C1.Win.C1FlexGrid.FileFormatEnum.TextTab,
C1.Win.C1FlexGrid.FileFlags.IncludeFixedCells,
System.Text.Encoding.GetEncoding(932));
}
注意:
サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Customers テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
テキストファイルの保存では、常に表示されている値が格納されます。
バウンドモード時にテキストファイルをロードした場合、DataSource プロパティはクリアされます。
ファイル入出力時に複数のオプションを設定する
SaveExcel/LoadExcel メソッドやSaveGrid/LoadGrid メソッドにてファイルの入出力を行う際、FileFlags 列挙体
列挙体を使用し
て、入出力時のオプションを設定することが可能です。複数のオプションを同時に設定する場合は、Or (C# では ”|”)を使用し
ます。
Visual Basic コードの書き方
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' Excel ファイルへ出力
' マージ状態と固定セルを含めるオプションを同時に指定
flex.SaveExcel("flex.xls", _
"sheet1", _
C1.Win.C1FlexGrid.FileFlags.SaveMergedRanges Or _
C1.Win.C1FlexGrid.FileFlags.IncludeFixedCells)
End Sub
C# コードの書き方
C#
private void button1_Click(object sender, EventArgs e)
{
// Excel ファイルへ出力
// マージ状態と固定セルを含めるオプションを同時に指定
flex.SaveExcel("flex.xls",
"sheet1",
C1.Win.C1FlexGrid.FileFlags.SaveMergedRanges |
C1.Win.C1FlexGrid.FileFlags.IncludeFixedCells);
}
529
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
グリッドを画像として出力する
CreateImage メソッドを使用します。グリッド全体を画像として保存することも、任意のセル範囲のみを画像として保存するこ
とも可能です。下記のコードでは、0行0列目-5行2列目のセル範囲を画像として保存しています。
注意:
注意:サンプルコードでは一般的なMDBサンプル(Nwind.mdb)の Customers テーブルに接続しています。実行の際
にはご利用の環境に適したパス名を設定する必要があります。
【実行例】 イメージ出力例
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' MDBファイルへの接続&データ取得(データセットの作成)
Dim MDBFILE As String = "Nwind.mdbのパス名"
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE +
";"
Dim rs As String = "SELECT * FROM Customers"
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(rs, conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "Customers")
' グリッドに接続します
flex.DataSource = ds.Tables("Customers")
' VisualStyleを設定
flex.VisualStyle = C1.Win.C1FlexGrid.VisualStyle.Office2007Blue
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' カレントセルのカーソルを非表示
flex.Row = -1
flex.Col = -1
' 0行0列目-5行2列目のセルを画像に出力
Dim img As Image
img = flex.CreateImage(0, 0, 5, 2)
' 画像を保存
img.Save("flex.png")
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
530
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
// MDBファイルへの接続&データ取得(データセットの作成)
string MDBFILE = @"Nwind.mdbのパス名";
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MDBFILE + ";";
string rs = "SELECT * FROM Customers";
System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter(rs, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
// グリッドに接続します
flex.DataSource = ds.Tables["Customers"];
// VisualStyleを設定
flex.VisualStyle = C1.Win.C1FlexGrid.VisualStyle.Office2007Blue;
}
private void button1_Click(object sender, EventArgs e)
{
// カレントセルのカーソルを非表示
flex.Row = -1;
flex.Col = -1;
// 0行0列目-5行2列目のセルを画像に出力
Image img;
img = flex.CreateImage(0, 0, 5, 2);
// 画像を保存
img.Save("flex.png");
}
クリップボード
クリップボードの処理に関するタスクを紹介します。
自動クリップボードの機能を有効にする
AutoClipboard プロパテを True に設定(デフォルト:False)することで、C1FlexGrid はクリップボードに関連する標準のキー
ボードコマンドのすべてを自動的に処理します。Excel ファイルとデータをコピー&ペーストでやり取りする際も自動で処理しま
す。
アクション
ショートカットキー
切り取り
[Ctrl+X] または [Shift+Delete]
コピー
[Ctrl+C] または [Ctrl+Insert]
貼り付け
[Ctrl+V] または [Shift+Insert]
削除
[Delete]
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex.AutoClipboard = True
End Sub
531
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.AutoClipboard = true;
}
注意
注意:
フォントなどのスタイルやイメージは、自動クリップボード機能の対象になりません。
データマップやマルチカラムコンボボックスのセルでコピーをした際は、表示されている値がコピーされます。
セル範囲をコピーした場合、非表示になっている行や列も対象になります。
行ヘッダや列ヘッダを含めてコピーする
AutoClipboard プロパテを True に設定ィ(デフォルト:False)することで、C1FlexGrid はクリップボードに関連する標準の
キーボードコマンドのすべてを自動的に処理します。また、ClipboardCopyMode プロパティを設定して行ヘッダや列ヘッダ、
行列ヘッダを含めてコピーすることができます。
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
flex.AutoClipboard = True
' 行ヘッダ、列ヘッダを含めて選択されているデータをコピー
flex.ClipboardCopyMode =
C1.Win.C1FlexGrid.ClipboardCopyModeEnum.DataAndAllHeaders
' 列ヘッダを含めて選択されているデータをコピー
flex.ClipboardCopyMode =
C1.Win.C1FlexGrid.ClipboardCopyModeEnum.DataAndColumnHeaders
' 行ヘッダを含めて選択されているデータをコピー
flex.ClipboardCopyMode =
C1.Win.C1FlexGrid.ClipboardCopyModeEnum.DataAndRowHeaders
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
flex.AutoClipboard = true;
// 行ヘッダ、列ヘッダを含めて選択されているデータをコピー
flex.ClipboardCopyMode =
C1.Win.C1FlexGrid.ClipboardCopyModeEnum.DataAndAllHeaders;
// 列ヘッダを含めて選択されているデータをコピー
flex.ClipboardCopyMode =
C1.Win.C1FlexGrid.ClipboardCopyModeEnum.DataAndColumnHeaders;
// 行ヘッダを含めて選択されているデータをコピー
flex.ClipboardCopyMode =
C1.Win.C1FlexGrid.ClipboardCopyModeEnum.DataAndRowHeaders;
532
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
注意
注意:
フォントなどのスタイルやイメージは、自動クリップボード機能の対象になりません。
データマップやマルチカラムコンボボックスのセルでコピーをした際は、表示されている値がコピーされます。
セル範囲をコピーした場合、非表示になっている行や列も対象になります。
コピー&ペースト処理をコードで実装する
コピー処理では、Clip プロパティからから取得したセルデータの最後に改行コードを追加して、クリップボードに設定します。ま
た、ペースト処理では、クリップボードから取得したデータの最後の改行コードを削除して使用します。ペーストする際に
は、Select メソッドで範囲選択を行った上で Clip プロパティに設定する必要があります。
【実行例】
Visual Basic コードの書き方
Visual Basic
' コピー処理
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' Clip プロパティに改行コードを追加して、
' クリップボードに設定
Clipboard.SetDataObject(flex.Clip & vbCrLf)
MessageBox.Show(flex.Row & "行" & flex.Col & "列-" & _
flex.RowSel & "行" & flex.ColSel & "列目をコピー")
End Sub
' ペースト処理
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
' クリップボードにあるテキストを取得
Dim data As IDataObject = Clipboard.GetDataObject()
533
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
If data.GetDataPresent(DataFormats.Text) Then
Dim str1, str2 As String
' クリップボードからデータを取得
str1 = CType(data.GetData(DataFormats.Text), String)
' クリップボードにある最後の改行コードを削除
str2 = str1.Remove(str1.Length - 2, 2)
' 範囲選択、データを貼り付け
flex.Select(flex.Row, flex.Col, flex.Rows.Count - 1, flex.Cols.Count - 1,
False)
flex.Clip = str2
flex.Select(flex.Row, flex.Col)
End If
End Sub
C# コードの書き方
C#
// コピー処理
private void button1_Click(object sender, EventArgs e)
{
// Clip プロパティに改行コードを追加して、
// クリップボードに設定
Clipboard.SetDataObject(flex.Clip + "\r");
MessageBox.Show(flex.Row + "行" + flex.Col + "列-" +
flex.RowSel + "行" + flex.ColSel + "列目をコピー");
}
// ペースト処理
private void button2_Click(object sender, EventArgs e)
{
// クリップボードにあるテキストを取得
IDataObject data = Clipboard.GetDataObject();
if (data.GetDataPresent(DataFormats.Text))
{
string str1, str2;
// クリップボードからデータを取得
str1 = (string)data.GetData(DataFormats.Text);
// クリップボードにある最後の改行コードを削除
str2 = str1.Remove(str1.Length - 1, 1);
// 範囲選択、データを貼り付け
flex.Select(flex.Row, flex.Col, flex.Rows.Count - 1, flex.Cols.Count - 1,
false);
flex.Clip = str2;
flex.Select(flex.Row, flex.Col);
}
}
注意:
注意:ClipBoard クラスの詳細は、MSDN を参照してください。
非表示になっている行や列を除いてコピーする
AutoClipBoard プロパティを True にした自動クリップボード処理では、セル範囲をコピーした際、非表示になっている行や列
534
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
も対象になります。表示になっている行や列を除いてコピーするには、コードでコピー処理を実装する必要があります。
【実行例】
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' 非表示になっている行や列を除いてコピーする
' クリップボードの自動処理
flex.AutoClipboard = True
' 3行目を非表示
flex.Rows(3).Visible = False
' 2列目を非表示
flex.Cols(2).Visible = False
' 簡単なデータを設定
For i As Integer = 0 To flex.Rows.Count - 1
For j As Integer = 0 To flex.Cols.Count - 1
flex(i, j) = i & ":" & j
Next
Next
End Sub
Private Sub flex_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles flex.KeyDown
' [Ctrl + C]によるコピー
If e.Control = True And e.KeyCode = Keys.C Then
535
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
' 自動処理を行わないため、キー入力を無効
e.Handled = True
' 選択されているセル範囲のCellRangeオブジェクトを取得
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.Selection
' 選択されているセル範囲から
' VisibleプロパティがFalseになっている行や列の値を除いて
' タブ記号や改行コードを追加した文字列にします
Dim StrCopy As String = ""
For i As Integer = cr.r1 To cr.r2
If flex.Rows(i).Visible = True Then
For j As Integer = cr.c1 To cr.c2
If flex.Cols(j).Visible = True Then
StrCopy = StrCopy + flex(i, j)
If j <> cr.c2 Then
StrCopy = StrCopy + vbTab
End If
End If
Next
StrCopy = StrCopy + vbCrLf
End If
Next
' クリップボードに設定
Clipboard.SetDataObject(StrCopy)
MessageBox.Show("コピーしたデータ:" & vbCrLf & StrCopy)
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// クリップボードの自動処理
flex.AutoClipboard = true;
// 3行目を非表示
flex.Rows[3].Visible = false;
// 2列目を非表示
flex.Cols[2].Visible = false;
// 簡単なデータを設定
for (int i = 0; i < flex.Rows.Count; i++)
{
for (int j = 0; j < flex.Cols.Count; j++)
{
flex[i, j] = i + ":" + j;
}
}
}
private void flex_KeyDown(object sender, KeyEventArgs e)
{
// [Ctrl + C]によるコピー
if ((e.Control == true) && (e.KeyCode == Keys.C))
536
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
{
// 自動処理を行わないため、キー入力を無効
e.Handled = true;
// 選択されているセル範囲のCellRangeオブジェクトを取得
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.Selection;
// 選択されているセル範囲から
// VisibleプロパティがFalseになっている行や列の値を除いて
// タブ記号や改行コードを追加した文字列にします
string StrCopy = "";
for (int i = cr.r1; i <= cr.r2; i++)
{
if (flex.Rows[i].Visible == true)
{
for (int j = cr.c1; j <= cr.c2; j++)
{
if (flex.Cols[j].Visible == true)
{
StrCopy = StrCopy + flex[i, j].ToString();
if(j != cr.c2)
{
StrCopy = StrCopy + "\t";
}
}
}
StrCopy = StrCopy + "\n";
}
}
// クリップボードに設定
Clipboard.SetDataObject(StrCopy);
MessageBox.Show("コピーしたデータ:\n" + StrCopy);
}
}
データの実値をコピーする
AutoClipBoard プロパティを True にした自動クリップボード処理では、データマップやマルチカラムコンボボックスのセルでコ
ピーをした際は、表示されている値がコピーされます。実値をコピーするには、GetData メソッドを使用してコードでコピー処理
を実装する必要があります。
【実行例】
537
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
Visual Basic コードの書き方
Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' クリップボードの自動処理
flex.AutoClipboard = True
' データマップの機能を使用
Dim dtMap As Hashtable = New Hashtable()
dtMap.Add("001", "東京")
dtMap.Add("002", "仙台")
dtMap.Add("003", "大坂")
flex.Cols(1).DataMap = dtMap
flex.Cols(1).Caption = "データマップ"
End Sub
Private Sub flex_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles flex.KeyDown
' [Ctrl + C]によるコピー
If e.Control = True And e.KeyCode = Keys.C Then
' 自動処理を行わないため、キー入力を無効
e.Handled = True
' 選択されているセル範囲のCellRangeオブジェクトを取得
Dim cr As C1.Win.C1FlexGrid.CellRange
cr = flex.Selection
' GetDataメソッドを使用して
' 選択されているセル範囲から実値をコピー
Dim StrCopy As String = ""
For i As Integer = cr.r1 To cr.r2
For j As Integer = cr.c1 To cr.c2
StrCopy = StrCopy + flex.GetData(i, j)
If j <> cr.c2 Then
StrCopy = StrCopy + vbTab
End If
Next
538
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
StrCopy = StrCopy + vbCrLf
Next
' クリップボードに設定
Clipboard.SetDataObject(StrCopy)
MessageBox.Show("コピーしたデータ:" & vbCrLf & StrCopy)
End If
End Sub
C# コードの書き方
C#
private void Form1_Load(object sender, EventArgs e)
{
// データの実値をコピーする
// クリップボードの自動処理
flex.AutoClipboard = true;
// データマップの機能を使用
System.Collections.Hashtable dtMap = new System.Collections.Hashtable();
dtMap.Add("001", "東京");
dtMap.Add("002", "仙台");
dtMap.Add("003", "大坂");
flex.Cols[1].DataMap = dtMap;
flex.Cols[1].Caption = "データマップ";
}
private void flex_KeyDown(object sender, KeyEventArgs e)
{
// [Ctrl + C]によるコピー
if ((e.Control == true) && (e.KeyCode == Keys.C))
{
// 自動処理を行わないため、キー入力を無効
e.Handled = true;
// 選択されているセル範囲のCellRangeオブジェクトを取得
C1.Win.C1FlexGrid.CellRange cr;
cr = flex.Selection;
// GetDataメソッドを使用して
// 選択されているセル範囲から実値をコピー
string StrCopy = "";
for (int i = cr.r1; i <= cr.r2; i++)
{
for (int j = cr.c1; j <= cr.c2; j++)
{
StrCopy = StrCopy + flex.GetData(i, j).ToString();
if (j != cr.c2)
{
StrCopy = StrCopy + "\t";
}
}
StrCopy = StrCopy + "\n";
}
// クリップボードに設定
Clipboard.SetDataObject(StrCopy);
MessageBox.Show("コピーしたデータ:\n" + StrCopy);
539
Copyright © GrapeCity inc. All rights reserved. ComponentOne FlexGrid for WinForms
}
}
関連項目
表示値/実値のように2種類のデータを持たせる
540
Copyright © GrapeCity inc. All rights reserved.