Saludos, como puedo llenar el MenuStrip desde una base de datos SQL SERVER
que tenga padre e hijos.
gracias de antemano
Hola:
Desde una base de datos SQL Server, ignoro cómo lo puedes llenar, pero no
así desde una aplicación de Visual Basic 2008. :-)
Suponiendo que tienes correctamente relacionadas las tablas correspondientes
a los Menús y Submenús, y una vez que hayas rellenado un objeto DataSet con
dos objetos DataTable llamados "Menus" y "Submenus" en el ejemplo, lo único
que tienes que hacer es llamar al procedimiento CreateMenu pasándole los dos
objetos DataTable:
Private Sub CreateMenu(ByVal dtMenus As DataTable, _
ByVal dtSubMenus As DataTable)
For Each row As DataRow In dtMenus.Rows
' Creamos el elemento del menú
'
Dim menuItem As New ToolStripMenuItem
' La asignamos el texto que se mostrará.
'
menuItem.Text = CStr(row("Nombre"))
' Instalamos el controlador para el evento Click.
'
AddHandler menuItem.Click, AddressOf MenuItemOnClick
' Obtenemos su identificador.
'
Dim idMenu As Integer = CInt(row("IdMenu"))
' Seleccionamos los registros de la tabla
' Submenú que tengan el mismo identificador
' del elemento del menú actual.
'
Dim rows() As DataRow = dtSubMenus.Select("IdMenu = " & idMenu)
For Each r As DataRow In rows
Dim subItem As New ToolStripMenuItem
subItem.Text = CStr(r("Nombre"))
' Instalamos el controlador para el evento Click.
'
AddHandler subItem.Click, AddressOf MenuItemOnClick
' Añadimos el submenú a su correspondiente menú.
'
menuItem.DropDownItems.Add(subItem)
Next
' Se lo asignamos al control MenuStrip
'
Me.MenuStrip1.Items.Add(menuItem)
Next
End Sub
Es decir, llamarías al método de la siguiente manera:
CreateMenu(objetoDataSet.Tables("Menus"), _
objetoDataSet.Tables("Submenus"))
Como hemos instalado los controladores para el evento Click de los distintos
objetos ToolStripMenuItem, también te hace falta que añadas el siguiente
procedimiento, el cual se ejecutará cada vez que hagas clic con el ratón en
un elemento del menú:
Private Sub MenuItemOnClick( _
ByVal sender As Object, ByVal e As EventArgs)
' Referenciamos el control que ha desencadenado el evento
'
Dim item As ToolStripMenuItem = _
DirectCast(sender, ToolStripMenuItem)
MessageBox.Show(item.Text)
End Sub
El ejemplo supone que en tu base de datos tienes las tablas Menus y Submenus
con la siguiente estructura de campos:
Menus
====
IdMenu
Nombre
Submenus
======
IdSubmenu
Nombre
IdMenu
Ambas tablas se encuentran relacionadas por el campo común IdMenu.
Adapta el ejemplo a tus necesidades.
Un saludo
--
Enrique Martínez
[MS MVP - VB]
Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.