DropDownList AppendDataBoundItems (premier point à vide et pas de doublons)
J'ai un DropDownList
à l'intérieur d'un UpdatePanel
qui est rempli à la publication d'un SqlDataSource
. Il a un paramètre qui est une autre commande. J'ai parfois besoin de plusieurs publications, mais ce qui se passe est que chaque fois que le panneau de mise à jour actualise, les éléments sont ajoutés à la DropDownList
. Ainsi, le DropDownList
finit par avoir les données inexactes, ou répétée de données.
J'ai le AppendDataBoundItems
propriété définie à true
parce que j'ai besoin le premier point à vide.
Comment puis-je résoudre ce problème? Est-il un autre moyen d'avoir un vide premier élément?
(Ce DropDownList
est dans un ASP.NET 2.0 web app, et le code est en C#)
InformationsquelleAutor zohair | 2009-04-08
Vous devez vous connecter pour publier un commentaire.
Au lieu d'utiliser
AppendDataboundItems='true'
(ce qui provoque le problème dont vous parlez), à répondre à laDataBound
événement pour leDropDownList
puis ajouter le "vide" de l'élément en haut de la liste.Puis dans votre code derrière:
Il y a des bonnes réponses ici, mais j'ai ressenti le besoin d'inclure plus d'informations car il y a plusieurs options de travail et nous avons besoin de décider de les utiliser.
Tout d'abord, nous devons comprendre
AppendDataBoundItems
. SiAppendDataBoundItems = "true"
,ListItems
sont ajoutés à laDropDownList
sans effacer les anciens. Sinon, leDropDownList
est effacé avant la prochaineDataBind
. MSDN AppendDataBoundItems docFondamentalement, il y a 2 options couvertes par la plupart des réponses:
1. Définir une option blanc en html et ajouter le ListItems à partir de la base de données de la DropDownList qu'une seule fois.
Avis 3 choses ici:
ListItem
est défini en htmlAppendDataBoundItems="true"
DataBind
n'est PAS appelée sur les publications ou lors de laDropDownList
élémentcount > 1
Source:
Code derrière:
Note: j'aime la logique de vérifier le comte vs vérification
IsPostBack
. Bien que les Publications sont souvent la cause de la double liaison de données, il est possible de provoquer d'autres moyens. Vérifier le nombre d'éléments est fondamentalement juste le temps de vérifier si ça a déjà été chargé.OU (option à utiliser
IsPostBack
à la place)2. Claire et recharger la DropDownList sur chaque actualisation de la page.
Avis 3 différences de la première option:
AppendDataBoundItems="false"
(si elle n'est pas définie alorsfalse
c'est que c'estvaleur par défaut)
ListItem
est ajouté dans le code derrière. Nous ne pouvons pas définir dans le langage htmlcar avec
AppendDataBoundItems="false"
, il serait effacée.DataBind
est appelé à chaquePage_Load
Source:
Code derrière:
Vous avez probablement lier DropDownList dans le code derrière. Donc, vous ne devriez pas le faire après la publication de nouveau:
Ici est une idée, on peut utiliser les 2 événements: lié aux données et DataBinding:
Voici une Idée.
Il y a une propriété dans la liste déroulante appelée
AutoPostBack
l'activer et ensuite dans le code-behind de vous mettre tous la méthode de reliure à l'intérieur de laif(!Page.IsPostBack)
. Ce qui a fonctionné pour moi.ce qui concerne.