Buen día a cada uno de ustedes estimados lectores!. En esta oportunidad se mostrará la creación de un menú con MenuStrip extrayendo los datos a través de una consulta SQL.
Para empezar crearemos un Form y dentro agregaremos un MenuStrip, para ello no le cambiamos el nombre al MenuStrip. Luego crearemos una Tabla llamada “Menu” en nuestra Base de Datos SQL con esta estructura :
Si lo quieren hacer mediante código aquí les va :
1: CREATE TABLE MENU(
2: ID INT IDENTITY,
3: ID_PADRE INT,
4: DESCRIPCION NVARCHAR(100),
5: PRIMARY KEY(ID))
Luego de ejemplo insertan los siguientes datos a la tabla Menu :
1: INSERT INTO MENU(ID_PADRE,DESCRIPCION) VALUES(0,'USUARIOS');
2: INSERT INTO MENU(ID_PADRE,DESCRIPCION) VALUES(0,'VEHICULOS');
3: INSERT INTO MENU(ID_PADRE,DESCRIPCION) VALUES(1,'CORPORATIVOS');
4: INSERT INTO MENU(ID_PADRE,DESCRIPCION) VALUES(1,'PERSONAS');
5: INSERT INTO MENU(ID_PADRE,DESCRIPCION) VALUES(2,'GRANDES');
6: INSERT INTO MENU(ID_PADRE,DESCRIPCION) VALUES(2,'MEDIANOS');
7: INSERT INTO MENU(ID_PADRE,DESCRIPCION) VALUES(2,'PEQUEÑOS');
Después insertan el siguiente método al código del formulario :
1: private void cargar_menu(Int32 indice_padre, ToolStripMenuItem menu_padre, MenuStrip menu)
2: {
3: //Creamos un DataTable
4: DataTable datos = new DataTable();
5:
6: //Creamos la conexion
7: SqlConnection cnx = new SqlConnection("Data Source=XXX.XXX.XXX.XXX;Initial Catalog=MIBD;User ID=sa;Password=password");
8: //Creamos el adaptador y le pasamos la consulta
9: SqlDataAdapter da = new SqlDataAdapter("select*from menu", cnx);
10: //Abrimos la conexion
11: cnx.Open();
12: //Llenamos los datos
13: da.Fill(datos);
14: //Cerramos la conexion
15: cnx.Close();
16: //Creamos un Dataview apartir de los datos del DataTable
17: DataView datos_hijos = new DataView(datos);
18: //filtramos los datos y obtenemos los hijos del id = ?
19: datos_hijos.RowFilter = datos.Columns["ID_PADRE"].ColumnName + "=" + indice_padre;
20: //Recorremos los datos filtrados
21: foreach (DataRowView fila in datos_hijos)
22: {
23: //Declaramos un nuevo item hijo
24: ToolStripMenuItem menu_hijo = new ToolStripMenuItem();
25: //Texto a mostrar en el Item
26: menu_hijo.Text = fila["DESCRIPCION"].ToString();
27: //Nombre a asignar al Item
28: menu_hijo.Name = fila["ID"].ToString();
29:
30: if (menu_padre == null)
31: {
32: //Agregamos como item Raiz
33: menu.Items.Add(menu_hijo);
34: }
35: else
36: {
37: //Agregamos un item a otro item
38: menu_padre.DropDownItems.Add(menu_hijo);
39: }
40:
41: //Llamamos al metodo para verificar si tiene mas hijos
42: cargar_menu(Int32.Parse(fila["ID"].ToString()), menu_hijo, menu);
43: }
44:
45: }
No olviden importar las siguientes librerías :
1: using System.Data;
2: using System.Data.SqlClient;
y Finalmente llamamos al método en el Load del formulario :
1: private void Form1_Load(object sender, EventArgs e)
2: {
3: cargar_menu(0, null, menuStrip1);
4: }
Ejecutamos y obtendremos el siguiente resultado :
Hasta ahí listará nuestro menú, pero ustedes se preguntarán cómo agregamos funcionalidad a este menú?? Bien la respuesta no es nada difícil, si observan bien el método “cargar_menu” no le asignamos ningún evento, para ello agregarán 1 línea de código debajo donde le agregamos el Text y Name dentro del ForEach :
1: menu_hijo.Click += new EventHandler(Listado_Eventos);
Pero el método “Listado_Eventos” todavía no existe, no se preocupen que aquí adjunto el método de ejemplo :
1: public void Listado_Eventos(object sender, EventArgs e)//Evento Generico de Cada item
2: {
3: ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
4: if (Convert.ToInt32(clickedItem.Name) == 3 ) //SU ID DE LA TABLA
5: {
6: MessageBox.Show("Bienvenido Cliente Corporativo!");
7: }
8: }
Espero les haya sido de mucha utilidad. Hasta una próxima oportunidad. Saludos!.
muchas gracias es un excelente ayuda pero tengo una pregunta yo lo he realizado en VB.NET y tengo problemas con este trozo de código
ResponderEliminarmenu_hijo.Click += new EventHandler(Listado_Eventos);
me puedes ayudar
Buenos Días. Yo también tengo problemas con este trozo de código en VB.NET. Agradezco si me pueden ayudar. Gracias
ResponderEliminarmenu_hijo.Click += new EventHandler(Listado_Eventos);
Hay que reemplazar esa linea de codigo por:
ResponderEliminarAddHandler menu_hijo.Click, AddressOf Me.Listado_Eventos
Espero le sirva.