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 ^^