D'un point de vue architectural, c'est zéro pointé. On ne doit jamais créer de lien direct entre l'UI et la couche d'accès aux données (DAL) comme tu l'as fait.
Comme j'imagine que tu as dû faire ça un peu partout dans ton programme, je vais te donner une solution crade pour arriver à tes fins...
Crée une classe, qui servira à recueillir les données provenant de ta base :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Public Class MaClass
Private _monString As String
Public Property MonString() As String
Get
Return Me._monString
End Get
Set(ByVal value As String)
Me._monString = value
End Set
End Property
Public Sub New(ByVal monString As String)
Me._monString = monString
End Sub
End Class |
Ensuite pour charger ta DropDownList, il suffit d'exécuter la requête SQL, puis de stocker les résultats dans cette liste. Enfin, on bind la liste sur le DropDownList :
1 2 3 4 5 6 7 8
| Dim data As New List(Of MaClass)
Do While dReader.Read()
data.Add(New MaClass(dReader.GetValue(0).ToString())
Loop
Me.sortImageList.DataSource = data
Me.sortImageList.DataBind() |
Et bien sûr, il ne faut pas oublier de préciser les valeurs des propriétés DataTextField et DataValueField. On y met le nom des propriétés contenues dans l'objet métier (ici l'objet métier est MaClass) :
1 2
| Me.sortImageList.DataTextField = "MonString"
Me.sortImageList.DataValueField = "MonString" |
Il faut mettre le code ci-dessus avant l'appel à la méthode DataBind, sinon ça ne marchera pas. Il est aussi possible de faire ça dans le code ASPX de la page :
<asp:DropDownList ID="sortImageList" runat="server" DataTextField="MonString" DataValueField="MonString" />
Si tu veux faire ça plus proprement, il te faut au minimum 3 couches :
- UI (User Interface, la couche de présentation = ce que voit l'utilisateur),
- BLL (Business Logic Layer, la couche de logique métier)
- DAL (Data Access Layer, la couche d'accès aux données)
Et un projet DTO (Data Transfert Objects) qui te permettra de transporter des choses entre les couches.
Dans la DAL, tu auras toute la logique d'accès aux données, donc c'est à ce niveau que la requête sera exécutée. Les données seront ensuite stockées dans la BLL, où il y a la classe "MaClass" qu'on a créé ici. Enfin, on viendra binder la DropDownList qui se trouve dans l'UI sur un objet de type List(Of MaClass).
Partager