0

我是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

4 回答 4

1

从我的角度来看,最简单和最好的解决方案是设置 DropDownList 的 DataSource 属性。在这种情况下,所有必需的工作都在幕后完成,您无需考虑 db 服务器和 web 服务器之间的同步数据。

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

"select Classification from schemaItemDetails.AssetClassification where AC_ID between 1 and 20"
于 2013-02-06T06:08:15.043 回答
0

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

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

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

于 2013-02-06T06:12:49.433 回答
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,具体取决于您的数据库包含/排除的边界。

有关此页面底部的更多信息。

于 2013-02-06T06:21:34.873 回答
0

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

看看这个视频:http ://www.youtube.com/watch?v=sOE_hA2NLBI

于 2013-02-06T06:47:06.703 回答