Tema: TreeView
Ver Mensaje Individual
  #1  
Antiguo 16-01-2012
Avatar de jejo1984
jejo1984 jejo1984 is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 39
Reputación: 0
jejo1984 Va por buen camino
Y para lazarus me arroja errores las lineas que estan de rojo

Código Delphi [-]
procedure TFrmAuditoriaArbolCausa.CargarTree(Sender: TObject; SQL: String); //Esta rutina permite mostrar los resultados de una consulta 
//en un TreeView. Para ello la consulta debe estar estructurada 
//de la siguiente forma: 
//      Campo 'Codigo', Integer (ID del registro) 
//      Campo 'Descripcion', String (valor a mostrar en el nodo) 
//      Campo 'Padre', Integer (ID del padre del registro)
 //La consulta debe mostrar relaciones padre e hijo, siendo 
//ambos registros de la consulta en cuestión. 
//Los registros sin padre deben tener el valor '0' en su 
//campo 'padre'. De esto se desprende que ningún registro puede 
//tener un 'Codigo'=0.  var   I, X, N: Integer;   Nod: TTreeNode;   NodSuplementario: TTreeNode;   MiPunteroInteger: PunteroInteger; begin    // Cargo la consulta a mostrar en el TreeView   
Query1.SQL.Clear;  
 Query1.SQL.ADD(SQL);   
Query1.Active := True;    //Recorro la consulta registro por registro   
Query1.First;   
for X:=0 to (Query1.RecordCount-1) do     
begin       
I:=Query1.fieldByName('Padre').asinteger;       // Si el campo padre vale 0 (no tiene padre)
if I=0 then 
begin //Agrego un nuevo nodo, que nazca directamente del raíz 
Nod:=TreeView1.Items.Add (nil,Query1.FieldByName('Descripcion').asstring);
New(MiPunteroInteger);
MiPunteroInteger^:=Query1.Fieldbyname('Codigo').asinteger;
nod.Data:=MiPunteroInteger;
nod.Selected :=true;
end
else 
begin //Agrego un nuevo nodo hijo al padre que le corresponda 
//Recorro desde el último nodo al primero, hasta que la propiedad data (donde guardo 
 //el código de cada nodo, sea igual al campo padre del nodo a agregar 
N:=TreeView1.Items.Count -1; 
while PunteroInteger(TreeView1.Items[N].Data)^ <>I do
Dec(N);   //Agrego el nodo hijo           nodSuplementario:=TreeView1.Items.AddChild(TreeView1.Items[N],Query1.FieldByName('Descripcion').asstring); 
New(MiPunteroInteger);
MiPunteroInteger^:= Query1.Fieldbyname('Codigo').asinteger;           nodSuplementario.Data:=MiPunteroInteger;
Nod.selected:=True;
Nod.Expanded:=False;
end;
query1.Next;
end;
end;

Cuando modifico la estructura de los nodos en el treeview, y quiero modificar la estructura padre-hijo de la tabla, ejecuto el siguiente código:

Código Delphi [-]
TFrmAuditoriaArbolCausa.BtnActualizarBDClick(Sender: TObject); 
var   X: Integer;
Nod: TTreeNode; 
begin  // Borro todos los registros de la base de datos que tengan padre y que cumplan las condiciones de filtrado   
Query1.SQL.Clear;
Query1.SQL.Add('DELETE FROM Auditorias_Problemas WHERE Codigo_Auditoria =' + IntToStr(CodigoAuditoria) + 'AND Codigo_Probefecto <> 0');
Query1.ExecSQL; //Cargo el tree en la base de datos
for X:=0 to (treeview1.Items.Count-1) do
begin 
Nod:= Treeview1.Items[X];
Nod.Selected:=true;
if Nod.Parent=nil then
begin //No cargo nada, porque al no tener padre ya se carga al declararlo como problema de la auditoría 
end
else 
begin
Query1.SQL.Clear;
Query1.SQL.Add('INSERT INTO Auditorias_Problemas (Codigo_Problema, Codigo_ProbEfecto, Codigo_Auditoria) VALUES (:a, :b, :c)');
Query1.ParamByName('a').asinteger:= PunteroInteger(nod.data)^;
if (nod.Parent=nil) then
begin
Query1.ParamByName('b').asinteger:=0; 
end 
else
begin
Query1.ParamByName('b').asinteger:=PunteroInteger(Nod.Parent.data)^;
end;
Query1.ParamByName('c').asinteger:=CodigoAuditoria;
Query1.ExecSQL;
end;
end;

Basicamente lo que hace este ultimo código es borrar todo el arbol mostrado y volverlo a cargar como figura en el treeview.

Como veras, lo mas importante es armar los datos de la tabla indicando de que nodo se van a desprender al mostrarlos en un treeview.

Saludos, Enrique Gabriel Baquela.



Mi indica error en la variable Mipuntero...
__________________
No lleves tus conocimiento a la tumba, Enseña a otros lo que sabes...

Última edición por jejo1984 fecha: 16-01-2012 a las 19:21:07.
Responder Con Cita