
24/07/2007, 21:01
|
 | | | Fecha de Ingreso: julio-2007
Mensajes: 4
Antigüedad: 17 años, 6 meses Puntos: 0 | |
Re: Construir una lista dinámicamente Bueno creo que te he confundido un poco; ahora bien tienes un error en la apertura de la base por que dentro del "foreach" llamas a la funcion de los menus y dentro de estas abres la base "cnDatos.Open();", por tanto es llamado constantemente una y otra vez, he ahy tu error.
puedes corregirlo, primero conviertes en "static" tus variables:
static SqlConnection cnDatos = new SqlConnection("server=NOMBRE_SERVIDOR;database=NOM BRE_BASEdeDATOS;uid=sa;");
static DataTable dtMenuItems = new DataTable();
de esta forma el valor de las variables permanecera constante entre funciones.
Segundo elimina el "cnDatos.Open();" de tus funciones y colocalo en la siguiente linea:
cnDatos.Open();
try
{
SqlDataAdapter daMenu = new SqlDataAdapter("ObtenerOpciones_Menu", cnDatos);
daMenu.SelectCommand.CommandType = CommandType.StoredProcedure;
daMenu.Fill(dtMenuItems);
foreach (DataRow drMenuItem in dtMenuItems.Rows)
{
...
}
}
catch(...)
{}
finally
{ cnDatos.Close(); }
con esto evitaras el error de apertura.
Con respecto al uso de la instruccion de mi mensaje anterior es con otra vision muy diferente a la tuya para el codigo, ya que yo utilizo para ello el objeto menu de asp y lo contruyo dinamicamente, por ejemplo:
MenuItem mniTemporal = new MenuItem("Inicio", "Inicio", "", "~/inicio.aspx"); //se crea un menuitem para agregarlo
mnuMenu1.Items.Clear(); //solo pa limpiar en caso de tener precargado datos
mnuMenu1.Items.AddAt(0,mniTemporal); //se agrega el item en el index 0
mniTemporal = new MenuItem("Servicio", "Servicio", "", "~/servicio.aspx");
// y si se desea agregar un hijo (childitem)
mnuMenu1.Items[0].ChildItems.Add(mniTemporal);
//en esta intruccion el indice del (Items[X]) debe ser el numero que corresponde al padre
//tomando en cuenta que la indexacion comienza en cero
Espero esto te ayude. |