2009-06-09 53 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()