Cita:
Empezado por GerTorresM
Mi pregunta es la siguiente ¿ Existe algún componente de uso libre que me permita mostrar los datos de mi dataset tan como lo hago con el primer CheckListBox, pero que si mostarme me guarde su vez los datos de llave primaria como lo hago con el segundo CheckListBox.?
|
Hay una forma sencilla de hacerlo con el propio TCheckListBox, que alguna vez hemos comentado aquí para usarla con controles y componentes similares (que uilizan TStrings).
La propiedad Items del TCheckListBox es un TStrings, que es donde guardas las cadenas. El TStrings tiene un propiedad Object que está pensada para que puedas guardar un objeto cualquiera, asociado a cada cadena del TStrings. De esta forma cada elemento de la lista puede tener asociado cualquier cosa. Puedes crear un objeto, un record,...
Esa propiedad es un Puntero, con el que tú puedes apuntar a lo que quieras.
En mi caso, lo que he hecho alguna vez, es utilizar ese puntero, no para almacenar objetos, sino para almacenar números (teniendo el cuenta que el tipo que alamacena el puntero es numérico).
De esta forma puedes asociar a ese puntero un número utilizando algo así:
(1) Coloca un TCheckListBox en un formulario.
(2) Rellena unas cuuantas cadenas.
(3) en el evento OnShow coloca esto (para rellenar un número a cada cadena)
Código Delphi
[-]
var
i:Integer;
begin
for i := 0 to (CheckListBox1.Items.Count - 1) do begin
CheckListBox1.Items.Objects[i] := Pointer(i * 100);
end;
Con esto tenemos todas las cadenas con un número asociado (0, 100, 200, 300,...)
(4) En el OnClick del TCheckListBox coloca lo siguiente para comprobar cómo se accede a cada número.
Código Delphi
[-]
var
index:integer;
PInteger: ^Integer;
Valor:Integer;
begin
index := CheckListBox1.ItemIndex;
PInteger := Pointer(CheckListBox1.Items.Objects[Index]);
Valor := Integer(PInteger);
MessageDlg('Este elemento tiene asociiado el valor: ' + IntToStr(Valor), mtInformation, [mbOK], 0);
Si el numero que debes almacenar (clave) cumple con que se pueda almacenar en un tipo Pointer, esto te puede servir y es bastante sencillo.
Un saludo.