Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo utilizar el control TreeView en VB?

¿Cómo utilizar el control TreeView en VB?

Ejemplo de aplicación de control TreeView: vincular TreeView a la base de datos Biblio.mdb

Ejemplo de aplicación: DataTree.vbp

Los ejemplos de código de este capítulo provienen del ejemplo de aplicación datatree. vbp monitoreado en el directorio de muestras.

Puede vincular datos de una base de datos a un control TreeView. El siguiente ejemplo vincula un control TreeView a la base de datos Biblio, que se encuentra en el CD de Visual Basic. Este ejemplo de aplicación utiliza la tabla Editores como primer nivel de nodos del árbol. Si una editorial corresponde a uno o más títulos de libros, esos títulos se agregarán al árbol como hijos de la editorial.

Figura 2.42 Control TreeVew con enlace de datos

El siguiente código utiliza los siguientes objetos:

Biblioteca de objetos de acceso a datos (3.5)

El objeto de formulario llamado "frmDataTree"

El control TreeView llamado "tvwDB"

El control CommandButton llamado "cmdLoad"

La base de datos mdb vinculada al árbol. control de vista

Agregue una referencia al objeto de acceso a datos (DAO 3.0) en el proyecto.

Crea variables a nivel de módulo para bases de datos y objetos de nodo.

En el evento de carga del formulario, utilice la instrucción OpenDatabase para establecer la variable del objeto de la base de datos en la base de datos Biblio.

Utilice el método Add de la colección Nodes para crear un objeto de nodo de nivel superior.

En el evento Click del CommandButton, cree dos variables de conjunto de registros y configúrelas en las tablas Editores y Títulos.

Utilice una instrucción "Hacer hasta" para crear un objeto de nodo para cada editor en la tabla.

Para cada editor, verifique el conjunto de registros de Títulos para ver los campos PubID coincidentes; agregue un nodo secundario para cada coincidencia.

Agregue una referencia al objeto de acceso a datos (DAO 3.5) en el proyecto.

Para vincular una base de datos a un control TreeView, primero debe agregar una referencia a la versión actual del objeto de acceso a datos (DAO).

Crea variables a nivel de módulo para objetos de base de datos y objetos de nodo.

Debido a que necesita acceder a la base de datos Biblio.mdb varias veces en una sesión, ayudará a mejorar la eficiencia si crea un objeto de base de datos a nivel de módulo y mantiene una base de datos abierta. Posteriormente, no es necesario abrir la base de datos para acceder a ella. En la sección Declaraciones del formulario, escriba lo siguiente:

MDbBiblio privado como base de datos

Si desea que la base de datos sea utilizada por otros módulos, puede usar la declaración Pública y cambiar el nombre. la variable para indicar que es global, como gDbBiblio.

Al crear un objeto de nodo, utilice una variable de tipo Nodo en la instrucción Set (como se muestra a continuación).

Atenuar TempNode como nodo

Establecer TempNode = tvwDB. Nodes.Add()

Aunque se pueden crear variables al agregar objetos de nodo, es más eficiente declarar una variable de objeto de nodo a nivel de módulo y usarla para crear todos los objetos de nodo. Escriba nuevamente en la sección de declaración anterior:

Nodo privado como nodo

Utilice la declaración OpenDatabase para establecer la variable de objeto de la base de datos en la base de datos Biblio.

Las variables de la base de datos se pueden inicializar en el evento Load del objeto Form. El código es el siguiente:

Set mDbBiblio = DBEngine. OpenDatabase("BIBLIO.MDB")

Después de inicializar con éxito la variable de objeto de la base de datos, puede acceder libremente a ella en cualquier parte del código del módulo.

Evento de carga de formulario: utilice el método Add de la colección Nodes para crear un objeto de nodo de nivel superior.

En este punto, la variable del objeto de la base de datos se ha inicializado en la base de datos Biblio. Ahora puede crear el primer nodo en el árbol y llamarlo Base de datos abierta. Primero, se debe crear el primer objeto de nodo utilizando el método Agregar de la colección de nodos. También puede utilizar la instrucción Set para asignarlo a la variable de objeto mNode de la siguiente manera:

Set mNode = tvwDB. Nodes.Add()'Crea el primer nodo.

mNodo. Texto = mDbBiblio. Nombre

Tenga en cuenta que en el código anterior, el nodo se asigna a la variable de objeto mNode mediante la instrucción Set cuando se crea. Debido a que la variable mNode ahora contiene el objeto de nodo recién creado, puede asignar valores a las propiedades del objeto de nodo. En el ejemplo anterior, el nombre de la base de datos (es decir, la propiedad Nombre del objeto de la base de datos) se asignó a la propiedad Texto del nuevo nodo.

Evento CommandButton Click: cree dos variables de conjunto de registros y configúrelas en las tablas Editores y Títulos respectivamente.

Este ejemplo de aplicación supone que hay un botón llamado "cmdLoad" y cuando el usuario hace clic en él, dos tablas de la base de datos Biblio se colocan en un control TreeView. Para hacer esto, primero debe declarar dos variables de objeto DAO en el evento Click del botón. La primera variable rsPublishers se utiliza para contener la tabla de editores. La segunda variable rsTitles se utiliza para contener la tabla de títulos. El siguiente código declara estas dos variables y les asigna una tabla usando el método OpenRecordSet:

Dim rsPublishers como un conjunto de registros

Dim rsTitles como un conjunto de registros

Set rsEditores = mDbBiblio. _

OpenRecordset("Editores", dbOpenDynaset)

Establecer rsTitles = mDbBiblio. _

OpenRecordset("titles ", dbOpenDynaset)

Utilice la instrucción Do Until para crear un objeto de nodo para cada editor en la tabla.

Ahora hay dos conjuntos de registros abiertos. Puede recorrer cada conjunto de registros, crear un objeto Nodo y asignar el valor apropiado a la propiedad Texto de ese objeto. Primero, debe recorrer la tabla Editores y crear un objeto de nodo para cada editor en la tabla.

El siguiente código simplificado se puede resumir en una frase: "Procese cada registro uno por uno hasta el final del conjunto de registros: cree una variable de nodo, asigne el valor del campo Título a su propiedad Texto y pasar al siguiente Registro y repetir":

Hasta rsPublishers. Fin del archivo

Establezca mNode = tvwDB. Nodos.Add(1,tvwChild)

mNode. Texto = rsEditores! Nombre

rsEditores. Siguiente paso

Anillo

Tenga en cuenta que se utilizan dos parámetros en el método Agregar anterior. El primer parámetro (1) es el atributo de índice del nodo que queremos agregar al nodo. En otras palabras, quiero que todos los nodos del editor sean hijos del primer nodo (raíz) (creado en el evento Load del formulario). El segundo parámetro toma una constante (tvwChild) que especifica que el nuevo nodo será hijo del nodo numerado "1".

Para cada editor, verifique el conjunto de registros de Títulos para ver los campos PubID coincidentes; agregue un nodo secundario para cada coincidencia.

El código anterior completa el contenido de la tabla Editores en TreeView como primera capa. Sin embargo, también queremos ir un paso más allá y agregar nodos secundarios a cada nodo editor. Cada nodo secundario representa un libro impreso por el editor.

Para hacer esto, si hay una referencia al nodo editor recién creado (mNode), simplemente recorra el conjunto de registros Títulos y verifique el campo PubID de cada registro. Si este campo coincide con el campo PubID en el conjunto de registros de editores, el libro lo publica el editor actual. Sin embargo, antes de agregar un nodo a mNode, también debe asignar la propiedad Índice de mNode a una variable (intIndex), de la siguiente manera:

intIndex = mNode. Índice

Luego puede usar esta variable en el método Agregar, que requiere la propiedad Índice del objeto Nodo utilizado para conectar los nodos secundarios:

Establezca mNode = tvwDB. Nodes.Add(intIndex, tvwChild)

El siguiente código simplificado se puede expresar como "Hasta el final del conjunto de registros: cree un objeto de nodo secundario y asigne el valor del campo Título a su propiedad Texto; pasar al siguiente elemento Grabar y repetir las operaciones anteriores":

Hazlo hasta el final. Fin del archivo

Si rsPublishers! PubID = rsTitles! Luego publique

Establezca mNode = tvwDB. Nodes.Add(intIndex, tvwChild)

mNode. Texto = rsTitles! Propiedad de texto "Título".

Terminará si...

Ring

Código completo

El código anterior muestra cómo llenar una tabla con dos tablas relacionadas como estrategia básica. . Todo el código es el siguiente:

Se debe establecer una referencia a DAO 3.5.

En la sección de declaración, declare las variables de objeto a nivel de módulo:

MDbBiblio privado como base de datos

Nodo privado como nodo

Privado subform _Load()

En el evento Form_Load, establezca la variable de objeto

y cree el primer objeto de nodo del control TreeView.

Establecer mDbBiblio = DBEngine. espacio de trabajo(0). _

OpenDatabase("BIBLIO.MDB")

tvwDB. sort=True

Establezca mNode = tvwDB. Nodos.Add()

mNode. Texto = "Editor"

Mnode. Etiqueta = mdbiblio. "nombre" establece el atributo de etiqueta.

Nodo M. Imagen = "cerrado" 'Establecer imagen.

Propiedades

Conector final

Private Sub cmdLoad_Click()

Declara variables de objeto DAO,

y proporciona Son un récord.

Atenuar rsPublishers como conjunto de registros

Atenuar rsTitles como conjunto de registros

Establecer rsPublishers = mDbBiblio. _

OpenRecordset("Editores", dbOpenDynaset)

Establecer rsTitles = mDbBiblio. _

OpenRecordset("titles ", dbOpenDynaset)

Mover al primer registro.

rsEditores. MoveFirst

La variable "Dim intIndex As Integer" utilizada para la indexación.

Hasta el último registro (EOF): agrega un objeto de nodo,

y usa el campo de nombre como nuevo.

El texto del objeto "nodo".

Hasta rsPublishers. Fin del archivo

Establezca mNode = tvwDB.

Nodos.Add(1,tvwChild)

mNode. Texto = rsEditores! Nombre

MNodo. Tag = "Editor " 'Tabla de identificación de etiquetas.

Dale a la clave un ID único.

mNodo. Key = CInt(rsPublishers!PubID)&" ID "

Establezca la variable intIndex en la propiedad Index del nodo recién creado.

Utilice esta variable para agregar objetos de nodo hijo al nodo actual.

intIndex = mNodo. Índice

Para este registro, busque el conjunto de registros con el título en la tabla de títulos. Aparecen registros

' con el mismo PubID. Si se encuentra dicho registro,

agregue un objeto de nodo al control TreeView y use

Los campos Título, ISBN y Autor del registro encontrado son nuevos.

Asignación de atributos de "objetos de nodo".

Hazlo hasta el final. Fin del archivo

Si rsPublishers! PubID = rsTitles! Luego publique

Establezca mNode = tvwDB.Nodes._

Add(intIndex, tvwChild)

mNode. Texto = rsTitles! Texto "Título".

mNodo. Clave = rsTitles! El ID único del ISBN.

Nodo M. Tag = "Autores " 'Nombre de la tabla.

Nodo M. Imagen = "hoja " 'Imagen.

Terminará si...

El siguiente registro de rsTitles. Título "Siguiente paso".

Timbre

Restablece rsTitles al primer registro del título.

rsTítulos. MoveFirst

Pasar al siguiente registro del editor.

rsEditores. Siguiente paso

Bucle

Conector final

Agregar código

Se puede crear un conjunto de registros "Títulos" más pequeño utilizando sentencias SQL para mejorar este ejemplo. El siguiente código crea un conjunto de registros que contiene solo registros con el mismo valor de PubID:

Set rsTitles = mDbBiblio. OpenRecordset _

("select * from Titles Where PubID = " & _

rsPublishers!PubID)

Entonces el código solo necesita recorrer un conjunto de registros más pequeño y por tanto más eficiente. El código modificado es el siguiente:

Private Sub cmdLoad_Click()

Atenuar rsPublishers como un conjunto de registros

Atenuar rsTitles como un conjunto de registros

Establecer rsPublishers = mDbBiblio. _

OpenRecordset("Publishers", dbOpenDynaset)

Dim intIndex

Hasta rsPublishers. Fin del archivo

Establezca mNode = tvwDB. Nodos.Add(1,tvwChild)

mNode. Texto = rsEditores! Nombre

MNodo. Tag = "Editor" 'Identifica la tabla.

mNodo. Clave = rsEditores! PubID y amplificador" ID "

mNode.

Imagen = "Cerrar"

intIndex = mNode. Índice

Para este registro, utilice una consulta para crear un conjunto de registros para la tabla de títulos.

La condición de consulta es que todos los registros contengan el mismo PubID. Registro de resultados de forma centralizada

Agrega un objeto Nodo al control TreeView para cada registro.

Y utilice los campos Título, ISBN y Autor del registro como campos nuevos.

Asignación de atributos de "objetos de nodo".

Establecer rsTitles = mDbBiblio. OpenRecordset _

("select * from Titles Where PubID = " & _

rsPublishers!PubID)

Hazlo hasta el final. Fin del archivo

Establecer mNode = tvwDB.Nodes._

Add(intIndex, tvwChild)

mNode. Texto = rsTitles! Texto "Título".

mNodo. Clave = rsTitles! El ID único del ISBN.

Nodo M. Tag = "Autores " 'Nombre de la tabla.

Nodo M. Imagen = "smlBook " 'Imagen.

Pasar al siguiente registro en rsTitles.

rsTítulos. Siguiente

Timbre

Se mueve al siguiente registro del editor.

rsEditores. Siguiente paso

Lazo

Adaptador final