15 mar 2012

[WinForm] – Creación de un Menú con datos SQL

 

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!.

3 comentarios:

  1. 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

    menu_hijo.Click += new EventHandler(Listado_Eventos);

    me puedes ayudar

    ResponderEliminar
  2. Buenos Días. Yo también tengo problemas con este trozo de código en VB.NET. Agradezco si me pueden ayudar. Gracias

    menu_hijo.Click += new EventHandler(Listado_Eventos);

    ResponderEliminar
  3. Hay que reemplazar esa linea de codigo por:
    AddHandler menu_hijo.Click, AddressOf Me.Listado_Eventos
    Espero le sirva.

    ResponderEliminar