2009-06-09 5 views
0

У меня есть dropdownlist, который я хочу заполнить определенным значением и конкретным текстом. Я не использую datasource, но я вручную делаю соединение и получаю данные в коде. Как я могу заполнить это dropdownlist? Если я прочитаю данные с помощью datareader и увеличиваю массив, я получаю либо значение, либо текст. Это то, что я до сих пор, но это совершенно неправильно:Как я могу заполнить выпадающий список данными?

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

Как я могу получить эту работу без того, чтобы создать объект класса для Department? В любом случае, или я должен создать объект класса?

ответ

4

Есть ли какая-то конкретная причина, по которой вы можете сделать это обычным способом?

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, DATAACCESS код и просматривать код в том же контексте, это только демо-код - не делайте это дома дети !!! – khebbie

+0

@ khebbie: Ну, очевидно. Но я думаю, что Эрик больше заботится о том, чтобы заполнить поле со списком, а не доступ к данным. Если он хочет обернуть его в другой объект для инкапсуляции, который зависит от него. Он должен это сделать. Ты слышишь меня, Эрик? – Welbog

+0

@Welbog Я думал, что вы это знаете, просто ребенок может пролететь мимо и увидеть это и подумать: «О, это способ сделать это» - вот почему я добавил предупреждение ... Без обид ! – khebbie

1

Вместо использования ArrayList, если вы используете объект словаря, вы можете сохранить имя и значение.

Что-то, как это должно сделать это

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

Мне нравится эта идея и буду использовать ее в будущем. Я не был уверен, как использовать словарь. +1 – Eric

1

Вместо того, чтобы использовать подход DataSource/DataBind(), вы можете просто создать элементы списка и добавить их в 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

Как насчет этого?

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

Отличный ответ! +1 – Eric

2

Вы уже используете читателя так просто поп, что в DataTable и обязывать:

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

Мне очень нравится эта идея! +1. Никогда даже не думал об этом – Eric

Смежные вопросы