Question

Je suis lié à un menu déroulant. Cela fonctionne sur la charge initiale. Lors des chargements ultérieurs (postbacks), il n’actualise pas les éléments du menu déroulant.

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

J'ai confirmé que sur les publications, les données sont liées au menu déroulant et les éléments ont été ajoutés avec succès. Mais lorsque la page s'affiche, la liste déroulante ne contient aucune des nouvelles valeurs.

Je vois deux possibilités: le contrôle ne restitue pas les nouvelles valeurs ou les valeurs sont en train d'être effacées. Je ne sais plus où chercher les problèmes éventuels.

Modifier

J'ai découvert le problème. La liste déroulante a été incorporée dans un UpdatePanel conditionnel. Il suffit d'appeler " UpdatePanel.Update (); " résolu le problème.

Était-ce utile?

La solution

Lors de la publication, l'état d'affichage est réappliqué + vous avez dit que vous essayez de charger à nouveau les valeurs. Je suggérerais de laisser viewstate porter tout le poids sur postback. Ne chargez les valeurs que lorsque la page est affichée pour la première fois en ajoutant if (! IsPostBack) comme suit

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

Modifier: De plus, votre syntaxe garantit que l'objet DataView référencé par dv est éliminé lorsque le bloc de code se termine. Ma deuxième hypothèse est que cela provoque un effet secondaire qui cause le problème.

using (DataView dv = dtProductGroup.DefaultView)
{

Abandonnez plutôt l'utilisation et écrivez une déclaration régulière comme celle-ci (le DataView va être éliminé avec tout le reste lorsque le rendu de la page est terminé, il n'est donc pas vraiment nécessaire de le faire vous-même).

DataView dv = dtProductGroup.DefaultView;

Voir la documentation MSDN sur l'utilisation et l'utilisation d'IDisposable. pour des informations détaillées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top