複数行ヘッダー

ReoGridは複数行の列ヘッダーをサポートしており、複数行、結合セル、個別のスタイリングを含む複雑なヘッダー構造を作成できます。この機能は、階層的またはグループ化された列ヘッダーを表示する場合に便利です。

Multiple Cell Header

複数行ヘッダーの作成

ExtensionColumnHeader プロパティを介して拡張列ヘッダーにアクセスします:

var extensionHeader = worksheet.ExtensionColumnHeader;

ヘッダー行数の設定

RowCount プロパティまたは SetRowCount メソッドを使用して、ヘッダーの行数(1〜10)を定義します:

// Set 3 header rows
extensionHeader.SetRowCount(3);

// Or use the property
extensionHeader.RowCount = 3;

結果: Multiple Cell Header

注意: 拡張列ヘッダーは1〜10行をサポートします。RowCount を1に設定すると、デフォルトの単一行ヘッダーに戻ります。

ヘッダー行数と合計の高さの取得

int rowCount = extensionHeader.RowCount;
int totalHeight = extensionHeader.TotalHeight; // Total height in pixels of all header rows

ヘッダーセルへのアクセス

複数行ヘッダーのセルは、左上隅の原点(0, 0)からの(行, 列)座標を使用します:

Multiple Cell Header

// Access a cell by row and column index
HeaderCell cell = extensionHeader[0, 0];

// Or via the Cells collection
HeaderCell cell2 = extensionHeader.Cells[1, 3];

HeaderCellプロパティ

プロパティ説明
Textstringヘッダーセルの表示テキスト
StyleHeaderCellStyle外観カスタマイズ用のスタイルオブジェクト
BodyIHeaderBody描画用のカスタムヘッダーボディ
RowIndexintセルの行インデックス(読み取り専用)
ColumnIndexintセルの列インデックス(読み取り専用)
IsValidboolセルが有効か(結合に吸収されていないか)
IsMergedboolセルが結合範囲の一部か
IsMergedStartCellbool結合範囲の左上セルか
MergedStartCellHeaderCell結合の左上セル(結合されていない場合は自身を返す)
CellPositionCellPositionCellPosition 構造体としての位置
RangePositionRangePositionこのセルが結合の一部である場合の範囲
PositionAddressstringアドレス文字列(例:"A1" または結合されている場合 "A1:B2")
TextColorSolidColor?テキスト色(非推奨 — Style.TextColor を使用)
BackColorSolidColor?背景色(非推奨 — Style.BackColor を使用)

セルの結合と結合解除

セルの結合

MergeCells を使用してセルを結合します。パラメーターは:開始行、開始列、行スパン、列スパンです。

extensionHeader.MergeCells(int startRow, int startColumn, int rowSpan, int columnSpan);

例:

// Merge cell (0,0) spanning 3 rows and 1 column
extensionHeader.MergeCells(0, 0, 3, 1);

// Merge from cell (0,1) spanning 1 row and 4 columns
extensionHeader.MergeCells(0, 1, 1, 4);

Multiple Cell Header

セルテキストの設定

extensionHeader[0, 0].Text = "No.";
extensionHeader[0, 1].Text = "Category A";

Multiple Cell Header

完全な複数行ヘッダーの例

複雑な階層ヘッダーを作成する完全な例を示します:

// Set 3 rows
extensionHeader.SetRowCount(3);

// Merge cells to create the hierarchy
extensionHeader.MergeCells(0, 0, 3, 1);     // "No." spans all 3 rows

extensionHeader.MergeCells(0, 1, 1, 4);     // Top-level group 1
extensionHeader.MergeCells(1, 1, 1, 2);     // Mid-level group 1a
extensionHeader.MergeCells(1, 3, 1, 2);     // Mid-level group 1b

extensionHeader.MergeCells(0, 5, 3, 1);     // "Target" spans all 3 rows

extensionHeader.MergeCells(0, 6, 1, 4);     // Top-level group 2
extensionHeader.MergeCells(1, 6, 2, 1);     // Mid-level group 2a (spans 2 rows)
extensionHeader.MergeCells(1, 8, 2, 2);     // Mid-level group 2b (spans 2 rows)

// Set text for all cells
extensionHeader[0, 0].Text = "No.";
extensionHeader[0, 1].Text = "Category A";
extensionHeader[1, 1].Text = "Sub-A1";
extensionHeader[1, 3].Text = "Sub-A2";
extensionHeader[2, 1].Text = "Detail 1";
extensionHeader[2, 2].Text = "Detail 2";
extensionHeader[2, 3].Text = "Detail 3";
extensionHeader[2, 4].Text = "Detail 4";
extensionHeader[0, 5].Text = "Target";
extensionHeader[0, 6].Text = "Category B";

結果: Multiple Cell Header

セルの結合解除

extensionHeader.UnmergeCells(0, 7);

結合状態の確認

var cell = extensionHeader[0, 0];

if (cell.IsMerged)
{
    Console.WriteLine($"Cell is merged. Start cell: {cell.MergedStartCell.PositionAddress}");
}

if (cell.IsMergedStartCell)
{
    Console.WriteLine($"This is the start of a merge spanning {cell.RangePosition}");
}

// Check if a cell contains another
bool contains = cell.Contains(extensionHeader[1, 0]);

ヘッダーセルのスタイリング

各ヘッダーセルには、外観をカスタマイズするための HeaderCellStyle 型の Style プロパティがあります。

HeaderCellStyleプロパティ

プロパティデフォルト説明
TextColorSolidColor?null(システムデフォルト)テキスト色。null に設定すると削除されます。
BackColorSolidColor?null(システムデフォルト)背景色。null に設定すると削除されます。
FontSizefloat10.5f(WinForms)フォントサイズ
FontFamilystring"Arial"(WinForms)フォントファミリー名(WinForms)
FontFontFamilyシステムデフォルト(WPF)フォントファミリー(WPF)
FontStyleFontStylesRegularフォントスタイル(太字、斜体)
FontWeightFontWeightシステムデフォルト(WPF)フォントウェイト(WPFのみ)
TextUnderLineboolfalseテキストに下線を引くか
HorizontalAlignmentReoGridHorAlignCenterテキストの水平揃え
VerticalAlignmentReoGridVerAlignMiddleテキストの垂直揃え
TextWrapModeTextWrapModeNoWrapテキストの折り返しモード
PaddingPaddingValue(空)セルのパディング

例:ヘッダーセルのスタイリング

// Set background color for a category header
extensionHeader[0, 1].Style.BackColor = new SolidColor(Color.LightBlue);

// Set font style for a title cell
extensionHeader[0, 0].Style.FontSize = 12;
extensionHeader[0, 0].Style.FontStyle = FontStyles.Bold;
extensionHeader[0, 0].Style.TextColor = new SolidColor(Color.DarkBlue);

// Set text alignment
extensionHeader[0, 0].Style.HorizontalAlignment = ReoGridHorAlign.Center;
extensionHeader[0, 0].Style.VerticalAlignment = ReoGridVerAlign.Middle;

// Enable text wrapping for long header text
extensionHeader[0, 1].Style.TextWrapMode = TextWrapMode.WordBreak;

// Add padding
extensionHeader[0, 0].Style.Padding = new PaddingValue(4, 2, 4, 2);

セルスタイルのリセット

extensionHeader[0, 0].Style.Reset();

セル間のスタイルコピー

extensionHeader[1, 1].Style.CopyFrom(extensionHeader[0, 1].Style);

WorksheetRangeStyleへの変換

HeaderCellStyle をワークシートセルで使用するための WorksheetRangeStyle に変換します:

WorksheetRangeStyle rangeStyle = extensionHeader[0, 0].Style.ToRangeStyle();

行の高さの調整

各ヘッダー行の高さを個別に調整できます:

// Set height of the first header row
extensionHeader.Rows[0].Height = 40;

// Set height of the second header row
extensionHeader.Rows[1].Height = 25;

// Access row count
int count = extensionHeader.Rows.Count;

マウスイベント

拡張列ヘッダーは、インタラクティブな動作のためのマウスイベントを提供します:

// Mouse events on the entire extension header
extensionHeader.MouseDown += (s, e) =>
{
    Console.WriteLine($"Mouse down at row:{e.RowIndex}, col:{e.ColumnIndex}");
};

extensionHeader.MouseMove += (s, e) =>
{
    Console.WriteLine($"Mouse move at row:{e.RowIndex}, col:{e.ColumnIndex}");
};

extensionHeader.MouseUp += (s, e) =>
{
    Console.WriteLine($"Mouse up at row:{e.RowIndex}, col:{e.ColumnIndex}");
};

ヘッダーマウスイベント引数

プロパティ説明
RowIndexint拡張ヘッダー内の行インデックス(結合セルを無視)
ColumnIndexint拡張ヘッダー内の列インデックス(結合セルを無視)
PositionToColumnint物理的な列に対するマウス位置

個別セルのマウスイベント

HeaderCell も独自のマウスイベントを発火します:

var cell = extensionHeader[0, 0];

cell.MouseDown += (s, e) =>
{
    Console.WriteLine($"Clicked header cell: {e.HeaderCell.Text}");
};

cell.MouseUp += (s, e) =>
{
    // Handle mouse up
};

cell.MouseMove += (s, e) =>
{
    // Handle mouse move
};

HeaderCellMouseEventArgs

プロパティ説明
HeaderCellHeaderCellイベントをトリガーしたヘッダーセル
IsCancelledbooltrue に設定するとイベントをキャンセル

列の選択

複数行の列ヘッダーでは、セルが水平方向に結合されているかどうかに関係なく、常に個別の列を選択できます。選択された列はハイライト色で表示されます:

Multiple Cell Header

結合セル領域の一部の列のみが選択されている場合、それらのセルは部分的にハイライトされます:

Multiple Cell Header

列の非表示

列が非表示の場合、複数行ヘッダー内の非表示列の位置に太い線が表示されます:

Multiple Cell Header for multiple lines

ウィンドウ枠の固定との使用

複数行の列ヘッダーは、通常の列ヘッダーと同様にワークシートのウィンドウ枠固定と連携します。ワークシートがスクロールされても、固定された列は表示されたままです:

Multiple Cell Header

アウトラインとの使用

複数行の列ヘッダーはアウトラインと連携します。列が折りたたまれると、対応するヘッダーセルが非表示になります:

Multiple Cell Header

拡張ヘッダーのリセット

拡張ヘッダーをデフォルト状態にリセットします(すべての結合とテキストを削除):

extensionHeader.Reset();

PartialGridへの変換

拡張ヘッダーを PartialGrid オブジェクトとしてエクスポートします:

// Export all columns
var partialGrid = extensionHeader.ConvertToPartialGrid();

// Export only specific columns
var partialGrid = extensionHeader.ConvertToPartialGrid(new int[] { 0, 1, 2, 3 });

関連トピック


ページの内容は役に立ちましたか?