1

5 つのタブを持つ PageControl があります。3 つのタブには DBGrid があり、すべて同じ列と DataSource を使用しています。ユーザーがタイトルをクリックすると、適切なタイトルを IndexFieldNames と Bold に変更します。現在、私がやっている...

for i:=0 to dbg1.Columns..Count-1 do
begin
  dbg1.Columns[i].Title.Font.Style:=[];
  dbg2.Columns[i].Title.Font.Style:=[];
  dbg3.Columns[i].Title.Font.Style:=[];
end;
dbg1.Columns[Column.Index].Title.Font.Style:=[fsBold];
dbg2.Columns[Column.Index].Title.Font.Style:=[fsBold];
dbg1.Columns[Column.Index].Title.Font.Style:=[fsBold];
tblCustomer.IndexFieldNames:=Column.Name;

しかし、DBGrid を 1 つだけ持つことができ、PageControl OnChange イベントで必要に応じて親を交換できることがわかりました。

dgb1.Parent:=TabSheet1;

また

dgb1.Parent:=TabSheet2;

これを行うことのマイナス面はありますか?親は、一度に何十回も変更できます。

4

2 に答える 2

0

TClientDataset を使用している場合は、さらに良いことを行うことができます。各タブに 1 つのグリッドを配置し、クローン (メソッド CloneCursor) を使用してインデックスを変更します。その時点で、DBGrid はすべて同じデータセットを指しているわけではなく、それぞれ独自のデータセットを指しており、そこで IndexName (または実行している内容に応じてフィールド) を設定します。

これにより、保守が容易になり (DBGrid を追加するだけで、各 DBGrid が他の DBGrid を混乱させることはありません)、拡張可能になります (さらに多くのインデックスが必要な場合は、クローンを作成するだけです)。

主な欠点は、フィールドを追加する場合、すべてのクローンに適用する必要があることです。これは、アプリケーションが進化している場合に問題になる可能性があります。

もう 1 つの (完全に異なる) オプションは、CodeCentral を見ることです。John Kaster は、タイトルで注文できる DBGrid をアップロードしました。これはかなり前のことですが、まだそこにあるはずです。ただし、クライアント データセットでのみ機能します。ただし、それを変更して、必要に応じて独自のデータセットを追加することもできます。ソース コードに付属していると思います。それが役に立てば幸い。

于 2014-09-29T18:06:40.110 に答える