行または列にアウトラインを追加するには:
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(); // 展開する
または、CollapseOutline
と ExpandOutline
メソッドを直接呼び出し、変更するアウトラインの位置を指定します。
sheet.CollapseOutline(RowOrColumn.Row, 3, 5);
sheet.ExpandOutline(RowOrColumn.Row, 3, 5);
上記のメソッドは、指定された位置にアウトラインが見つからない場合、OutlineNotFoundException
例外が発生します。
アウトラインの削除
sheet.RemoveOutline(RowOrColumn.Row, start, count)
を使用してアウトラインを削除できます。ClearOutlines
メソッドでワークシートからすべてのアウトラインを削除することができます。
自動的な折りたたみと展開
展開されているアウトラインが設定された行が非表示になったり、高さがゼロに設定された場合、そのアウトラインは自動的に折りたたまれます。 逆に、折りたたまれているアウトラインに含まれる行のいずれかが表示されたり、行の高さがゼロ以外に設定されると、アウトラインは自動的に展開されます。
この動作は無効化できませんが、折りたたみや展開が行われた際には、対応するイベントが発生します。
行の高さを調整前
行の高さを調整後
自動削除
- 行または列が削除されると、それに関連するアウトラインも自動的に削除されます。
アウトラインのイベント
アウトラインが追加または削除されたとき、ワークシートの以下の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 を参照してください。
アウトラインインターフェースパネルの非表示
ReoGridSettings.View_AllowShowOutlines
を false
に設定することで、アウトラインのユーザーインターフェースを非表示にできます。
集計行の位置の指定 NEW
ワークシートごとに、集計行(展開ボタン)の位置を「上」または「下」に指定できます。
// 集計行(展開ボタン)を上に設定
sheet.OutlineButtonLocation = OutlineButtonLocation.Top;
// 集計行(展開ボタン)を下に設定
sheet.OutlineButtonLocation = OutlineButtonLocation.Bottom;
この設定はいつでも変更可能ですが、制限により例外が発生する場合があります。詳細は下記をご参照ください。
設定を変更すると、該当ワークシートに追加されたすべてのアウトラインにも反映されます。
グループ行の範囲および集計行の制限について
グループ対象行を2~3行目に設定した場合:
- 集計行(展開ボタン)が上の場合、集計行は1行目に表示されます。
- 集計行(展開ボタン)が下の場合、集計行は4行目に表示されます。
集計行(展開ボタン)を上に設定する場合、1行目を集計行用に確保する必要があるため、グループ対象行は2行目以降にしか指定できません。グループ対象行を1行目に指定すると、例外が発生します。
集計行レベルの操作 NEW
アウトラインのレベル(アウトライン部分に表示される縦または横の1, 2, 3などのボタン)に対して、以下のメソッドを利用して一括で折りたたみや展開ができます。
// 一番外側(左端)のOutlineGroupを取得
var outlineGroup = sheet.GetOutlineGroup(RowOrColumn.Row, 0);
// すべて折りたたむ
outlineGroup.CollapseAll();
// すべて展開する
outlineGroup.ExpandAll();
アウトラインを展開する際、そのアウトラインに含まれる内側のアウトライン(右側の列のアウトライン)も同時に展開されます。 一番外側のみを展開したい場合は、展開後に内側のアウトラインを折りたたむ操作を行ってください。
// 一番左の列(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();