Ver Mensaje Individual
  #7 (permalink)  
Antiguo 24/07/2007, 21:01
Avatar de kornissues12
kornissues12
 
Fecha de Ingreso: julio-2007
Mensajes: 4
Antigüedad: 16 años, 9 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.