我是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来填充下拉列表。
答案 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主要用于以前向顺序方式读取数据,而数据源用于在数据库和网页之间建立连接。