Domanda

Sono vincolante per un menu a discesa. Funziona sul carico iniziale. Sui carichi successivi (postback) non aggiorna gli elementi nel menu a discesa.

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); 
}

Ho confermato che sui postback i dati vengono associati al menu a discesa e gli elementi vengono aggiunti correttamente. Ma quando la pagina viene visualizzata, il menu a discesa non ha nessuno dei nuovi valori.

Vedo due possibilità: il controllo non esegue il rendering dei nuovi valori o i valori vengono cancellati. Sono in perdita di dove cercare possibili problemi.

Modifica

Ho scoperto il problema. L'elenco a discesa è stato incorporato in un UpdatePanel condizionale. Basta chiamare " UpdatePanel.Update (); " risolto il problema.

È stato utile?

Soluzione

Su Postback viene riapplicato il viewstate + hai detto che stai cercando di caricare nuovamente i valori. Suggerirei a Viewstate di portare tutto il peso sul postback. Carica i valori solo quando la pagina viene visualizzata per la prima volta aggiungendo se (! IsPostBack) in questo modo

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); 
   }
}

Modifica Inoltre, la sintassi garantisce che l'oggetto DataView a cui fa riferimento dv viene eliminato all'uscita dal blocco di codice. La mia seconda ipotesi è che questo provoca un effetto collaterale che causa il problema.

using (DataView dv = dtProductGroup.DefaultView)
{

Invece lascia fuori l'uso e scrivi una dichiarazione normale come la seguente (DataView verrà smaltito insieme a tutto il resto quando la pagina sarà terminata, quindi non c'è davvero bisogno di farlo da soli).

DataView dv = dtProductGroup.DefaultView;

Consulta la la documentazione MSDN su "utilizzo" e IDisposable per informazioni dettagliate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top