2009-05-26 9 views
6

Je simple dropdownlist (FFG) ...valeur sélectionnée ne change pas en asp: DropDownList

<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true" BackColor="LightSteelBlue" Font-Size="X-Small" 
    OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged1" Style="z-index: 102; left: 37px; position: absolute; top: 85px" Width="331px" 
    </asp:DropDownList> 

que je lie les données à usind l'événement OnPageLoad ...

DropDownList2.DataSource = td.DataSet 
DropDownList2.DataSource = td 
DropDownList2.DataTextField = td.Columns("Name").ColumnName.ToString 
DropDownList2.DataValueField = td.Columns("VendorCode").ColumnName.ToString 
DropDownList2.DataBind() 

et un événement onleselectedindexchaged où je tente de retreive la nouvelle valeur comme ça ...

Protected Sub DropDownList2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList2.TextChanged 
     Dim url As String = "sp_menu.aspx?sp=" & DropDownList2.SelectedValue 
     Session.Remove("sp") 
     Session("sp") = DropDownList2.SelectedValue 
     Session("spnm") = DropDownList2.SelectedItem.Text & " (" & DropDownList2.Text & ")" 
     Response.Redirect(url) 
    End Sub 

Mais il apporte toujours la première Valu e, peu importe lequel est cliqué sur la liste déroulante. S'il vous plaît aider!

+0

Veuillez formater votre code! –

+0

Si cet exemple est correct, vous avez spécifié le gestionnaire d'événements DropDownList2_SelectedIndexChanged1 mais votre code est dans DropDownList2_TextChanged. Mauvais gestionnaire appelé ou juste une faute de frappe dans le poste? – Trotts

+0

Le textchaged était une alternative que j'essayais, mon code est dans DropDownList2_SelectedIndexChanged1 –

Répondre

3

vous pouvez essayer d'utiliser

DropDownList2.SelectedItem.Value 

au lieu de

DropDownList2.SelectedItem.Text 
10

Ok ... quelques petites choses ...

First DropDownList2_TextChanged est pas connecté à votre DropDownList si Je ne peux pas voir comment cet événement se déclenchera à moins que vous ne fassiez le wireup dans votre codebehind

Deuxième

Vous dites que ce code ici

DropDownList2.DataSource = td.DataSet 
DropDownList2.DataSource = td 
DropDownList2.DataTextField = td.Columns("Name").ColumnName.ToString 
DropDownList2.DataValueField = td.Columns("VendorCode").ColumnName.ToString 
DropDownList2.DataBind() 

est dans votre cas PageLoad. Avez-vous enveloppé dans un If Not IsPostBack, parce que sinon, alors vous renuméroter à chaque fois, et perdez votre sélection précédente.

+0

Je ne l'ai pas enveloppé dans If Not IsPostBack parce que je redirige l'utilisateur vers une page différente quand ils choisissent un élément ... Je vais essayer de l'envelopper et ensuite reviens à toi. –

+0

Bonjour. Merci beaucoup pour votre aide. Il semble que je devais l'envelopper dans un If Not IsPostBack. Maintenant, cela fonctionne parfaitement. Je n'étais pas au courant que le post-retour se produit même si un événement s'est produit (dans lequel un utilisateur est redirigé vers une page différente.) Cool ... –

+0

Aucun problème. Logiquement, ce qui se passe est, l'index sélectionné a changé, ce qui déclenche du javascript avec un __doPostBack à la même page. L'événement page_load se déclenche, puis vous êtes déclenché par les événements SelectedIndexChanged, et ALORS vous redirigez vers la page suivante. –

5

Lorsque vous établissez une liaison de données dans Page_Load, vous réinitialisez essentiellement l'élément sélectionné.

Vous devez renvoyer le code de liaison existant dans Page_Load à l'intérieur d'un bloc if (! IsPostBack).

EDIT: ... ou If Not IsPostBack Then ... End Si dans VB.NET

Questions connexes