2009-06-09 19 views
0

Ich habe eine dropdownlist, die ich mit einem bestimmten Wert und einem bestimmten Text füllen möchte. Ich benutze keine datasource, aber ich mache manuell eine Verbindung und Abrufen von Daten im Code. Wie kann ich diese dropdownlist füllen? Wenn ich die Daten mit einem datareader lese und ein Array inkrementiere, erhalte ich nur den Wert oder den Text. Das ist, was ich bisher, aber es ist völlig falsch:Wie kann ich eine Dropdown-Liste mit Daten füllen?

//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() 

Wie kann ich diese ohne zu arbeiten, mit einem Klassenobjekt für Department zu schaffen? Gibt es überhaupt oder sollte ich das Klassenobjekt erstellen?

Antwort

4

Gibt es einen bestimmten Grund, dass Sie es auf die normale Weise tun können?

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 
+0

UPS, Data Access Code und Code anzeigen in diesem Zusammenhang ist dies nur Code Demo - nicht Mach das zu Hause für Kinder !!! – khebbie

+0

@khebbie: Nun, offensichtlich. Aber ich denke, Eric kümmert sich mehr darum, die Combobox zu füllen als den Datenzugriff. Wenn er es in ein anderes Objekt für die Verkapselung einwickeln will, das liegt an ihm. Er sollte es aber tun. Hörst du mich, Eric? – Welbog

+0

@Welbog Ich dachte, du wüsstest das, es ist nur so, dass ein Kind vorbeifliegt und es sieht und denkt: "Oh !, das ist die Art, es zu tun" - deshalb habe ich die Warnung hinzugefügt ... Keine Beleidigung ! – khebbie

1

Statt eine Arraylist zu verwenden, wenn Sie ein Wörterbuch-Objekt verwenden, dann können Sie den Namen speichern und den Wert.

So etwas sollte es tun

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() 
+0

Ich mag diese Idee und werde diese in Zukunft nutzen. Ich war nicht sicher, wie man ein Wörterbuch benutzt. +1 – Eric

1

Statt die Datenquelle/databind() Ansatz der Verwendung, könnten Sie einfach die Listenelemente erstellen und fügen Sie sie in Ihre Dropdownlist.

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 
1

Wie wäre es mit diesem?

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 
+0

Große Antwort! +1 – Eric

2

Sie sind bereits den Leser mit so nur Pop, die in eine Datentabelle und binden:

//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() 
+0

Ich mag diese Idee wirklich! +1. Hab noch nie darüber nachgedacht – Eric

Verwandte Themen