Retroceder   Foros del Web > Programación para sitios web > .NET > web forms

Respuesta
 
Herramientas Desplegado
Antiguo 05-dic-2006, 09:14   #1 (permalink)
hEakfall ha deshabilitado el karma
 
Fecha de Ingreso: julio-2006
Mensajes: 10
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 ^^
hEakfall está desconectado   Responder Citando
Antiguo 05-dic-2006, 09:18   #2 (permalink)
moNTeZIon ha deshabilitado el karma
 
Avatar de moNTeZIon
 
Fecha de Ingreso: enero-2005
Ubicación: CanFenosa Martorelles BCN
Mensajes: 1.286
Enviar un mensaje por Skype™ a moNTeZIon
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 ::..
moNTeZIon está desconectado   Responder Citando
Antiguo 05-dic-2006, 12:28   #3 (permalink)
hEakfall ha deshabilitado el karma
 
Fecha de Ingreso: julio-2006
Mensajes: 10
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.
hEakfall está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 19:17.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93