¿Quieres hacer la mejor cuadrícula de edición de datos? A continuación se encuentran las instrucciones para crear una interfaz de usuario para editar campos de búsqueda dentro de un DBGrid. Específicamente, veremos cómo colocar un DBLookupComboBox en una celda de un DBGrid.
Lo que esto hará es recurrir a información de una fuente de datos que se utilizará para completar un cuadro desplegable.
Para mostrar un DBLookupComboBox dentro de una celda de un DBGrid, primero debe hacer que uno esté disponible en tiempo de ejecución ...
Seleccione la página "Controles de datos" en la Paleta de componentes y elija un DBLookupComboBox. Coloque uno en cualquier lugar del formulario y deje el nombre predeterminado de "DBLookupComboBox1". No importa dónde lo coloque, ya que la mayoría de las veces será invisible o flotará sobre la cuadrícula..
Agregue un componente DataSource y DataSet más para "llenar" el cuadro combinado con valores. Coloque un TDataSource (con el nombre DataSource2) y TAdoQuery (nómbrelo AdoQuery1) en cualquier lugar del formulario.
Para que un DBLookupComboBox funcione correctamente, se deben establecer varias propiedades más; son la clave para la conexión de búsqueda:
procedimiento TForm1.FormCreate (Remitente: TObject);
empezar con DBLookupComboBox1 dobegin
DataSource: = DataSource1; // -> AdoTable1 -> DBGrid1
ListSource: = DataSource2;
DataField: = 'AuthorEmail'; // de AdoTable1: se muestra en DBGrid
KeyField: = 'Correo electrónico';
ListFields: = 'Nombre; Email';
Visible: = falso;
final;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'SELECCIONAR Nombre, Correo Electrónico DE Autores';
AdoQuery1.Open;
final;
Nota: Cuando desee mostrar más de un campo en un DBLookupComboBox, como en el ejemplo anterior, debe asegurarse de que todas las columnas estén visibles. Esto se hace configurando la propiedad DropDownWidth.
Sin embargo, verá que inicialmente, debe establecer esto en un valor muy grande, lo que hace que la lista eliminada sea demasiado amplia (en la mayoría de los casos). Una solución alternativa es establecer el ancho de pantalla de un campo particular que se muestra en una lista desplegable.
Este código, ubicado dentro del evento OnCreate para el formulario, asegura que tanto el nombre del autor como su correo electrónico se muestren dentro de la lista desplegable:
AdoQuery1.FieldByName ('Correo electrónico'). DisplayWidth: = 10;
AdoQuery1.FieldByName ('Nombre'). DisplayWidth: = 10;
AdoQuery1.DropDownWidth: = 150;
Lo que nos queda por hacer es hacer que un cuadro combinado se desplace sobre una celda (en modo de edición), mostrando el campo AuthorEmail. Primero, debemos asegurarnos de que DBLookupComboBox1 se mueva y se dimensione sobre la celda en la que se muestra el campo AuthorEmail.
procedimiento TForm1.DBGrid1DrawColumnCell
(Remitente: TObject;
const Rect: TRect;
DataCol: entero;
Columna: TColumn;
Estado: TGridDrawState);
comenzar (gdFocused en Estado) entoncesbeginif (Column.Field.FieldName = DBLookupComboBox1.DataField) entonces con DBLookupComboBox1 hacer
empezar
Izquierda: = Rect.Left + DBGrid1.Left + 2;
Arriba: = Rect.Top + DBGrid1.Top + 2;
Ancho: = Rect. Derecha - Rect. Izquierda;
Ancho: = Rect. Derecha - Rect. Izquierda;
Altura: = Rect.Bottom - Rect.Top;
Visible: = Verdadero;
final;
final
final;
Luego, cuando salimos de la celda, tenemos que ocultar el cuadro combinado:
procedimiento TForm1.DBGrid1ColExit (Remitente: TObject);
comenzar DBGrid1.SelectedField.FieldName = DBLookupComboBox1.DataField luego
DBLookupComboBox1.Visible: = False
final;