Red de conocimiento del abogados - Ley de patentes - Cómo utilizar el control TreeView en VB.

Cómo utilizar el control TreeView en VB.

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

Ejemplo de aplicación: DataTree.vbp

El ejemplo de código de este capítulo proviene del ejemplo de aplicación DataTree .vbp que aparece en el directorio de muestras.

Los datos de la base de datos se pueden vincular al control TreeView. El siguiente ejemplo vincula un control TreeView a la base de datos Biblio, que se puede encontrar 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 nodos secundarios de esa editorial.

Figura 2.42 Control TreeVew vinculado a datos

El siguiente código utiliza los siguientes objetos:

Biblioteca de objetos de acceso a datos (3.5)

Objeto de formulario llamado "frmDataTree"

Control TreeView llamado "tvwDB"

Control CommandButton llamado "cmdLoad"

La base de datos mdb está vinculada al control TreeView<. /p>

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

Crea variables a nivel de módulo para objetos Base de datos y Nodo.

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

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

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

Utilice una instrucción "Hacer hasta" para crear un objeto 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 la base de datos al control TreeView, primero debe agregar una referencia a la versión actual del Cita del objeto de acceso a datos (DAO).

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

Dado que es necesario acceder a la base de datos Biblio.mdb varias veces en una sesión, si crea un objeto de base de datos a nivel de módulo , mantener un Abrir la base de datos ayudará a mejorar la eficiencia. A partir de entonces, no es necesario abrir la base de datos para acceder a ella. En la sección de declaración del formulario, escriba lo siguiente:

MDbBiblio privado como base de datos

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

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

Atenuar TempNode como nodo

Establecer TempNode = tvwDB.Nodes.Add()

Aunque puede crear variables al agregar objetos Node, una forma más eficiente es Declare una variable de objeto Node a nivel de módulo y utilícela para crear todos los objetos Node. En la sección de declaración anterior, escriba:

Nodo m privado como nodo

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

Puede hacerlo esto en el evento Cargar del objeto Formulario Inicializar variables de base de datos. 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 configurarla en cualquier parte del código de este módulo Accede a él libremente.

Evento de carga de formulario: use el método Agregar de la colección Nodes para crear el objeto Nodo de nivel superior

En este punto, la variable del objeto Base de datos se ha inicializado como la base de datos Biblio. y ahora se puede crear el primero en el árbol y darle el nombre de la base de datos abierta. Primero debe crear el primer objeto Node utilizando el método Add de la colección Node. También asígnelo a la variable de objeto mNode usando una instrucción Set, de la siguiente manera:

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

mNode.Text = mDbBiblio.Name

Tenga en cuenta que en el código anterior, al crear Node, se asigna a la variable de objeto mNode mediante la instrucción Set. Dado que la variable mNode ahora contiene el objeto Node recién creado, se pueden asignar valores a las propiedades del objeto Node. En el caso anterior, el nombre de la Base de datos (es decir, la propiedad Nombre del objeto Base de datos) se ha asignado a la propiedad Texto del nuevo nodo.

Evento CommandButton Click: cree dos variables Recordset 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 Al hacer clic en él, dos tablas de la base de datos Biblio se colocan en el control TreeView. Para hacer esto, primero debe declarar dos variables de objeto DAO en el evento Click del botón. La primera variable, rsPublishers, contiene la tabla de editores. La segunda variable rsTitles contiene la tabla de Títulos.

El siguiente código declara estas dos variables y asigna la tabla a la variable usando el método OpenRecordSet:

Dim rsPublishers As Recordset

Dim rsTitles As Recordset

Set rsPublishers = mDbBiblio.

OpenRecordset("Editores", dbOpenDynaset)

Establecer rsTitles = mDbBiblio _

OpenRecordset("títulos", dbOpenDynaset)

Utilice la instrucción Do Until para crear un objeto Node para cada editor en la tabla

Ahora que tiene dos conjuntos de registros abiertos, puede iterar a través de cada conjunto de registros, crear un objeto Node y el objeto. A la propiedad del texto se le asigna el valor apropiado. Primero, debe iterar sobre la tabla Editores y crear un objeto 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 y asigne el valor del campo Título a su propiedad Texto, mueva Siguiente registro y repetición":

Hacer hasta rsPublishers.EOF

Establecer mNode = tvwDB.Nodes.Add(1, tvwChild)

mNode.Text = rsPublishers !Name

rsPublishers.MoveNext

Loop

Tenga en cuenta que se utilizan dos parámetros en el método Add anterior. El primer parámetro (1) es la propiedad Índice del Nodo que deseamos agregar al nodo. Es decir, desea que todos los nodos del editor sean hijos del primer nodo (raíz) (creado en el evento de carga del formulario). El segundo parámetro utiliza una constante (tvwChild), que especifica que el nuevo Nodo será hijo del Nodo número "1".

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

El código anterior será el contenido de la tabla de Editores como las primeras capas. llene el TreeView. Sin embargo, también queremos poder ir un nivel más profundo y agregar nodos secundarios a cada nodo editor. Cada nodo secundario representa un libro impreso por ese editor.

Para hacer esto, si tiene 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 poder agregar un nodo a mNode, primero debe asignar la propiedad Índice de mNode a una variable (intIndex), de la siguiente manera:

intIndex = mNode.Index

Luego Puede utilizar esta variable en el método Add. El método Add requiere el atributo Index del objeto Node utilizado para agregar el nodo secundario:

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

El siguiente código simplificado se puede expresar como "hasta el final de Recordset: cree un objeto Nodo hijo y asigne el valor del campo Título a su propiedad Texto; pase al siguiente registro y repita las operaciones anteriores":

Hacer hasta rsTitles.EOF

Si rsPublishers!PubID = rsTitles!PubID Entonces

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

mNode.Text = rsTitles!Title 'Propiedad de texto.

End If

Bucle

Código completo

El código anterior muestra los conceptos básicos de cómo completar una tabla con dos tablas relacionadas Estrategia. El código completo es el siguiente:

'Se debe establecer una referencia a DAO 3.5.

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

Privado mDbBiblio como base de datos

Privado mNode como nodo

Privado Sub Form_Load()

'En el evento Form_Load, establezca la variable de objeto,

'y cree el primer objeto Nodo del control TreeView.

Establecer mDbBiblio = DBEngine.Workspaces(0) _

OpenDatabase("BIBLIO.MDB")

tvwDB.Sorted = True

<. p> Establecer mNode = tvwDB.Nodes.Add()

mNode.Text = "Editores"

mNode.Tag = mDbBiblio.Name 'Establecer el atributo Etiqueta.

mNode.Image = "cerrado" 'Establecer imagen

'Propiedades

End Sub

Sub privado cmdLoad_Click()

'Declarar variables de objeto DAO,

'y asignarles conjuntos de registros.

Dim rsPublishers como conjunto de registros

Dim rsTitles como conjunto de registros

Establecer rsPublishers = mDbBiblio _

OpenRecordset("Publishers", dbOpenDynaset)

Set rsTitles = mDbBiblio. _

OpenRecordset("titles", dbOpenDynaset)

'Mover al primer registro.

rsPublishers.MoveFirst

Dim intIndex As Integer 'Variable para indexación.

'Hasta el último registro (EOF): agrega un objeto Nodo,

'y usa el campo Nombre como texto del nuevo

'objeto Nodo .

Hacer hasta rsPublishers.EOF

Establecer mNode = tvwDB.Nodes.Add(1, tvwChild)

mNode.Text = rsPublishers!Name

mNode.Tag = "Editor" 'La etiqueta identifica la tabla.

'Dale a Key un ID único

mNode.Key = CInt(rsPublishers!PubID) amp "ID"

'Establece la variable intIndex como nueva Crea el Propiedad de índice de Node.

'Utilice esta variable para agregar el objeto Nodo secundario al objeto Nodo actual.

intIndex = mNode.Index

'Para este registro, busque en la tabla Título registros con el mismo PubID en el conjunto de registros Títulos

'. Si se encuentra dicho registro,

'Agregue un objeto Nodo al control TreeView y use todo

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

'Asignación de atributos del objeto Nodo.

Hacer hasta rsTitles.EOF

Si rsPublishers!PubID = rsTitles!PubID Entonces

Establezca mNode = tvwDB.Nodes _

. Add(intIndex, tvwChild)

mNode.Text = rsTitles!Title 'Texto.

mNode.Key = rsTitles!ISBN 'ID única.

mNode.Tag = "Autores" 'Nombre de la tabla.

mNode.Image="hoja" 'Imagen.

End If

rsTitles.MoveNext 'El siguiente registro en Títulos.

Bucle

'Restablece rsTitles al primer registro de Títulos.

rsTitles.MoveFirst

'Pasar al siguiente registro del editor.

rsPublishers.MoveNext

Bucle

End Sub

Agregar código

Utilice sentencias SQL para crear archivos más pequeños. El conjunto de registros "Títulos" podría 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 = " amp; _

rsPublishers!PubID)

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

Private Sub cmdLoad_Click()

Dim rsPublishers As Recordset

Dim rsTitles As Recordset

Set rsPublishers = mDbBiblio _

OpenRecordset("Publishers", dbOpenDynaset)

Dim intIndex

Hacer hasta rsPublishers.EOF

Establecer mNode = tvwDB .Nodes.Add(1, tvwChild)

mNode.Text = rsPublishers!Name

mNode.Tag = "Publisher" 'Identifica la tabla.

mNode.Key = rsPublishers!PubID & "ID"

mNode.Image = "cerrado"

intIndex = mNode.Index

'Para este registro, utilice una consulta para crear un conjunto de registros de la tabla Título.

'La condición de la consulta es que todos los registros contengan el mismo PubID. Para cada registro en el conjunto de registros de resultados

', agregue un objeto Nodo al control TreeView,

'y use los campos Título, ISBN y Autor del registro como nuevos

'Asignación de atributos del objeto Nodo.

Establecer rsTitles = mDbBiblio.OpenRecordset _

("select * from Titles Where PubID = " amp; _

rsPublishers!PubID)

Hacer hasta rsTitles.EOF

Establecer mNode = tvwDB.Nodes _

Agregar(intIndex, tvwChild)

mNode.Text = rsTitles!TITLE '. texto.

mNode.Key = rsTitles!ISBN 'ID única.

mNode.Tag = "Autores" 'Nombre de la tabla.

mNode.Image="smlBook" 'Imagen.

'Pasar al siguiente registro en rsTitles.

rsTitles.MoveNext

Bucle

'Mover al siguiente registro de editores.

rsPublishers.MoveNext

Bucle

End Sub