このグループのサンプルでは、GrapeCity.Documents.Drawing.GcGraphics(GcPdfGraphics など) 上に、GrapeCity.Documents.Drawing.TableRenderer クラスを使用してテーブルを描画する方法を紹介しています。 TableRenderer クラスは、GrapeCity.Documents.Layout.Composition 名前空間のクラスと一緒に使用することで、テーブル、テキスト、図形を含む複雑なレイアウトを描画することができます。 テーブルの描画は、通常、次のような手順で行います。
  1. テーブル用の矩形(LayoutRect)を作成します。方法は 2 つあります。 GrapeCity.Documents.Layout.Composition 名前空間のヘルパークラスを使用するか、 GrapeCity.Documents.Layout 名前空間のクラスを直接使用するかです。
    • Composition 名前空間のヘルパークラスを使用する場合、Surface クラスのオブジェクトを作成後、View クラスのオブジェクトとして任意のサイズのビューを作成します。 そして、View オブジェクトを使用して、テーブルをホストする Visual クラスのオブジェクトを作成します。Visual オブジェクトは、関連する LayoutRect クラスのオブジェクトを含みます。
    • Layout 名前空間のクラスを直接使用する場合、LayoutHost クラスのオブジェクトを作成後、LayoutView クラスのオブジェクトとして任意のサイズのビューを作成します。 そして、LayoutView オブジェクトを使用して、LayoutRect クラスのオブジェクトを作成します。
  2. テーブルの LayoutRect の設定を行います。テーブルの角のうち少なくとも1つは固定する必要があります。 他の角の位置は、テーブルのコンテンツに応じて計算することができます。 もちろん、テーブルの2つの角を固定する(例えば、テーブルの上辺、左辺、右辺を設定する)こともできますし、4つの角すべてを固定することもできます。 TableRenderer クラスのコンストラクタに渡される fixedSides パラメータの値は、角の固定に応じて選択する必要があります。
  3. TableRenderer クラスのオブジェクトを作成し、GcGraphics、LayoutRect、およびその他のパラメータをコンストラクタに渡します。 なお、テーブルの行/列数やテーブルのパディング設定もコンストラクタに渡すことができますが、後で変更することはできません。
  4. 必要に応じて、列幅と行高に追加の設定を適用します。デフォルトの最小列幅と最小行高は、 TableRenderer クラスのコンストラクタに渡すことができます。
  5. また、必要に応じて、テキストフォーマット、パディング設定、その他の調整を行う CellStyle クラスのオブジェクトを作成します。 一般的には、ベースとなるセルスタイルを作成し、それを元により特殊なスタイルを作成する方法が便利です。
  6. TableRenderer.AddCell() メソッドを使用して、用意されたセルスタイルとデータを持つテーブルセルを追加します。 複数の列や行にまたがるセルを追加することもできます。背面や前面のスタイルを使用するセルは、複数の通常セルと重ねて追加するときに役立ちます。
  7. 必要に応じて、TableRenderer.AddMissingCells() メソッドを呼び出して、テーブルの隙間を埋めるために空のセルを追加してください。 そうしないと、空のセルの周りにグリッド線が描画されません。

すべての設定を適用し、すべてのセルを追加したら、LayoutHost オブジェクトを直接操作している場合は、TableRenderer.Render() メソッドを呼び出します。 コンストラクタに渡された GcGraphics オブジェクトにテーブルが描画されます。

Surface オブジェクトと Visual オブジェクトを作成した場合は、いくつかの追加手順を実行する必要があります。

  1. TableRenderer.ApplyCellConstraints() メソッドを呼び出し、テーブルレイアウトを計算します。
  2. Visual オブジェクトに Draw デリゲートをアタッチします。Draw デリゲート内にて、GcGraphics.Transform に Visual.Layer.Surface.BaseTransform を割り当てて、TableRenderer.Render() メソッドを実行します。
  3. これで、1つ以上のテーブルやその他のビジュアルにて Surface を描画することができます。対象の GcGraphics オブジェクトを渡して、 Surface.Render() メソッドを呼び出します。
GrapeCity.Documents.Drawing.TableRenderer のサンプルは以下のとおりです。