Delphi proporciona el potente componente DBGrid para facilitar el diseño de aplicaciones de bases de datos. Pero si solo usamos el componente DBGrid, cada foco (Grid) es solo un simple cuadro de edición de texto, lo que resulta inconveniente para que los usuarios ingresen datos. Delphi también proporciona algunos otros componentes de datos para facilitar la entrada del usuario, como DBComboBox, DBCheckBox y otros componentes, pero estos componentes no son tan poderosos como DBGrid. ¿Puede Delphi, como Visual FoxPRo, permitir que la cuadrícula de enfoque en DBGrid sea otros componentes de datos visuales para comodidad de los usuarios? De hecho, podemos lograr esto insertando otros componentes visuales en DBGrid.
El mecanismo interno de Delphi para procesar DBGrid es hacer flotar un componente en la cuadrícula: el componente DBEdit. La cuadrícula donde ingresa datos es en realidad un componente flotante de DBEdit, y las otras áreas que no se enfocan son solo imágenes. Por lo tanto, insertar otros componentes visuales en DBGrid es hacer flotar un componente visual en la cuadrícula. Por lo tanto, cualquier componente, desde un simple DbCheckBox hasta un cuadro de diálogo complejo, se puede insertar en DBGrid. El siguiente es un paso sobre cómo insertar el componente DBComboBox en DBGrid. Puede insertar otros componentes utilizando el mismo método.
1. Cree un nuevo proyecto en Delphi 4.0.
2. Arrastre los cuatro componentes de DataSource y Table en el tablero del componente de acceso a datos y DBGrid y DBComboBox en el tablero del componente de controles de datos a Form1 respectivamente.
3. Establezca las propiedades de cada componente de la siguiente manera:
planta de configuración de atributos de objeto rcf1
Título de Form1 'Ejemplo de inserción del componente SpinEdit en DBGrid'
Fuente de datos1 Tabla de conjunto de datos1
Tabla1 Nombre de la base de datos DBDEMOS
Nombre de tabla 'profesor.DBF'
Activo Verdadero
DBGrid1 Fuente de datos Fuente de datos1
DBComboBox1 Campo de datos SEXO
Fuente de datos Fuente de datos1
Visible Falso
Artículos de cadenas 'Masculino' | 'Femenino'
Nota: aquí utilicé Teacher.dbf, que refleja el género del personal docente y del personal, que solo puede ser "masculino" o "femenino".
4. El evento DrawDataCell es para dibujar celdas. Cuando el campo correspondiente a la cuadrícula enfocada sea consistente con el campo correspondiente al cuadro combinado, mueva el cuadro combinado a la cuadrícula enfocada.
Haga visible el cuadro combinado para lograr la función de mostrar DBComboBox en la columna especificada de DBGrid. Configure el evento OnDrawDataCell de DBGrid1 de la siguiente manera:
procedimiento TForm1.DBGrid1DrawDataCell(Remitente: TObject; const Rect: TRect; Campo: TField; Estado: TGridDrawState);
comenzar
si (gdFocused en el estado) entonces
comenzar
si (Field.FieldName = DBComboBox1.DataField) entonces
comenzar
DBComboBox1.Izquierda: = Rect.Izquierda + DBGrid1.Izquierda;
DBComboBox1.Top := Rect.Top + DBGrid1.top;
DBComboBox1.Width:= Rect.Derecha - Rect.Izquierda;
DBComboBox1.Height:= Rect.Abajo - Rect.Arriba;
DBComboBox1.Visible: = Verdadero;
fin;
fin;
fin;
5. DBComboBox no se muestra cuando la celda especificada en DBGrid no recibe el foco. Configure el evento OnColExit de DBGrid1 de la siguiente manera:
procedimiento TForm1.DBGrid1ColExit(Remitente: TObject);
comenzar
Si DBGrid1.SelectedField.FieldName = DBComboBox1.DataField entonces
comenzar
DBComboBox1.Visible: = falso;
fin;
fin;
6. Cuando la columna especificada de DBGrid recibe el foco, el evento DrawDataCell solo dibuja la celda y muestra DBComboBox, pero DBComboBox no recibe el foco y la entrada de datos aún se realiza en la celda. Llame a la función API de Windows SendMessage en el evento KeyPress de DBGrid1 para transferir la entrada de datos a DBComboBox, logrando así la entrada de datos en DBComboBox. Así que también configure el evento KeyPress de la siguiente manera:
procedimiento TForm1.DBGrid1KeyPress(Remitente: TObject; var Clave: Char);
comenzar
si (tecla < > chr(9)) entonces
comenzar
si (DBGrid1.SelectedField.FieldName = DBComboBox1.DataField) entonces
comenzar
DBComboBox1.SetFocus;
EnviarMessage(DBComboBox1.Handle, WM_Char, Word(Clave), 0);
fin;
fin;
fin;
El programa pasó la depuración en Windows 98 chino y Delphi 4.015. Espero que este artículo le permita desarrollar aplicaciones de bases de datos de forma más cómoda y rápida.