正确填充asp.net中的下拉列表

时间:2013-02-06 05:56:50

标签: asp.net sql sqldatasource sqldatareader

我是asp.net的新手,我想问一下在填充asp.net下拉列表方面哪些更合适?使用数据源或使用sqldatareader和for循环。

我正在使用sqldatareader和for循环,这是我的示例代码:

For i = 1 To 20
            etc.CommandText = "select Classification from schemaItemDetails.AssetClassification where AC_ID = " & i & ""
            Dim dr As SqlDataReader = etc.ExecuteReader
            While (dr.Read())
                ddoneclassification.Items.Add(dr.GetString(0))
            End While
            dr.Close()
        Next

使用sqldatasource和这个有区别吗?我从不使用sqldatasource来填充下拉列表。

4 个答案:

答案 0 :(得分:1)

从我的观点来看,最简单和最好的解决方案是设置DropDownList的DataSource属性。在这种情况下,所有必需的作业都在场景后完成,您不必考虑数据库服务器和Web服务器之间的同步数据。

另外,如果我是你,我会修改sql,以便只有一个请求被发送到数据库服务器,即

"select Classification from schemaItemDetails.AssetClassification where AC_ID between 1 and 20"

答案 1 :(得分:0)

取代循环,获取查询中的20个项目(SELECT TOP 20 ID,Name from YourTable WHERE ..)并将其绑定到您的下拉控件

ddoneclassification.DataSource=dr
ddoneclassification.DataTextField="Name"  
ddoneclassification.DataValueField="ID"
ddoneclassification.DataBind()

假设您在查询的结果集中有2个名为Name和ID的字段。

答案 2 :(得分:0)

这与您的几乎相同,但“while”循环已被删除,并替换为将返回更多结果的查询。 Read()方法每次调用时都会递增索引,这就是每次循环检查发生时,所以你的原始代码几乎没问题。

数据绑定是另一种选择,但这肯定是有效的。我当然不会认为这是“错误的”。

etc.CommandText = "select Classification from schemaItemDetails.AssetClassification where AC_ID between 1 and 20"
Dim dr As SqlDataReader = etc.ExecuteReader
While (dr.Read())
    ddoneclassification.Items.Add(dr.GetString(0))
End While
dr.Close()

注意事项:不同的数据库以不同的方式处理“BETWEEN”,因此请检查您的工作方式。您可能必须使用where AC_ID>= 1 and AC_ID>=20,具体取决于您的数据库包含/排除的边界。

this page底部的更多信息。

答案 3 :(得分:0)

我认为您应该使用数据源来填充下拉列表。只需选择下拉列表的数据源并进行配置即可。 Sqldatareader主要用于以前向顺序方式读取数据,而数据源用于在数据库和网页之间建立连接。

观看此视频:http://www.youtube.com/watch?v=sOE_hA2NLBI