Aquí le mostramos cómo colocar una lista de selección desplegable en un DBGrid. Cree interfaces de usuario visualmente más atractivas para editar campos de búsqueda dentro de un DBGrid, utilizando la propiedad PickList de una columna DBGrid.
Ahora que sabe qué son los campos de búsqueda y cuáles son las opciones para mostrar un campo de búsqueda en DBGrid de Delphi, es hora de ver cómo usar la propiedad PickList de una columna DGBrid para permitir que un usuario elija un valor para un campo de búsqueda de un cuadro de lista desplegable.
Un control DBGrid tiene una propiedad Columns: una colección de objetos TColumn que representan todas las columnas de un control grid. Las columnas se pueden establecer en tiempo de diseño a través del editor de columnas, o mediante programación en tiempo de ejecución. Por lo general, agregará columnas a un DBGird cuando desee definir cómo aparece una columna, cómo se muestran los datos en la columna y acceder a las propiedades, eventos y métodos de TDBGridColumns en tiempo de ejecución. Una cuadrícula personalizada le permite configurar varias columnas para presentar diferentes vistas del mismo conjunto de datos (diferentes órdenes de columnas, diferentes opciones de campo y diferentes colores y fuentes de columna, por ejemplo).
Ahora, cada columna en una cuadrícula está "vinculada" a un campo desde un conjunto de datos que se muestra en la cuadrícula. Además, cada columna tiene una propiedad PickList. La propiedad PickList enumera los valores que el usuario puede seleccionar para el valor del campo vinculado de la columna.
Lo que aprenderá aquí es cómo llenar esa Lista de cadenas con valores de otro conjunto de datos en tiempo de ejecución.
Recuerde que estamos editando la tabla Artículos y que un campo Asunto solo puede aceptar valores de la tabla Temas: la situación ideal para la Lista de selección!
Aquí se explica cómo configurar la propiedad PickList. Primero, agregamos una llamada al procedimiento SetupGridPickList en el controlador de eventos OnCreate del formulario.
procedimiento TForm1.FormCreate (Remitente: TObject);
empezar
SetupGridPickList ('Asunto', 'SELECCIONAR Nombre DE Sujetos');
final;
La forma más fácil de crear el procedimiento SetupGridPickList es ir a la parte privada de la declaración del formulario, agregar la declaración allí y presionar la combinación de teclas CTRL + MAYÚS + C: la finalización del código de Delphi hará el resto:
...
tipo
TForm1 = clase (TForm)
...
procedimiento privado SetupGridPickList (
const Nombre del campo : cuerda;
const sql: cuerda);
público
...
Nota: el procedimiento SetupGridPickList toma dos parámetros. El primer parámetro, FieldName, es el nombre del campo que queremos que actúe como un campo de búsqueda; el segundo parámetro, SQL, es la expresión SQL que usamos para llenar la PickList con posibles valores; en general, la expresión SQL debería devolver un conjunto de datos con un solo campo.
Así es como se ve la SetupGridPickList:
procedimiento TForm1.SetupGridPickList (const FieldName, sql: cuerda);
var
slPickList: TStringList;
Consulta: TADOQuery;
i: entero;
empezar
slPickList: = TStringList.Create;
Consulta: = TADOQuery.Create (self);
tratar
Query.Connection: = ADOConnection1;
Query.SQL.Text: = sql;
Consulta abierta;
// Rellene la lista de cadenasmientras no Query.EOF dobegin
slPickList.Add (Query.Fields [0] .AsString);
Query.Next;
final; //mientras
// coloca la lista en la columna correctapara i: = 0 a DBGrid1.Columns.Count-1 hacer
Si DBGrid1.Columns [i] .FieldName = FieldName entonces comenzar
DBGrid1.Columns [i] .PickList: = slPickList;
Descanso;
final;
finalmente
slPickList.Free;
Query.Free;
final;
final; (* SetupGridPickList *)
Eso es. Ahora, cuando hace clic en la columna Asunto (para ingresar al modo de edición).
Nota 1: de forma predeterminada, la lista desplegable muestra 7 valores. Puede cambiar la longitud de esta lista configurando la propiedad DropDownRows.
Nota 2: nada le impide llenar la PickList de una lista de valores que no provienen de una tabla de base de datos. Si, por ejemplo, tiene un campo que solo acepta nombres de días laborables ('lunes', ..., 'domingo'), puede crear una lista de selección "codificada".
"Uh, tengo que hacer clic en la Lista de selección 4 veces ..."
Tenga en cuenta que cuando desee editar el campo que muestra una lista desplegable, deberá hacer clic en la celda 4 veces para elegir realmente un valor de una lista. El siguiente fragmento de código, agregado al controlador de eventos OnCellClick de DBGrid, imita un golpe a la tecla F2 seguido de Alt + Flecha abajo.
procedimiento TForm1.DBGrid1CellClick (Columna: TColumn);
empezar// Hacer que la lista de selección desplegable parezca más rápidaSi Column.PickList.Count> 0 entonces comenzar
keybd_event (VK_F2,0,0,0);
keybd_event (VK_F2,0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_MENU, 0,0,0);
keybd_event (VK_DOWN, 0,0,0);
keybd_event (VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_MENU, 0, KEYEVENTF_KEYUP, 0);
final;
final;