Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net中下拉列表的正确动态填充_Asp.net_Sql_Sqldatasource_Sqldatareader - Fatal编程技术网

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

asp.net中下拉列表的正确动态填充,asp.net,sql,sqldatasource,sqldatareader,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 &

我是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填充下拉列表。

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

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

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

不要执行循环,而是获取查询中的20项(
从表中选择前20个ID、名称,其中..
)并将其绑定到下拉控件

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

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

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

数据绑定是另一种选择,但这肯定是有效的。我当然不会认为它是“错误的”。 注意:不同的数据库处理“中间”的方式不同,所以请检查您的数据库如何处理。您可能必须使用
,其中AC_ID>=1和AC_ID>=20
,具体取决于数据库包含/排除的边界


更多关于这方面的信息,请参阅的底部。

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

请看这段视频:

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