1

データセットがenablecontrolsを呼び出しているときに TDBGrid で何が起こるかを知る必要があります。データセットがデータソースに通知していることは理解しましたが、 OnDrawCellイベントの前に dbgrid コンポーネントで何が呼び出されるのかわかりません。

データセットが呼び出しているdb.pasから

  if (FDisableState <> dsInactive) and (FState <> dsInactive) then
    DataEvent(FEnableEvent, 0);

データソースは、表示する必要がある列の数を dbgrid にどのように通知していますか?

4

1 に答える 1

4

DataSource は、データ リンク ( TDataLink) を介してデータベース対応コントロールにリンクされます。すべてのデータ コントロールは、DataLink接続された に応答して信号を送るために を作成しDataSourceます。

のデータリンクは、で作成されたDBGridタイプです。TGridDataLinkTCustomDBGrid.CreateDataLink

これは、後のコール スタックTDataSet.EnableControlsです。

  • TDataSet.EnableControlsコールTDataSet.DataEvent
  • TDataSet.DataEventFDataSources[I]).DataEvent接続されているすべてのデータ ソースの呼び出し、
  • TDataSource.DataEventを呼び出しTDataSource.NotifyDataLinks、これが を呼び出しますTDataSource.NotifyLinkTypes
  • TDataSource.NotifyLinkTypesFDataLinks[I]).DataEvent接続されているすべてのデータ リンクを呼び出します。
  • TDataLink.DataEventが呼び出される前に何が起こったかに応じて、TGridDataLink.DataSetChangedまたはを呼び出します。レコードの編集はデータセットの変更です。フィールド (グリッド内の列) の追加は、(特に) レイアウトの変更です。TGridDataLink.LayoutChangedEnableControls
  • TGridDataLinkまたは、FGrid.DataChanged_FGrid.LayoutChanged
  • TCustomDBGrid.LayoutChanged最終的に を呼び出しTCustomDBGrid.BeginLayout
  • TCustomDBGrid.BeginLayout列 (カウント、タイトルなど) の更新をColumnsプロパティに委任し、 を呼び出しますColumns.BeginUpdate

OnDrawCell将来、すべてのレイアウト変更が行われるときに行われます。

于 2013-03-30T14:18:17.637 に答える