Domanda

Sto scrivendo un controllo griglia che visualizza il contenuto di entrambi un TDataSet o un TObjectList. Se avete solo bisogno di supporto TDataSet, le cose sono abbastanza semplici:

  1. Link al set di dati tramite un TDataLink discendente.
  2. Quando la pittura il contenuto della griglia, è possibile utilizzare i record con buffer in quel TDataLink di dipingere ciò che è necessario.
  3. Non v'è alcuna necessità di avere da qualche parte i singoli oggetti per rappresentare le righe della TDataSet, perché sempre e solo dipingere le righe nel buffer.

Nel mio caso, ho bisogno di accettare i dati provenienti da alcune altre fonti, il che significava che avevo bisogno di avere un oggetto che rappresenta ogni riga (anche perché il controllo richiesto un po 'di stato di fila).

Ma questo causa problemi con il modello sopra descritto. Perché ho un oggetto che rappresenta ogni riga, ho bisogno di essere informato quando i record vengono aggiunti o eliminati dalla TDataSet. E non riesco proprio a vedere come fare questo.

Chiaramente, io non voglio essere aggancio agli eventi del set di dati; essi possono essere già in uso e l'TDataLink è pensato per essere il mediatore tra il mio controllo e il set di dati. E i miei tentativi di utilizzare il metodo virtuale DataEvent fallito, perché semplicemente non dice se viene aggiunto un record / cancellato.

Tutte le idee?

È stato utile?

Soluzione

Se si collega il tuo discendente TDataLink ad un TDataSource che è collegato al TDataSet si riceve una chiamata nella procedura RecordChanged quando le modifiche dei dati.

È possibile utilizzare gli eventi OnDataChange e OnUpdateData di un TDataSource collegato al TDataSet.

Altri suggerimenti

Sembra, si deve derivare la propria classe dalla classe di base di dati che si sta per l'uso. Ci dovrai ignorare InternalAddRecord, InternalPost, i metodi e le registrazioni InternalDelete maniglia aggiunta / eliminazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top