SMART datagridグリッドはデータセット、行のモデル、グリッドビューの三つのレイヤーで分離されていて、 内部のイベントによって緩く繋がっている。 特に、グリッドはデータセットに直接繋がるのではなく、行のモデルを通して間接的に繋がる。 また、行のモデルはデータセットのデータ行達だけではなく、 グリッドを構成する他の行達を構成してグリッドに表示されるようにする。
行のモデルはグリッドとツリーによって各々GridRowSourceとTreeRowSource客体に具現されて、 GridBase.rowSourceプロパティーで接近する。 グリッド生成の時に基本rowSourceが生成されるが、このプロパティーを通して外部に新しく生成された客体で再指定することができる。 また、重要なところ、複数のグリッドが一つのrowSource客体を共有することができる。
Grid-2はGrid-1のrowSourceを自身のrowSourceに設定する。
grdMain2.setRowSource(grdMain.rowSource());
行のモデルはソーティング、フィルタリング、グルーピング、ページングが適用される対象で、 現在行の位置の情報を持つ。 つまり、rowSourceを共有するグリッド達は同一であるソーティング、フィルタリングなどが反映されて、 同じ行の位置にフォーカスが表示される。 しかし、各グリッドは個別的モデルを持つことができて、フォーカスを持つカラムが違うことができる。
従って、Grid-2のフォーカス行はGrid-1のフォーカス行が変更になる時に一緒に変更になる。 反対の場合も同じである。しかし、フォーカスカラムは二つのグリッドが違う位置に設定されることができる。 マウスやキーボードスクロールなどで確認できる。
また、行の修正や挿入、追加などは行のモデルの並みで行われるので、 一方のグリッドで編集が始まれば他のグリッドにも状態がすぐ反映される。 Insertキーなどで一方のグリッドで行の修正を始めるか、 Grid-2 "数量"カラムのフィルターを適用してみる。 (説明した通り、ソーティング、フィルタリング、グルーピング、ページングがグリッドではなく行のモデルに適用されるので 各々の実行UIは一つのグリッドでだけ可能であるようにしなければならない。)