DBGridEhを活用したDelphiにおけるグリッド操作の基本

Excelやその他の形式へのエクスポート機能

DBGridEhは、グリッドデータをさまざまなファイル形式にエクスポートする機能を提供しています。そのためには、ユニットDBGridEhImpExpをuses節に追加する必要があります。主なエクスポートクラスは以下の通りです。

  • TDBGridEhExportAsText:プレーンテキスト形式で保存
  • TDBGridEhExportAsUnicodeText:Unicode対応のテキスト出力
  • TDBGridEhExportAsCSV:カンマ区切り形式(CSV)
  • TDBGridEhExportAsHTML:Webブラウザで表示可能なHTML形式
  • TDBGridEhExportAsRTF:リッチテキスト形式
  • TDBGridEhExportAsXLS:従来型Excelブック(.xls)
  • TDBGridEhExportAsXlsx:XMLベースのExcelファイル(.xlsx)

以下は、DBGridEhの内容をXLSX形式でエクスポートするコード例です。

procedure TForm1.ExportToExcelClick(Sender: TObject);
var
  ExportPath: string;
begin
  GetDir(0, ExportPath);
  ExportPath := ExportPath + '\Report.xlsx';
  ExportDBGridEhToXlsx(DBGridEh, ExportPath, []);
  ShowMessage('エクスポートが完了しました。');
end;

複数階層のヘッダー構造の実装

複数行のヘッダーを使用するには、TitleParams.MultiTitleプロパティをTrueに設定します。共通の上位ヘッダーを持つ列は、フィールド名にパイプ記号|を使って定義します。

// 「顧客情報」の下に「名」と「姓」を配置
DBGridEh.Columns[0].Title.Caption := 'Customer|FirstName';
DBGridEh.Columns[1].Title.Caption := 'Customer|LastName';

この記法により、「Customer」が上段の統合見出しとなり、それぞれの項目が下段に表示されます。

フッターでの集計処理

各列の合計、平均、件数などの集計をフッター行に表示できます。まずFooterRowCountを1以上に設定し、対象列のFootersプロパティを編集します。

  • ValueType
    • fvtSum:数値の合計
    • fvtCount:レコード件数
    • fvtMax / fvtMin:最大値・最小値
    • fvtFieldValue:指定フィールドの値を集計(FieldNameにフィールド名を指定)
    • fvtStaticText:固定テキストの表示
  • DisplayFormat:数値フォーマット(例:'#,##0.00'

集計を有効にするには、DBGridEh.SumList.Active := True;を事前に設定してください。

チェックボックス列の使用

ブーリアン値またはBit型のフィールドをチェックボックスとして表示できます。対象列のCheckBoxesプロパティをTrueに設定し、対応するデータセットの該当フィールドがBooleanまたはTFieldType.ftBoolean型であることを確認します。

with DBGridEh.Columns[3] do
begin
  FieldName := 'IsConfirmed';
  CheckBoxes := True;
end;

マスターディテール形式のサブグリッド表示

親テーブルと子テーブルを階層的に表示することが可能です。手順は以下の通りです。

  1. 主グリッド(DBGridEh1)に主データ(例:注文一覧)をバインド。
  2. RowDetailPanel.Active := True;を設定して詳細パネルを有効化。
  3. DBGridEh1のRowDetailDataイベント内で、動的にサブグリッド(DBGridEh2)を生成し、AlginをalClientに設定。
  4. 子グリッドには子データ(例:注文明細)を接続。通常、MemTableEh経由でADOQuery2から取得。
  5. 子側のMemTableEh2において、MasterFieldsDetailFieldsを設定し、外部キー関係を明示。

セル値の取得方法

ユーザーがクリックしたセルの内容を取得するには、CellClickイベントを使用します。

procedure TForm1.DBGridEh1CellClick(Column: TColumnEh);
begin
  // クリックされたセルの表示テキスト
  ShowMessage('値: ' + Column.DisplayText);

  // 特定列(例:単価)の値を取得
  if Assigned(DBGridEh1.DataSource.DataSet.FieldByName('Price')) then
    ShowMessage('単価: ' + DBGridEh1.DataSource.DataSet.FieldByName('Price').DisplayText);
end;

行番号インジケータの表示

左端にレコード番号を表示することで、現在の行位置を視覚的に把握できます。

DBGridEh1.IndicatorOptions := [gioShowRowIndicatorEh, gioShowRecNoEh];
// 10行ごとに番号を表示(間引き表示)
DBGridEh1.IndicatorParams.RecNoShowStep := 10;

行の背景色を交互に変更

読みやすさを向上させるため、奇数行と偶数行で背景色を変えることができます。

DBGridEh1.OddRowColor := clInfoBk;     // 奇数行の色
DBGridEh1.EvenRowColor := $00FFF8F8;   // 偶数行の色(薄い青系)
DBGridEh1.AlternatingRowColors := True;

列のフリーズ(固定)機能

スクロール時にも常に表示させたい列(例:IDや名前)を左側に固定できます。

// 最初の2列を固定
DBGridEh1.FrozenCols := 2;

縦方向の重複値を省略表示

連続する同じ値を持つセルについて、最初の1行目のみ表示し、以降は空白とする設定が可能です。これにより、データのグループ構造が明確になります。

// 列単位で設定
DBGridEh1.Columns[0].ShowGroupTree := True;
// または、データソート後に自動で同値非表示
DBGridEh1.OptionsEh := DBGridEh1.OptionsEh + [dghAutoSortMarking];

タグ: DBGridEh Delphi FireDAC Grid Component Data Export

6月2日 21:24 投稿