0 votes

Comment puis-je alimenter une liste déroulante avec des données ?

J'ai un dropdownlist que je veux remplir avec une valeur et un texte spécifiques. Je n'utilise pas de datasource mais j'établis manuellement une connexion et récupère les données dans le code. Comment puis-je alimenter ce dropdownlist ? Si je lis les données avec un datareader et incrémenter un tableau, je n'obtiens que la valeur ou le texte. C'est ce que j'ai fait jusqu'à présent, mais c'est complètement faux :

//connection string etc goes here
Dbcmd2.CommandText = "select dept,deptname from table"

Dim dr As SqlClient.SqlDataReader
    dr = Dbcmd2.ExecuteReader
    Dim i As Integer
    Dim arydept As New arraylist
    While dr.Read
       arydept.Add(dr1("dept"))
    End While

    ddldept.datasource = arydept
    ddldept.DataTextField = ????????
    ddldept.DataValueField = dr("dept")
    ddldept.DataBind()

Comment puis-je faire en sorte que cela fonctionne sans avoir à créer un objet de classe pour l'utilisateur ? Department ? Y a-t-il un moyen ou dois-je créer l'objet classe ?

4voto

Welbog Points 32952

Y a-t-il une raison particulière pour laquelle vous ne pouvez pas le faire de manière normale ?

Dbcmd2.CommandText = "select dept,deptname from table"
Dim dr As SqlClient.SqlDataReader = Dbcmd2.ExecuteReader
While dr.Read() 
  ddldept.Items.Add(new ListItem(dr("deptname"),dr("dept"))
End While
' ddldept is now populated with all items from the query

2voto

Rob Allen Points 7768

Vous utilisez déjà le lecteur, il suffit donc de le placer dans une DataTable et de le lier :

//connection string etc goes here
Dbcmd2.CommandText = "select dept,deptname from table"

Dim dr As SqlClient.SqlDataReader
dr = Dbcmd2.ExecuteReader
Dim myData as DataTable
If dr.HasRows Then
    myData.Load(dr)
End If

ddldept.datasource = myData
ddldept.DataTextField = myData("myTextField")
ddldept.DataValueField = myData("dept")
ddldept.DataBind()

1voto

Gavin Points 5301

Au lieu d'utiliser un ArrayList, si vous utilisez un objet dictionnaire, vous pouvez stocker le nom et la valeur.

Quelque chose comme ceci devrait le faire

Dim All As New Dictionary(Of String, String)
All.Add("Test", 1)
All.Add("Test2", 2)
test.DataSource = All
test.DataTextField = "Key"
test.DataValueField = "Value"
test.DataBind()

1voto

womp Points 71924

Au lieu d'utiliser l'approche datasource/databind(), vous pouvez simplement créer les éléments de la liste et les ajouter à votre liste déroulante.

 dr = Dbcmd2.ExecuteReader
    Dim i As Integer
    Dim arydept As New arraylist

    ddldept.Items.Clear()
    While dr.Read
       ddldept.Items.Add(new ListItem(dr1("dept"), dr1("dept")))
    End While

1voto

Dimi Toulakis Points 3002

Et celui-là ?

ddldept.Items.Clear()

While dr.Read
   ListItem item = New ListItem()
   item.Text = dr("deptname").ToString()
   item.Value = dr("dept").ToString()

   ddldept.Items.Add(item)
End While

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X