Implementación de posicionamiento y coloración de filas en DBGrid en DELPHI
Al operar un sistema de base de datos, descubrí que la fila de datos en el control DBGrid no se podía ubicar y que después de ubicar una determinada fila, la fila actual no se podía marcar claramente (como cambiar el color después de buscar muchos). información, descubrí que Básicamente no hay ninguna introducción a este contenido, incluidos algunos colores dinámicos de la fila superior. Artículos como Se y otros hablan sobre las operaciones realizadas durante la inicialización de datos, pero no hay una función de reposicionamiento después de que se actualiza la fuente de datos, por lo que decidí resolver este problema. Después de una mañana de investigar sobre la ayuda de DELPHI y ver información relevante. Tengo un poco de Xiaocheng, ahora escríbalo y aprenda de él junto con todos mis colegas. Por favor, denme algún consejo sobre cualquier inapropiación.
Primero, busqué en los controles Ttable y Tquery y no encontré ningún método que pueda ubicar directamente la fila de datos. También busqué DBGrid y no encontré ninguna función correspondiente que pueda ubicar directamente una determinada fila de datos. Luego busqué desde la clase. conjunto de datos. Después de esfuerzos continuos, finalmente lo encontré. Encontré un método en TdataSet: GoToBookmark. Este método puede hacer que el puntero de registro en el DBGrid actual apunte a la fila que necesita especificar.
Después de encontrar este método, el problema está solo a medias. El color de la fila de datos señalada por el puntero actual también debe cambiarse, es decir, la fila actualmente seleccionada debe marcarse de manera obvia (excepto la pequeña). y marca antiestética en DBGrid). (Excepto por marcadores obvios) Esto obviamente se implementa en el control DBGrid. Hay un evento OnDrawDataCell en el control DBGrid. La sobrecarga de este método puede cambiar el color de la fila de datos especificada.
El proceso de uso específico es el siguiente:
(1) Colocar filas de datos dinámicamente
//================================================== ================
//Nombre del proceso: DyDbgDataLine
//Autor: haitiano
//Fecha: 2003-02-22
//Función: pasar automáticamente a una fila de datos en el control DBGrid que cumple esta condición según las condiciones especificadas por el usuario
//Parámetros de entrada:
// sValue: el valor de la fila que actualmente debe moverse;
// pestaña: datos de la tabla correspondiente en el DBGrid actual;
// dsr: la fuente de datos que actualmente necesita ser operada;
//Valor de retorno: Ninguno
//Modificar registros:
//================================================== =================
Procedimiento DyDbgDataLine(sValue:string;tab:Ttable;dsr:TDatasource)
var
marcador: TBookMark;
comenzar
//Registra la línea actualmente marcada;
marcador:=self.tab.GetBookmark;
self.tab.primero;
mientras no self.tab.Eof do
comenzar
si self.tab.FieldByName('cpbh').AsString= sValue entonces
comenzar
marcador:=self.tab.GetBookmark;
romper;
fin;
self.tab.Siguiente;
fin;
self.dsr.DataSet.GotoBookmark(puntero(marcador));
Fin;
Descripción: La tabla utilizada se ha vinculado a DBGrid en la interfaz de visualización actual;
(2) Cambie el color para marcar la fila de datos actual
Primero, establezca la propiedad DefaultDrawing de DBGrid en falso; luego llame a la siguiente función en la función de evento OnDrawDataCell:
//================================================== ================
//Nombre del proceso: DrawLine
//Autor: haitiano
//Fecha: 2003-02-22
//Función: cambia el color de la fila especificada en Dbgrid como una marca;
//Parámetros de entrada:
// zdm: nombre del campo;
// Rect: una unidad de la fila a la que se debe ingresar y salir;
// Campo: campo mostrado actualmente;
// estado: el estado de visualización de la fila actual;
// zdz: el valor de la fila que actualmente necesita moverse;
// pestaña: datos de la tabla correspondiente en el DBGrid actual;
// dbg: DBGrid que actualmente necesita ser operado;
//Valor de retorno: Ninguno
//Modificar registros:
//================================================== =================
procedurDrawLine(tab:Ttable;const Rect:Trect;Field:Tfield;state:TgridDrawState;dbg:TDBGrid)
comenzar
si (tab.fieldbyname(zdm).asstring=zdz)entonces
comenzar
dbg.canvas.font.color:=clred;
dbg.canvas.brush.color:=clamarillo;
fin;
dbg.DefaultDrawDataCell(Rect,Campo,Estado);
fin;