GridViewport は「シートのどこを、どう映すか」を持つビュー側の状態です。
モデル(Worksheet)は表示状態を持ちません。

名前空間は unvell.ReoGrid.Core.Rendering です。
完全仮想化
描画は可視範囲のセルに対してのみ行われます。1,048,576 行のシートでも、 1 フレームで扱うのは画面に映っている数十行だけです。
処理量 ∝ 可視セル数 (シートの寸法には依存しない)
これは描画だけでなく、クリック判定・セル型の描画・条件付き書式の評価にも当てはまります。
生成と描画
using unvell.ReoGrid.Core;
using unvell.ReoGrid.Core.Rendering;
var viewport = new GridViewport(ws);
var graphics = new TraceGraphics();
viewport.Render(graphics, viewWidth: 800, viewHeight: 600);
コントロールを使う場合、ビューポートは内部で管理されるため直接生成する必要はありません。 自前の描画先へ出力したい場合に使います(独自の描画層)。
設定
var viewport = new GridViewport(ws)
{
ShowGridLines = true,
ShowHeaders = true,
ShowImages = true,
ShowSelection = false, // エクスポート用途では選択枠を消す
ShowFillHandle = false,
Zoom = 1.0,
};
viewport.ScrollX = 0;
viewport.ScrollY = 0;
viewport.FrozenRows = 1;
var (firstRow, lastRow) = viewport.VisibleRows(600);
var (firstCol, lastCol) = viewport.VisibleColumns(800);
主なプロパティ
| プロパティ | 内容 |
|---|---|
ScrollX / ScrollY | スクロール位置(論理ピクセル) |
Zoom | 表示倍率(0.1〜4.0) |
FrozenRows / FrozenCols | ウィンドウ枠の固定 |
ActiveCell / Selection | アクティブセルと選択範囲 |
ShowGridLines / ShowHeaders / ShowSelection / ShowImages / ShowOutlines / ShowFillHandle | 表示切り替え |
RowHeaderWidth / ColumnHeaderHeight | ヘッダーの寸法 |
Theme | 配色 |
ContentWidth / ContentHeight | シート全体の描画寸法 |
可視範囲を求める
VisibleRows(viewHeight) と VisibleColumns(viewWidth) が、現在のスクロール位置と
倍率から可視範囲の添字を返します。非表示の行・列は除外されます。
座標系
すべて論理ピクセル(96 DPI 基準)です。
| 層 | 変換 |
|---|---|
| WinForms | RenderScale = DpiScale × Zoom を適用して物理ピクセルへ |
| WPF / Avalonia | DIP がそのまま論理ピクセル。変換は不要 |
| ポイント単位へ変換 |
ハイライト枠
数式の参照ハイライトなど、任意の範囲に枠を描けます。
viewport.SetHighlights(frames); // HighlightFrame(Range, Color) の配列
viewport.ClearHighlights();
モデルとの分離
ビューポートの状態は保存されません。スクロール位置・選択範囲・表示切り替えは 実行時の状態であり、reogrid-json にも XLSX にも書き出されません。
例外はウィンドウ枠の固定・表示倍率・グリッド線/ヘッダーの表示で、これらはシートごとの
設定(Worksheet.View)として reogrid-json にも XLSX(<sheetViews>)にも保存されます。
コントロールは GridViewport.BindToSheetView() でこれを採用し、変更を書き戻します
(ウィンドウ枠の固定)。