Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 31-12-2007
egbaquela egbaquela is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
egbaquela Va por buen camino
Smile TreeView

Hola Lenocb: yo tuve que hacer un sistema que hacia algo parecido, mostraba los datos de una tabla en un treeview y, modificando la estructura del treeview, modificaba las relaciones padre-hijo en la tabla. Esta hecho para un sistema que gestiona auditorías y permite realizar análisis de arbol de causas.

Te paso a continuación el código para mostrar la tabla en el treeview con comentarios:

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 [-]
procedure 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.

Http://enrique-gabirel-baquela.neurona.com

Última edición por egbaquela fecha: 20-02-2008 a las 13:24:20.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar un treeview a otro treeview mierda OOP 0 26-07-2006 12:29:17
treeview kiringui OOP 4 18-07-2006 11:52:38
Ver Mi Pc en un TreeView gilberto_1126 API de Windows 2 22-06-2004 01:07:36
Como utilizar el Treeview, desplegar la info del arbol binario al treeview leo21 Varios 2 08-04-2004 22:47:30
Como utilizar el Treeview, desplegar la info del arbol binario al treeview leo21 OOP 1 08-04-2004 22:42:44


La franja horaria es GMT +2. Ahora son las 18:18:49.


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
Copyright 1996-2007 Club Delphi