Pregunta

Estoy enlazando a un menú desplegable. Funciona en la carga inicial. En las cargas posteriores (devoluciones), no actualiza los elementos en el menú desplegable.

using (DataView dv = dtProductGroup.DefaultView)
{
        dv.ApplyDefaultSort = false; 
        dv.Sort = "KVIGroupName ASC";

        ddlGroup.ClearSelection();
        ddlGroup.Items.Clear();

        string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
        ddlGroup.DataValueField = "KVIGroupId";
        ddlGroup.DataTextField = "KVIGroupName";
        ddlGroup.DataSource = dv;
        ddlGroup.DataBind();

        ListItem item = new ListItem(strAll, "0");
        ddlGroup.Items.Insert(0, item); 
}

He confirmado que en las devoluciones de datos los datos se vinculan al menú desplegable y los elementos se han agregado correctamente. Pero cuando la página muestra el menú desplegable no tiene ninguno de los nuevos valores.

Veo dos posibilidades: el control no está representando los nuevos valores o los valores se están borrando. Estoy en una pérdida de dónde buscar posibles problemas.

Editar

Descubrí el problema. La lista desplegable se integró en un panel de actualización condicional. Simplemente llamando a " UpdatePanel.Update (); " Resuelto el problema.

¿Fue útil?

Solución

Tras la devolución, el estado de la vista se vuelve a aplicar + usted dijo que está intentando cargar los valores nuevamente. Yo sugeriría dejar que ViewState lleve todo el peso en la devolución de datos. Solo cargue los valores cuando se golpee la página por primera vez agregando if (! IsPostBack) como tal

using (DataView dv = dtProductGroup.DefaultView)
{
   if (! IsPostBack) {

        dv.ApplyDefaultSort = false; 
        dv.Sort = "KVIGroupName ASC";

        ddlGroup.ClearSelection();
        ddlGroup.Items.Clear();

        string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
        ddlGroup.DataValueField = "KVIGroupId";
        ddlGroup.DataTextField = "KVIGroupName";
        ddlGroup.DataSource = dv;
        ddlGroup.DataBind();

        ListItem item = new ListItem(strAll, "0");
        ddlGroup.Items.Insert(0, item); 
   }
}

Editar: Además, su sintaxis garantiza que el objeto DataView al que hace referencia dv se elimine cuando salga el bloque de código. Mi segunda suposición es que esto causa un efecto secundario que causa el problema.

using (DataView dv = dtProductGroup.DefaultView)
{

En lugar de eso, omita el uso y escriba una declaración regular como la siguiente (el DataView se desechará junto con todo lo demás cuando la página haya terminado de renderizarse, por lo que no es necesario que lo haga usted mismo).

DataView dv = dtProductGroup.DefaultView;

Consulte la documentación de MSDN acerca de "usar" e IDisposable para información detallada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top