V4 V5

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 基準)です。

変換
WinFormsRenderScale = DpiScale × Zoom を適用して物理ピクセルへ
WPF / AvaloniaDIP がそのまま論理ピクセル。変換は不要
PDFポイント単位へ変換

ハイライト枠

数式の参照ハイライトなど、任意の範囲に枠を描けます。

viewport.SetHighlights(frames);   // HighlightFrame(Range, Color) の配列
viewport.ClearHighlights();

モデルとの分離

ビューポートの状態は保存されません。スクロール位置・選択範囲・表示切り替えは 実行時の状態であり、reogrid-json にも XLSX にも書き出されません。

例外はウィンドウ枠の固定・表示倍率・グリッド線/ヘッダーの表示で、これらはシートごとの 設定Worksheet.View)として reogrid-json にも XLSX(<sheetViews>)にも保存されます。 コントロールは GridViewport.BindToSheetView() でこれを採用し、変更を書き戻します (ウィンドウ枠の固定)。

次に読む

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