2010-06-09 5 views
2

J'ai un menu déroulant qui a une méthode qui lie les données à elle:ASP.NET - DropDown DataBinding (? Rebind)

dropDown.Items.Clear() 
dropDown.AppendDataBoundItems = True 
Select Case selType 
    Case SelectionTypes.Empty 
     dropDown.Items.Insert(0, New ListItem("", "")) 
    Case SelectionTypes.Any 
     dropDown.Items.Insert(0, New ListItem("ANY", "")) 
    Case SelectionTypes.Select 
     dropDown.Items.Insert(0, New ListItem("Select One", "")) 
    End Select 
BindDropDown(val) 

La méthode BindDropDown définit simplement la source de données, datakeyname, datavaluename, puis databinds les données.

Pour une raison que je ne peux pas éviter, je dois parfois appeler cette méthode deux fois. Quand il est appelé deux fois, tous les éléments de databound apparaissent deux fois, mais l'élément supérieur (celui que j'insère manuellement) n'est là qu'une seule fois.

Est-ce que ASP fait quelque chose de bizarre quand je double deux fois même si j'efface la liste? Ou faut-il faire quelque chose avec viewstate/controlstate?

EDIT

La page entière, et ce contrôle a EnableViewState = "false"

EDIT 2

La liste déroulante est à l'intérieur d'une vue sous forme. Une fois la valeur sélectionnée définie, je dois redéfinir la liste déroulante juste au cas où la valeur sélectionnée ne serait pas là [parce que c'est un utilisateur inactif]. Après cela, formview duplique les éléments de la base de données.

Répondre

1

Voici ce qui se passait: Mon contrôle déroulant lie les données lorsque l'indice sélectionné est défini. Donc, il définit la DataSource comme ma table de valeurs et appelle DataBind.

Lorsque le FormView est lié, il définit l'index sélectionné qui lie mon menu déroulant CEPENDANT après cela arrive, le formview appelle DataBind() sur TOUS de ses enfants. Et puisque ma liste déroulante a AppendDataBoundItems = "True", il ajoute à nouveau les éléments dans le DataSource à la liste déroulante.

Ma solution:

SET DataSource être nulle après que j'appelle DataBind() dans la propriété SelectedIndex. De cette façon, lorsque le Formview appelle DataBind(), il n'ajoute aucun élément et par conséquent je n'ai plus de doublons.

0

Essayez de le faire de cette façon:

dropDown.Items.Clear() 
BindDropDown(val) 
Select Case selType 
    Case SelectionTypes.Empty 
     dropDown.Items.Insert(0, New ListItem("", "")) 
    Case SelectionTypes.Any 
     dropDown.Items.Insert(0, New ListItem("ANY", "")) 
    Case SelectionTypes.Select 
     dropDown.Items.Insert(0, New ListItem("Select One", "")) 
End Select 
+0

Je ne peux pas ajouter la valeur après, parce que quand j'essaie de définir SelectedValue = "", il dit qu'il n'est pas dans la liste des éléments, mais quand j'utilise AppendDataBoundItems et le fais avant le databind, il me laisse définir the SelectedValue = "". –