es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo mantener mis elementos en asp:dropdownlist después de !Page.IsPostBack?

Estoy cargando una lista de valores / texto en un asp:dropdownlist llamando a un procedimiento almacenado. Relleno el dropdownlist en el método PageLoad dentro de un bloque !Page.IsPostBack de la siguiente manera:

if (!Page.IsPostBack)
{
     GetDropDownLists();
     DataBind();
}

Y esta es mi implementación de código para el backend:

protected void GetDropDownLists()
{
     DataTable dt = new DataTable();

     SqlConnection conn = new SqlConnection(connString);
     SqlCommand cmd = new SqlCommand("get_articletype", conn);
     cmd.CommandType = CommandType.StoredProcedure;
     SqlDataAdapter adapter = new SqlDataAdapter(cmd);

     adapter.Fill(dt);
     xArticleTypeList.Items.Clear();
     xArticleTypeList.Items.Insert(0, new ListItem("- Seleccionar.. -", "0"));
     xArticleTypeList.SelectedIndex = 0;
     xArticleTypeList.DataSource = dt;
     xArticleTypeList.DataValueField = "TypeValue";
     xArticleTypeList.DataTextField = "TypeName";
     xArticleTypeList.DataBind();
}

Si mi código no está dentro de un bloque !Page.IsPostBack, después de hacer clic en mi botón de guardar, el valor predeterminado siempre será el primer elemento del dropdownlist. Pero una vez que coloco mi código dentro del bloque !Page.IsPostBack, mi dropdownlist está vacío. Para referencia, aquí está la implementación frontend de mi asp:dropdownlist.

<asp:dropdownlist id="xArticleTypeList" enableviewstate="true" autopostback="true" cssclass="form-control" runat="server"></asp:dropdownlist>

Entiendo que hay otros temas que cubren esta pregunta, pero ninguna de las soluciones propuestas funcionó para mí. Gracias de antemano por sus sugerencias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con esta implementación es que la vinculación de datos del dropdownlist ocurre antes de que se establezca el índice seleccionado. Esto hace que la selección predeterminada sea el primer elemento de la lista.

    Para solucionar este problema, mueve la llamada al método DataBind() después de establecer el índice seleccionado, de la siguiente manera:

    c#
    if (!Page.IsPostBack)
    {
    GetDropDownLists();
    xArticleTypeList.SelectedIndex = 0;
    DataBind();
    }

    Esto asegurará que el índice seleccionado se establezca correctamente antes de que el dropdownlist se vincule a la fuente de datos.

Comments are closed.