private void GenerarMenu(int usuarioID) { try { this.mSisPack.Items.Clear(); /* Obtenemos todo el menú habilitado para el usuario de la sesión. */ IOpcion opcion = OpcionFactory.GetOpcion(); opcion.EsAccion = false; /*Obtenemos la variable que indica si es Servidor de Reportes o Produccion*/ string permiteReportes = System.Configuration.ConfigurationManager.AppSettings["Server"]; bool esReporte = permiteReportes == "R" ? true : false;// Convert.ToBoolean(permiteReportes); DsOpcion ds = opcion.GetOpcionesMenuByUsuarioID(usuarioID, esReporte); /* Creamos el nodo principal (raíz). */ foreach (DataRow dr in ds.Datos.Select("OpcionPadreID IS NULL", "OrdenVisual")) { /* Creamos un nodo padre. */ System.Web.UI.WebControls.MenuItem itemPadre = new System.Web.UI.WebControls.MenuItem(); itemPadre.Text = dr["Titulo"].ToString(); itemPadre.Value = dr["OpcionID"].ToString(); if (ds.Datos.Select("OpcionPadreID = '" + dr["OpcionID"] + "'", "OrdenVisual").Length > 0) { /* Generar los subnodos recursivamente. */ GenerarSubMenu(itemPadre, ds, ds.Datos.Select("OpcionPadreID = '" + dr["OpcionID"] + "'", "OrdenVisual")); } else { /* Si tiene una Url seteada la colocamos al nodo. */ if (!dr["Url"].ToString().Equals("")) { itemPadre.NavigateUrl = dr["Url"].ToString(); } else { itemPadre.Selected = false; } } /* Agregamos el nodo padre(completo) al nodo raíz. */ this.mSisPack.Items.Add(itemPadre); } opcion = null; ds = null; } catch (Exception ex) { throw (ex); } }