![]() |
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 ^^ |
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. |
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. |
| La zona horaria es GMT -6. Ahora son las 08:20. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.