Pregunta

Estoy escribiendo un control de cuadrícula que mostrará el contenido de cualquiera de una TDataSet o una TObjectList. Cuando sólo se necesita TDataSet apoyo, las cosas son muy simples:

  1. Enlace al conjunto de datos a través de un descendiente TDataLink.
  2. Al pintar los contenidos de la red, puede utilizar los registros almacenados temporalmente en ese TDataLink para pintar lo que necesita.
  3. No hay necesidad de tener objetos individuales en algún lugar de representar las filas de la TDataSet, porque siempre se acaba de pintar las filas en el búfer.

En mi caso, tengo que aceptar datos de algunas otras fuentes también, lo que significaba que tenía que tener un objeto que representa cada fila (también porque el control necesario un poco de estado de fila).

Sin embargo, esto causa problemas con el modelo descrito anteriormente. Porque tengo un objeto que representa cada fila, I deben ser informados cuando se añaden o eliminan de la TDataSet registros. Y yo simplemente no puedo ver cómo hacerlo.

Está claro que no quiero estar enganchando a los eventos de conjuntos de datos; que pueden estar ya en uso y el TDataLink está destinado a ser el mediador entre mi control y el conjunto de datos. Y mis intentos de utilizar el método virtual DataEvent fracasaron, porque simplemente no le dice si se agrega / elimina un registro.

¿Alguna idea?

¿Fue útil?

Solución

Si usted engancha su descendiente TDataLink a un TDataSource que está conectado a la TDataSet se recibe una llamada en el procedimiento RecordChanged cuando cambian los datos.

Puede utilizar los eventos OnDataChange y OnUpdateData de un TDataSource conectado a la TDataSet.

Otros consejos

Parece, usted tiene que derivar su propia clase de la clase de base de datos que se va a usar. Hay que necesitará anular InternalAddRecord, InternalPost, métodos y registros InternalDelete mango adición / eliminación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top