2009-06-09 51 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,數據訪問代碼和視圖代碼在同樣的情況下,這只是演示代碼 - 不在家裏做這個孩子! – khebbie 2009-06-09 15:46:25

+0

@ khebbie:很明顯。但我認爲Eric更關心填充組合框而非數據訪問。如果他想將它包裝到另一個物體中進行封裝,那就取決於他。但他應該這樣做。你聽到我了,埃裏克? – Welbog 2009-06-09 15:47:58

+0

@Welbog我以爲你會知道這一點,它只是一些孩子可能飛過來看到這個,並認爲:「哦!這就是做到這一點的方式」 - 這就是爲什麼我加了警告...... 沒有得罪! – khebbie 2009-06-09 15:50:21

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

而不是使用數據源/數據綁定()方法,你可以簡單地創建列表項,並將它們添加到您的下拉列表。

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