• Domingo 5 de Mayo de 2024, 18:24

Autor Tema:  Que Me Aconsejais?  (Leído 2715 veces)

ebolo

  • Miembro MUY activo
  • ***
  • Mensajes: 188
    • Ver Perfil
Que Me Aconsejais?
« en: Miércoles 28 de Abril de 2004, 14:18 »
0
Hola.
Os pido consejo por que no sé muy bien que objeto usar. Lo que quiero hacer es, una vez he elegido dentro de un combobox ó listbox una línea (están rellenos de artículos), que me salgan todas las entradas de esos artículos con datos de los mismos.

Los datos los tengo en tablas de access y ahí no tengo problemas de obtenerlos.

El problema es que no sé que usar para mostrar los datos, porque lo suyo es que salga cada entrada en una fila y varias columnas etiquetadas, con los campos que quiero que me aparezcan.
Luego tengo que escoger la fila que deseo para realizar otra serie de acciones.

Estoy intentando usar un listview, pero por si hay otro objeto que me pueda valer.

Saludos y gracias.

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
Re: Que Me Aconsejais?
« Respuesta #1 en: Miércoles 28 de Abril de 2004, 17:29 »
0
Voy a tratar de responder tu problema, de lo poco que entendi:

1). Una de las falencias del combobox, es que simplemente te sirve
     para datos discretos.
     Por ejemplo:
     Para el sexo, utilizas el combobox con

     cmbSexo.additem "Masculino"
     cmbSexo.additem "Femenino"

     Y tu sabes que si selecciona "Masc", el indice es 0,
     y si selecciona "Fem" el indice es 1.

     En este control solo tienes referencia al indice seleccionado, es decir, a
     la posicion del registro seleccionado.

     En el caso de multiples datos, el combobox no te sirve.

2). En tu caso  te sirve el listview o el treeview, ya que ambos tienen
     la particularidad de almacenar "clave" y "texto", de manera que cuando
     selecciones un nodo, puedes saber la clave y con ella, buscar tus datos
     y mostrarlos.

3) Te adjunto un ejemplo.
    En un form, inserta un listview y un treeview y coloca el siguiente codigo:


En el form, en la seccion declaraciones coloca

Dim gNodoTrv As Node
Dim gNodoLst As ListItem


Private Sub Form_Load()
'El cargar el listview es de la forma
'SET var=nombrelst.LISTITEM.ADD(posicion,clave,texto)
'La clave debe comenzar con un caracter siempre
Set gNodoLst = ListView1.ListItems.Add(1, "T1", "Uno")
Set gNodoLst = ListView1.ListItems.Add(2, "T2", "Dos")
Set gNodoLst = ListView1.ListItems.Add(3, "T3", "Tres")

'El cargar el treeview es de la forma
'Para el padre
'SET var=nombretrv.NODES.ADD( , ,clave,texto)
'La clave debe comenzar con un caracter siempre
'Para el hijo
'SET var=nombretrv.NODES.ADD( clavepadre,TVWCHILD ,clavehijo,texto)
'La clave debe comenzar con un caracter siempre

'Inserto los nodos padres
Set gNodoTrv = TreeView1.Nodes.Add(, , "T1", "Uno")
'Con esta instruccion, le digo, que el nodo se abra y muestre los hijos
gNodoTrv.Expanded = True
Set gNodoTrv = TreeView1.Nodes.Add(, , "T2", "Dos")
gNodoTrv.Expanded = True
Set gNodoTrv = TreeView1.Nodes.Add(, , "T3", "Tres")
gNodoTrv.Expanded = True

'Ahora se insertan nodos hijos
Set gNodoTrv = TreeView1.Nodes.Add("T1", tvwChild, "T11", "Hijo 11")
Set gNodoTrv = TreeView1.Nodes.Add("T1", tvwChild, "T12", "Hijo 12")
Set gNodoTrv = TreeView1.Nodes.Add("T2", tvwChild, "T21", "Hijo 21")
Set gNodoTrv = TreeView1.Nodes.Add("T3", tvwChild, "T31", "Hijo 31")
Set gNodoTrv = TreeView1.Nodes.Add("T3", tvwChild, "T32", "Hijo 32")
Set gNodoTrv = TreeView1.Nodes.Add("T3", tvwChild, "T33", "Hijo 33")
End Sub

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
msg = "Clave=" & Item.Key & vbLf
msg = msg & "Texto=" & Item.Text
MsgBox msg
End Sub

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
msg = "Clave=" & Node.Key & vbLf
msg = msg & "Texto=" & Node.Text
MsgBox msg
End Sub


Espero te sirva de referencias.

ebolo

  • Miembro MUY activo
  • ***
  • Mensajes: 188
    • Ver Perfil
Re: Que Me Aconsejais?
« Respuesta #2 en: Miércoles 28 de Abril de 2004, 19:19 »
0
PD.: He tenido que editar para cambiar espacios en blanco por puntos, para que se quedará todo como quería.


Hola Jose Arriagada, gracias por la ayuda. Perdona por la explicación, me dí cuenta también que era difícil de entender. Voy a intentar explicarme de otra manera.
Estoy usando un listview, que al final es lo que he elegido usar.

El listview tiene 7 columnas, lo quiero es añadir en cada columna, que ya están etiquetadas, sus datos, xej: esto es lo que quiero conseguir:

Año..Serie.Tipo....Pdto....Lote...UAct....UIni.
2004...A.....1.......99999...10....1000...10000

es decir añadir todos los datos del mismo producto en la misma fila.
Cada fila se irá rellenado de datos según la consulta de SQL. Cada fila es de un lote.
Luego debe elegir el operario que lote va a usar.

El problema sólo lo tengo en rellenar adecuadamente el listview.

---------------------------------------------------------------
Hasta ahora lo que he conseguido es:

- Añadir los datos del mismo pdto en distinta fila, usando el siguiente código:

ListView1.ListItems.Add(, ,Lote!año).SubItems(1) = Lote!Serie
ListView1.ListItems.Add(, ,Lote!año).SubItems(2) = Lote!Tipo
ListView1.ListItems.Add(, ,Lote!año).SubItems(3) = Lote!Pdto
ListView1.ListItems.Add(, ,Lote!año).SubItems(4) = Lote!Lotes
ListView1.ListItems.Add(, ,Lote!año).SubItems(5) = Lote!Uact
ListView1.ListItems.Add(, ,Lote!año).SubItems(6) = Lote!Uini


Año..Serie.Tipo....Pdto....Lote...UAct....UIni.
2004...A
2004...........1
2004..................99999
2004.............................10    
2004......................................1000  
2004.................................................10000



- ó añadir todos los datos en la 1ª columna
Año..Serie.Tipo....Pdto....Lote...UAct....UIni.
2004
  A
  1
99999    
 10    
1000  
10000

-------------------------------------------------------------

Gracias de nuevo.

ebolo

  • Miembro MUY activo
  • ***
  • Mensajes: 188
    • Ver Perfil
Re: Que Me Aconsejais?
« Respuesta #3 en: Jueves 29 de Abril de 2004, 08:18 »
0
Hola, ya he conseguido solucionarlo, el problema era que no hacia bien las entradas de los subitems al listview.
Lo que he hecho por si alguno le interesa es:

ListView1.ListItems.Add , ,Lote!año
ListView1.ListItems.(ListView1.ListItems.Count).SubItems(1) = Lote!Serie
ListView1.ListItems.(ListView1.ListItems.Count)SubItems(2) = Lote!Tipo
y así sucesivamente hasta llenar las 7 columnas (6 subitems)

Gracias de nuevo.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Que Me Aconsejais?
« Respuesta #4 en: Jueves 29 de Abril de 2004, 09:44 »
0
Hola ebolo.

Yo para estas cosas suelo utilizar un FlexGrid. Para mi usar un listview como un grid para visualizar datos de una tabla tiene un claro inconveniente: desperdicias la potencia que tiene el control (ten en cuenta que sólo utilizas la vista 'report'), potencia que provoca que sea un control más pesado que un flexgrid. Ahora, para gustos hay colores.

Por otro lado, y completando un poco el tema: los combobox tienen una propiedad llamada ItemData que permiten asociar un valor (tipo long) a cada  item del combo, lo cual puede dar muchísimo juego...

Suerte.

ebolo

  • Miembro MUY activo
  • ***
  • Mensajes: 188
    • Ver Perfil
Re: Que Me Aconsejais?
« Respuesta #5 en: Jueves 29 de Abril de 2004, 15:52 »
0
Gracias Brroz.
Lo probaré porque, en principio sólo tengo que mostrar reports, y si con algo menos pesado funciona mejor.

Saludos.