交互行スタイル(しま模様 / banded rows)はスタイルではありません。
セルにも行にも何も書かず、シートが RowBanding を 1 つ持つだけです。
描画のたびに、可視セルについてだけ解決されます。
そのため 104 万行を縞にしてもオブジェクトは 1 個で、並べ替え・フィルタ・行の挿入で崩れません。
基本
using unvell.ReoGrid.Core;
using unvell.ReoGrid.Core.Style;
// シート全体を 1 行おきに薄い青で塗る。オブジェクトは 1 個だけ
ws.Banding = RowBanding.Every(0xFFF2F7FBu);
// 縞をやめる
ws.Banding = null;
RowBanding.Every(color) は「シート全体を 1 行おきに color で塗る」の短縮形です。
FirstColor を空のままにするので、塗られるのは 1 行おきの片側だけ、
残りはシートの背景がそのまま出ます。
範囲と帯の太さ
// 見出し行を外し、2 行ずつの帯を 2 色で塗る
ws.Banding = new RowBanding
{
Range = RangePosition.Parse("A2:F1000"),
FirstColor = 0xFFFFFFFFu,
SecondColor = 0xFFEFF4F9u,
StripeSize = 2,
};
| プロパティ | 既定 | 内容 |
|---|---|---|
Range | null(シート全体) | 縞を掛ける範囲。範囲の先頭行が 1 本目の帯になるので、見出し行を外して指定できます |
FirstColor | null | 1 本目の帯の色(ARGB)。null は塗らない |
SecondColor | null | 2 本目の帯の色(ARGB)。null は塗らない |
StripeSize | 1 | 1 帯あたりの行数。1 が classic な 1 行おき |
Mode | VisibleRow | 非表示行を数に入れるかどうか |
非表示行の扱い
// 既定。非表示行を数えないので、フィルタしても縞が 2 行続かない
var banding = new RowBanding
{
SecondColor = 0xFFEFF4F9u,
Mode = BandingMode.VisibleRow,
};
ws.Banding = banding;
// 行番号に縞を固定する(非表示行も 1 行として数える)
ws.Banding = banding with { Mode = BandingMode.PhysicalRow };
VisibleRow(既定) — 見えている行だけを数えます。フィルタで行が消えても 縞が振り直されるので、同じ色が 2 行続きません。PhysicalRow— 行番号で数えます。縞がその行に貼り付いたままになります。
VisibleRow の数え上げは AxisIndex.HiddenCountBefore(整列済み配列+二分探索、
バージョンでキャッシュ)で行うため、50 万行までスクロールしても走査は発生しません。
塗りの優先順位
上から順に強く、先に決まったところで止まります。
- 条件付き書式 の塗り
- セル自身の塗り — セル・行・列のいずれかが背景色を持っている場合
- 縞
2 番目が「継承済みの実効スタイル」ではなくスタイルの鎖を見ている点が要点です。 実効スタイルはすべてのセルがルートの白を持つため、それで判定すると「背景色を持つセル」が 全セルになってしまいます。鎖に問うことで、わざと白く塗ったセルもちゃんと縞を破れます。
bool striped = ws.HasBanding;
// その行に実際に塗られる色(塗られないなら null)。描画側が使う問い合わせ
uint? fill = ws.BandFillFor(3, 0);
// セル自身・行・列のいずれかが背景色を持っているか。
// 持っていれば縞はそのセルを塗らない
bool own = ws.HasOwnBackground(3, 0);
_ = (striped, fill, own);
行・列の挿入削除
帯は縞を掛けたデータに追随します。範囲の行が挿入・削除されれば Range も動き、
帯の行が全部消えれば帯自体も消えます(Banding が null に戻ります)。
コントロール側
3 つのコントロールすべてに SetRowBanding(RowBanding?) があります。
null を渡せば解除です。
I/O
- reogrid-json:シートの
bandingとして保存されます(V5 の拡張。既定値のキーは省略するので、 縞を使っていないシートの出力は reogrid-web とバイト単位で一致したままです)。 - XLSX:未対応です。Excel は縞をシートの属性ではなくテーブルスタイルの中に持つため、
往復させるならテーブル機能と一緒に実装する必要があります(
StripeSizeがその共有の継ぎ目です)。 XLSX として書き出すと縞は失われます。
Studio で試す
Format ▸ Alternating Rows ▸ Stripe the Whole Sheet / Stripe the Selection /
Stripe the Selection…(色を選ぶ)/ None。