グループとアウトライン

ReoGrid Outline Sample

行または列にアウトラインを追加するには:

sheet.AddOutline(RowOrColumn.Row, 3, 5);      // 3行目から、5行分のグループ
sheet.AddOutline(RowOrColumn.Column, 5, 2);   // 列のグループ化

AddOutline を呼び出すと、以下の例外が発生する可能性があります。

  • OutlineIntersectedException - 追加しようとするアウトラインが、ワークシート上ですでに存在する他のアウトラインと交差する場合。
  • OutlineAlreadyDefinedException - 追加しようとするアウトラインが、ワークシート上ですでに存在する他のアウトラインと同じである場合。
  • OutlineTooMuchException - アウトラインのレベル数が最大の10に達した場合。
  • OutlineOutOfRangeException - アウトラインを作成するために指定された位置が、ワークシートの利用可能な範囲を超えている場合。(注:アウトラインには折りたたみと展開のためのサムが必要なため、ワークシートの最終行および最終列はどのアウトラインにもグループ化されません。)

アウトラインの折りたたみと展開

AddOutline メソッドはアウトラインのインスタンスを返却します。アウトラインのインスタンスの Collapse および Expand メソッドを利用してアウトラインを折りたたみ、または展開します。

var outline = sheet.AddOutline(RowOrColumn.Row, 3, 5);
outline.Collapse();    // 折りたたむ
outline.Expand();      // 展開する

または、CollapseOutlineExpandOutline メソッドを直接呼び出し、変更するアウトラインの位置を指定します。

sheet.CollapseOutline(RowOrColumn.Row, 3, 5);
sheet.ExpandOutline(RowOrColumn.Row, 3, 5);

上記のメソッドは、指定された位置にアウトラインが見つからない場合、OutlineNotFoundException 例外が発生します。

アウトラインの削除

  • sheet.RemoveOutline(RowOrColumn.Row, start, count) を使用してアウトラインを削除できます。
  • ClearOutlines メソッドでワークシートからすべてのアウトラインを削除することができます。

自動的な折りたたみと展開

もし展開されたアウトラインが付けられている行が隠されたり、行の高さがゼロに設定された場合、そのアウトラインは自動的に折りたたまれます。折りたたまれたアウトラインによってグループ化された行のいずれかが見える場合、または行の高さがゼロ以外に設定されている場合、アウトラインは自動的に展開されます。この動作は無効にすることはできませんが、アウトラインの折りたたみ/展開のイベントが発生します。

行の高さを調整前 ReoGrid Outline Sample

行の高さを調整後 ReoGrid Outline Sample

自動削除

  • 行または列が削除されると、それに関連するアウトラインも自動的に削除されます。

アウトラインのイベント

アウトラインが追加または削除されたとき、ワークシートの以下の2つのイベントが発生します。

sheet.OutlineAdded += (s, e) => MessageBox.Show(
     "アウトラインが " + e.Outline.Start + " から " + e.Outline.End + " まで追加されました");
sheet.OutlineRemoved += (s, e) => MessageBox.Show(
     "アウトラインが " + e.Outline.Start + " から " + e.Outline.End + " まで削除されました");

行の削除により、その行に関連するアウトラインも自動的に削除されるため、OutlineRemoved イベントも発生します。

sheet.DeleteRows(4, 5);

上記のコード実行後、以下のメッセージが表示されます。

「アウトラインが 5 から 3 まで削除されました」

アウトラインとワークシートの両方のインスタンスは、アウトラインの折りたたみ/展開の操作を処理するイベントを提供します。

var outline = sheet.AddOutline(RowOrColumn.Column, 1, 3);

// インスタンスからのイベント
outline.BeforeCollapse += (s, e) => MessageBox.Show("折りたたみ前");
outline.BeforeExpand += (s, e) => MessageBox.Show("展開前");
outline.AfterCollapse += (s, e) => MessageBox.Show("折りたたみ後");
outline.AfterExpand += (s, e) => MessageBox.Show("展開後");

// コントロールからのイベント
sheet.BeforeOutlineCollapse += (s, e) => MessageBox.Show("ワークシート - 折りたたみ前");
sheet.AfterOutlineCollapse += (s, e) => MessageBox.Show("ワークシート - 折りたたみ後");
sheet.BeforeOutlineExpand += (s, e) => MessageBox.Show("ワークシート - 展開前");
sheet.AfterOutlineExpand += (s, e) => MessageBox.Show("ワークシート - 展開後");

ReoGridの他のbefore-eventと同様に、IsCancelled というプロパティがあり、これを true に設定することでイベントのアクションを防ぐことができます。

// IsCancelled を true に設定することで折りたたみまたは展開を防止
sheet.BeforeOutlineCollapse += (s, e) => e.IsCancelled = true;

コントロールのすべてのイベントについては、Events を参照してください。

集計行の位置の指定 NRI

Worksheet 毎に集約行の位置(上または下)を指定できます。

// 集約行(展開ボタン)を上に指定
sheet.OutlineButtonLocation = OutlineButtonLocation.Top;

// 集約行(展開ボタン)を下に指定
sheet.OutlineButtonLocation = OutlineButtonLocation.Bottom;

この設定はいつでも変更できますが、制限による Exception が発生する場合があります。詳細は下記をご参考ください。 設定を変更すると、該当 Worksheet に追加されたすべての Outline も反映されます。

グループ行の範囲および集約行の制限について

グループ対象行を 2 ~ 3 行に設定している場合、

  • 集約行(展開ボタン)が上にあると、集約行は 1 行目にあります。
  • 集約行(展開ボタン)が下にあると、集約行は 4 行目にあります。

集約行(展開ボタン)を上に設定する場合、1 行目を集約行のために確保する必要があるため、グループ対象行を 2 行目以降にしか指定できません。グループ対象行を 1 行目に指定する場合、 Exception が発生します。

集計行レベルの開扉 NRI

アウトラインのレベル(アウトライン部の縦または横の1,2,3と表示しているボタン)に対して、以下のようなメソッドを利用すると開扉できます。

// 一番大項目(一番左)のOutlineGroupを取得
var outlineGroup = sheet.GetOutlineGroup(RowOrColumn.Row, 0);

// すべて閉じる
outlineGroup.CollapseAll();

// すべて展開
outlineGroup.ExpandAll();
group.CollapseAll();

アウトラインを展開する時にそのアウトラインが含む小アウトライン(一つ右の列のアウトライン)も展開されます。 一番左のみのアウトラインを展開したい場合、展開してから1つ右の列を閉じる操作を行ってください。

// 一番左の列(1列目)
var outlineGroup1 = sheet.GetOutlineGroup(RowOrColumn.Row, 0);

// 一列右の列(2列目)
var outlineGroup2 = sheet.GetOutlineGroup(RowOrColumn.Row, 1);

outlineGroup1.ExpandAll();
outlineGroup2.CollapseAll();

一番右の列はアウトラインが存在しない仕様です、取得自体はできますが、CollapseAllもExpandAllも効果なしです。 ワークシートにあるすべての列のアウトラインを展開したい場合、右から2番目の列のアウトラインを取得してすべて展開します。

int levelCount = worksheet.GetOutlineGroupCount(RowOrColumn.Row);

// 右から2番目
var outlineGroup = sheet.GetOutlineGroup(RowOrColumn.Row, levelCount - 2);   // -1 は一番右、-2 は右から2番目
outlineGroup.ExpandAll();

ワークシートにあるすべてのアウトラインを展開したい場合、一番左の列のアウトラインをすべて展開することと同じです。

var outlineGroup = sheet.GetOutlineGroup(RowOrColumn.Row, 0);
outlineGroup.ExpandAll();

集計行のスタイル設定 NRI

アウトラインの展開/折りたたみボタンが存在する行(集計行)に対して、以下のようなセルのスタイルを設定できます。

  • フォント、フォントサイズ
  • 太字、斜字、下線時
  • パッディング(Top/Bottom/Left/Right)
  • 罫線(上下左右)の太さ・色

設定例

// outline を作成
var outline = sheet.RowOutlines.Add(3, 19);

// 罫線のスタイルを設定
outline.GroupRowBorderStyle.Style = BorderLineStyle.BoldSolid;

// 罫線の色を設定
outline.GroupRowBorderStyle.Color = SolidColor.White;

Grouped Row Style

アウトライン毎にスタイルも設定できます。

// Outlineを作成し、スタイルを設定
var newOutline = sheet.RowOutlines.Add(3, 19);
newOutline.GroupRowStyle.Flag |= PlainStyleFlag.BackColor | PlainStyleFlag.TextColor;
newOutline.GroupRowStyle.BackColor = SolidColor.White;
newOutline.GroupRowStyle.TextColor = SolidColor.Black;
newOutline.GroupRowStyle.Flag |= PlainStyleFlag.FontSize | PlainStyleFlag.FontStyleBold;
newOutline.GroupRowStyle.FontSize = 20;
newOutline.GroupRowStyle.Bold = true;

// 既存のOutlineを取得してスタイルを設定
var outline3 = sheet.RowOutlines.Skip(2).FirstOrDefault();
outline3.GroupRowStyle.Flag |= PlainStyleFlag.BackColor | PlainStyleFlag.TextColor;
outline3.GroupRowStyle.BackColor = SolidColor.Coral;
outline3.GroupRowStyle.TextColor = SolidColor.Green;
outline3.GroupRowStyle.Flag |= PlainStyleFlag.FontSize | PlainStyleFlag.FontStyleBold;
outline3.GroupRowStyle.FontSize = 14;
outline3.GroupRowStyle.Bold = true;
outline3.GroupRowStyle.Flag |= PlainStyleFlag.Padding;
outline3.GroupRowStyle.Padding = new PaddingValue(10);

Grouped Row Style

集計行スタイルの注意事項

  • 行スタイルより集計行スタイルの優先度が高いため、集計行スタイルが設定された場合、行スタイルが無効になります。
  • 行スタイルの罫線はアウトサイドのみ対応しています。セルとセルの間の縦の罫線は設定できません。

アウトライン部の非表示

ReoGridSettings.View_AllowShowOutlinesfalse に設定することで、アウトラインのユーザーインターフェースを非表示にできます。

アウトライン部のスタイルの設定

コンポーネントのアウトライン部のスタイルの設定には、以下のAPIを利用できます。

Outline Color API

// 外観スタイルオブジェクトを作成
var style = new ControlAppearanceStyle();

// アウトライングループボタン角のサイズ(0は四角、1以上は丸角四角)
style.OutlineGroupButtonRadius = 2f; 

// アウトライングループボタン数字のフォント名
style.OutlineGroupButtonTextFont = "Arial";

// アウトライングループボタン数字のサイズ
style.OutlineGroupButtonTextSize = 9f;

// アウトライングループボタン罫線の太さ
style.OutlineButtonBorderThickness = 1f;

// アウトラインの罫線の太さ
style.OutlineLineThickness = 0.5f;

// 外観スタイルを適用
reoGridControl.ControlStyle = style;