Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   grid con trecord o clase asociada (https://www.clubdelphi.com/foros/showthread.php?t=75012)

JXJ 24-07-2011 23:30:39

grid con trecord o clase asociada
 
hola

una duda ando necesitando
hacer que una celda de un grid.

pueda yo asosicarle un trecord
o una clase

con una clase se me hace facil asi



type
TNodeData = class
sText : string;

iIDpro: integer;
iIdalmacen:intger
snombrealmacen:string;
end;


y en cada celda solo se debe de mostrar el sText y al dar clic
en esa celda poder acceder a el iID: integer; stexto2:string;
por que necesito acceder a su id para hacer un query que me de
los datos asociados a esa clase o trecord

algo asi. el grid

========================================
pepsi | coca | fanta | agua | manzanita|
=================================
papas|cacahuates|chicharroes|fritos |frituras |
=======================================
papel|servilletas| seviletas 100| rollo pa|klenex |
========================================

asi al seleccionar coca. puedo obtener el id de ese producto
y el iIdalmacen:intger y el snombrealmacen:string;
eso es algo que no se como asociar el contenido de cada celda

con una clase o un trecord

el treeview si se puede. also asi con su propiedad .Data
me parece que el virtual treeview tambien se puede.
solo que no se como usarlo. no he aprendido.
y que en delphi 2010 no me sirve
todos los demos me dan error de memoria . se come mucha memoria

muchas gracias.

Caral 24-07-2011 23:36:42

Hola
Es un StringGrid ?.
Saludos

ecfisa 25-07-2011 18:56:04

Hola.

Proba si te sirve de este modo:
Código Delphi [-]
...
implementation

type
 TNodeData = class
    sText : string;
    iIDpro: Integer;
    iIdAlmacen:Integer;
    SNombreAlmacen:string;
  end;

(* Cargar datos de prueba *)
procedure TForm1.FormShow(Sender: TObject);
var
  c,f,x: Integer;
  ND: TNodeData;
begin
  x:= 1;
  for f:= StrGrd.FixedRows to StrGrd.RowCount-1 do
   for c:= StrGrd.FixedCols to StrGrd.ColCount-1 do
   begin
     ND:= TNodeData.Create;
     ND.sText:= IntToStr(f)+':'+IntToStr(c);
     ND.iIDpro:= x;
     ND.iIdAlmacen:= x;
     ND.SNombreAlmacen:= 'Almacen:'+IntToStr(f)+':'+IntToStr(c);
     StrGrd.Cells[c,f]:= ND.SNombreAlmacen;
     StrGrd.Objects[c,f]:= ND;
     Inc(x);
   end;
end;

(* mostrar datos de objeto asociado a celda *)
procedure TForm1.StrGrdClick(Sender: TObject);
begin
  with TNodeData(StrGrd.Objects[StrGrd.Col,StrGrd.Row]) do
   ShowMessage(sText+#10#13+
               IntToStr(iIDpro)+#10#13+
               IntToStr(iIdAlmacen)+#10#13+
               SNombreAlmacen)
end;

...

(* liberar memoria *)
procedure TForm1.FormDestroy(Sender: TObject);
var
  f,c: Integer;
begin
  for f:= StrGrd.FixedRows to StrGrd.RowCount-1 do
   for c:=  StrGrd.FixedCols to StrGrd.ColCount-1 do
     StrGrd.Objects[c,f].Free;
end;

Saludos.

JXJ 26-07-2011 21:53:45

Cita:

Empezado por ecfisa (Mensaje 407351)
Hola.

Proba si te sirve de este modo:

Código Delphi [-]
...
implementation

type
TNodeData = class
sText : string;
iIDpro: Integer;
iIdAlmacen:Integer;
SNombreAlmacen:string;
end;

(* Cargar datos de prueba *)
procedure TForm1.FormShow(Sender: TObject);
var
c,f,x: Integer;
ND: TNodeData;
begin
x:= 1;
for f:= StrGrd.FixedRows to StrGrd.RowCount-1 do
for c:= StrGrd.FixedCols to StrGrd.ColCount-1 do
begin
ND:= TNodeData.Create;
ND.sText:= IntToStr(f)+':'+IntToStr(c);
ND.iIDpro:= x;
ND.iIdAlmacen:= x;
ND.SNombreAlmacen:= 'Almacen:'+IntToStr(f)+':'+IntToStr(c);
StrGrd.Cells[c,f]:= ND.SNombreAlmacen;
StrGrd.Objects[c,f]:= ND;
Inc(x);
end;
end;

(* mostrar datos de objeto asociado a celda *)
procedure TForm1.StrGrdClick(Sender: TObject);
begin
with TNodeData(StrGrd.Objects[StrGrd.Col,StrGrd.Row]) do
ShowMessage(sText+#10#13+
IntToStr(iIDpro)+#10#13+
IntToStr(iIdAlmacen)+#10#13+
SNombreAlmacen)
end;

...

(* liberar memoria *)
procedure TForm1.FormDestroy(Sender: TObject);
var
f,c: Integer;
begin
for f:= StrGrd.FixedRows to StrGrd.RowCount-1 do
for c:= StrGrd.FixedCols to StrGrd.ColCount-1 do
StrGrd.Objects[c,f].Free;
end;





Saludos.


hola.
muchas gracias ecfisa
esto es lo que necesito.

estoy revisandolo

unas preguntas mas.
¿el stringgrid tambien soporta records en vez de clases?

¿que otros componentes soportan objects, clases y records de forma
semejante a este ejemplo?

muchas gracias ecfisa

ecfisa 26-07-2011 22:34:32

Hola JXJ.
Cita:

¿el stringgrid tambien soporta records en vez de clases?
Es válido hacer:
Código Delphi [-]
var
   s: string;
begin
  s:= 'Hola';
  StringGrid1.Objects[StrGrd.Col,StrGrd.Row]:= TObject(s);
  ShowMessage(string(StringGrid1.Objects[StrGrd.Col,StrGrd.Row]))
end;
Pero hasta donde yo sé, no se permite un cast a una estructura compuesta tipo registro.



Cita:

¿que otros componentes soportan objects, clases y records de forma semejante a este ejemplo?
Que puedan almacenar objetos son varios, algunos que recuerdo:
Código:

TObjecList
TStringList
TComboBox1
TListBox
TMemo
TRadioGroup
TRichEdit
TTreeView

Un saludo.


La franja horaria es GMT +2. Ahora son las 16:20:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi