Foros del Web » Programando para Internet » ASPX (.net) »

DropDownList regresa a su estado inicial !!

Estas en el tema de DropDownList regresa a su estado inicial !! en el foro de ASPX (.net) en Foros del Web. oOolax gente, tengo un problemilla cochino. Toy haciendo una pag.. Tengo dos dropdownlists(dl) y un datagrid(dg), la cosa es q el dl_Software muestra items q ...
  #1 (permalink)  
Antiguo 05/12/2006, 10:14
 
Fecha de Ingreso: julio-2006
Mensajes: 10
Antigüedad: 17 años, 9 meses
Puntos: 0
Pregunta DropDownList regresa a su estado inicial !!

oOolax gente, tengo un problemilla cochino. Toy haciendo una pag..

Tengo dos dropdownlists(dl) y un datagrid(dg), la cosa es q el dl_Software muestra items q dependen de lo que escoga en dl_CategoriaSoftware. Los pasos son:

- Escogo un item en el dl_CategoriaSoftware
- Escogo un item en el dl_Software
- Si no hay lo q busco... tons escribo el mio en el textbox.
-Apreto "Guardar"

El elemento se agrega al dgInformatica, este esta enlazado a un DataSet el cual es dsSoftwareConocido.

-----

El problema es que cuando selecciono un item en el dl_CategoriaSoftware (que tiene el AutoPostBack en true), lo que hace es primero ejecutar lo que se encuentra en Page_Load y luego el código q pertenece al evento dl_CateggoriaSoftware_SelectedIndexChanged(), y en el page_load esta el problema px, es que ahi lo que hago es llenar los dropdowns. Aca les paso el codigo.

private void Page_Load(object sender, System.EventArgs e)
{

dsTodosSoftwareConocidos=(DataSet)Session "SoftwareConocidos"];
LlenaListaSoftware();
}

void LlenaListaSoftware()
{

dlCategoriaSoftware.Items.Clear();
dlSoftware.Items.Clear();
dsTodosLosSoftware=(DataSet)Session["TodosLosSoftware"];
dsTodosLasCategoriasDeSoftware=(DataSet)Session["TodosLasCategoriasDeSoftware"];

//Lleno la lista de categorias de software para escoger
for(int i=0;i<dsTodosLasCategoriasDeSoftware.Tables[0].Rows.Count;i++)
{
dlCategoriaSoftware.Items.Add(dsTodosLasCategorias DeSoftware.Tables[0].Rows[i].ItemArray.GetValue(1).ToString().Trim());
}

//Lleno la lista de softwares de acuerdo a la categoria.
for(int j=0;j<dsTodosLosSoftware.Tables[0].Rows.Count;j++)
{
if(dsTodosLosSoftware.Tables[0].Rows[j].ItemArray.GetValue(2).ToString().Equals((((int)Se ssion["CateSoftEscogido_index"])+1).ToString()))

dlSoftware.Items.Add(dsTodosLosSoftware.Tables[0].Rows[j].ItemArray.GetValue(1).ToString().Trim());
}
}

protected void dlCategoriaSoftware_SelectedIndexChanged(object sender, System.EventArgs e)
{

Session["CateSoftEscogido_index"]=dlCategoriaSoftware.SelectedIndex;
ActualizarSession();
}

protected void btnAgregarSoftwareConocido_Click(object sender, System.EventArgs e)
{

DataRow dr = dsTodosSoftwareConocidos.Tables[0].NewRow();
dr[0]=dlCategoriaSoftware.SelectedValue.ToString();
dr[1]=dlSoftware.SelectedValue.ToString();
dsTodosSoftwareConocidos.Tables[0].Rows.Add(dr);
DataView dv = new DataView(dsTodosSoftwareConocidos.Tables[0]);
dgInformatica.DataSource = dv;
dgInformatica.DataBind();
ActualizarSession();
}

private void ActualizarSession()
{

Session["SoftwareConocidos"]=dsTodosSoftwareConocidos;
}


CUANDO DEBUG CON EL VISUAL STUDIO, CUANDO SELECCIONO UN ITEM EN EL dl_CategoriaSoftware, EL ORDEN DE EJECUCION ES:

- Page_load
- LlenarListasoftware
- dlCategoriaSoftware_SelectedIndexChanged

Lo que pasa es q en el Page_load todos los valores se vuelven al default y lo que es escogido en el dlCategoriaSoftware se pierde. El default es el primer elemento. En el dl_Software siempre muestra los items que dependen del primer item de dl_CategoriaSoftware.

no deberia primero hacerse el dlCategoriaSoftware_SelectedIndexChanged y luego recien refrescarse la pag??

Si le kito LlenarListaSoftware del page_load lo q pasa es que los dropdownlists no se llenan con los valores default, se quedan vacios.

Espero entiendan mi problema y ayudenme jeje ^^
  #2 (permalink)  
Antiguo 05/12/2006, 10:18
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Amigo hEakfall,
El orden de los eventos es ese. La cosa sería indicarle al page_load qué es lo que se ejecuta cada vez que se recarga la página, y qué es lo que se ejecuta solamente la primera vez que se llega a la página.
Para eso utilizas este if:

If Not Page.IsPostBack Then
'Todo lo de aqui se ejecutará solamente la primera vez.
End If
'Todo lo de fuera del If se ejecutará todos los postbacks.

A ver si hay suerte.
Salu2.
__________________
..:: moNTeZIon ::..
  #3 (permalink)  
Antiguo 05/12/2006, 13:28
 
Fecha de Ingreso: julio-2006
Mensajes: 10
Antigüedad: 17 años, 9 meses
Puntos: 0
bueno, el problema esta resuelto, lo que hice fue separa el codigo que llena el dl_SoftwareCategoria en un procedimiento diferente y a ese procedimiento meterlo en el ...

if(!Page.IsPostBack)
{
LlenaCatgeoriaSoftware();
}

y problema solucionado.

Segun me acuerdo, ya habia intentado eso pero no me funciono en esa ocación.

thnX moNTeZIon.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:49.