Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Unhappy Acceder al data de un treeview

Estimados todos.

He revisado varios hilos sobre este tema pero no he logrado hacer que funcione.

Tengo un query que lee de una base que tiene 2 campos, nivel y texto, es un catalogo de ropa
en la cual el nivel indicaria el nodo del arbol y texto , el contenido.

ej :

01 HOMBRES
0101 PANTALONES
010101 CUERO
02 MUJER
0201 VESTIDOS

etc,
etc

El codigo que tengo para leer esto es el siguiente.

Código Delphi [-]
var
    nodo0, nodo1, nodo2, nodo3, nodo4 : TTreeNode;
    n : Integer;

begin
    nodo0 := tv_Catalogo.Items.AddFirst( nil, 'ARTICULOS' );

    Qry_Cata.SQL.Clear;
    Qry_Cata.SQL.Add('Select * from Catalogo');
    Qry_Cata.SQL.Add('Order by Nivel');
    Qry_Cata.Open;
    while not Qry_Cata.Eof do
    begin
        n := Length( Qry_Cata.FieldByName('Nivel').AsString ) ) ;
        case n of
            2 :
            begin
                nodo1      := tv_Catalogo.Items.AddChild( nodo0, Qry_Cata['Texto'] );
                nodo1.Data := Pointer( Qry_Cata.FieldByName('Nivel').AsString);
                nodo1.MakeVisible;
            end;
            4 :
            begin
                nodo2      := tv_Catalogo.Items.AddChild( nodo1, Qry_Cata['Texto'] );
                nodo2.Data := Pointer( Qry_Cata.FieldByName('Nivel').AsString);
                nodo2.MakeVisible;
            end;
            6 :
            begin
                nodo3      := tv_Catalogo.Items.AddChild( nodo2, Qry_Cata['Texto'] );
                nodo3.Data := Pointer( Qry_Cata.FieldByName('Nivel').AsString);
                nodo3.MakeVisible;
            end;
            8 :
            begin
                nodo4      := tv_Catalogo.Items.AddChild( nodo3, Qry_Cata['Texto'] );
                nodo4.Data := Pointer( Qry_Cata.FieldByName('Nivel').AsString);
                nodo4.MakeVisible;
            end;
        end;
        Qry_Cata.Next;
    end;

Funciona bien y arma perfectamente el arbol.

Lo que necesito hacer luego es volver a grabar el arbol en la base de datos, por las modificaciones que pudo haber tenido.

Como hago para obtener el valor "nivel" almacenado en la propiedad data del nodo ?

Gracias.
Responder Con Cita
  #2  
Antiguo 21-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.077
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Una pequeña búsqueda, a ver si te sirve.
Responder Con Cita
  #3  
Antiguo 21-06-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Gracias Casimiro.

Habia visto ya ese post, pero como vi que que en la solucion utiliza una clase definida por el usuario llamada "miclase" y no vi como estaba definida y al no conocer mucho sobre clases, es que decidi escribir la consulta.

Si alguien me puede guiar sobre como crear esa clase, seria de muchisima ayuda.

Mil gracias.
Responder Con Cita
  #4  
Antiguo 21-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola lbidi.

Cita:
Si alguien me puede guiar sobre como crear esa clase, seria de muchisima ayuda.
Revisa este mensaje

Pero en tu caso no es necesario crear una clase para acceder a el valor almacenado en la propiedad Data.

Ejemplo:
Código Delphi [-]
procedure TForm1.tvCatalogoClick(Sender: TObject);
var
  Nodo: TTreeNode;
begin
  Nodo:= tvCatalogo.Selected;
  if Assigned(Nodo) then
   ShowMessage(String(Nodo.Data)); // aquí se accede a Nivel
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 22-06-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Gracias ecfisa por responder. He tratado de hacer como tu indicas, pero no funciona como yo necesito.

Con el codigo que tu pusistes, el resultado que me devuelve es variable y no se porque.

A veces me devuelve el texto de la rama del arbol seleccionada y en otras veces, el texto de otra
rama, pero nunca el nivel que yo necesito.

Muchas gracias.

Seguiremos intentando.

Saludos
Responder Con Cita
  #6  
Antiguo 22-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ibidi.

Me pregunto si el campo Nivel no será numerico...

Proba de este modo:
Código Delphi [-]
...
begin
  nodo0:= tvCatalogo.Items.AddFirst(nil, 'ARTICULOS');
  while not Qry_Cata.Eof do
  begin
    case Length(Qry_Cata.FieldByName('Nivel').AsString) of
      2:begin
          nodo1:= tvCatalogo.Items.AddChild(nodo0, Qry_Cata.FieldByName('Texto').AsString);
          nodo1.Data:= Pointer(Qry_Cata.FieldByName('Nivel').AsInteger);
        end;
      4:begin
          nodo2:= tvCatalogo.Items.AddChild(nodo0, Qry_Cata.FieldByName('Texto').AsString);
          nodo2.Data:= Pointer(Qry_Cata.FieldByName('Nivel').AsInteger);
        end;

        ...

    end;
    Qry_Cata.Next;
  end;
  tvCatalogo.FullExpand;
end;
...

procedure TForm1.tvCatalogoClick(Sender: TObject);
var
  Nodo: TTreeNode;
begin
  Nodo:= tvCatalogo.Selected;
  if Assigned(Nodo) and (Nodo.Level > 0) then
    ShowMessage(IntToStr(Integer(Nodo.Data)));
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



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
Acceder al "data" de un treeview newtron OOP 25 02-06-2012 10:01:52
nodos y la propiedad data en un Treeview david_uh Varios 1 22-09-2007 00:12:31
Missing data provider or data packet mcalmanovici Providers 1 11-09-2007 05:55:15
Como Acceder a un Objeto de un TreeView!! Velia OOP 2 03-08-2007 17:51:37
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 22:24:21.


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