DropDownList 不适用于 SqlDataReader
本文关键字:SqlDataReader 适用于 不适用 DropDownList | 更新日期: 2023-09-27 18:32:56
嗨,我正在尝试让DropDownList与SqlDataReader一起使用,但它没有填充DropDownlist。 TextBox.Text Reader正在工作。
这是我正在使用的代码:
using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString))
{
SqlCommand command =
new SqlCommand("SELECT * FROM [datarep].[dbo].[OrderHeader] WHERE [OrderNumber] = '"+OrderNumber+"'", con);
con.Open();
SqlDataReader read = command.ExecuteReader();
while (read.Read())
{
TextBox2.Text = (read["CreatedDate"].ToString());
TextBox3.Text = (read["CreatedBy"].ToString());
CompanyStored = (read["CustomerID"].ToString());
TextBox7.Text = (read["Store_Number"].ToString());
DropDownList1.DataTextField = (read["Year"].ToString());
DropDownList1.DataBind();
}
read.Close();
}
假设您的下拉列表已经填充了年份列表,则需要设置其值而不是设置其DataTextField
- 该属性用于定义文本数据源的列或属性名称,而不是设置所选值本身。
DropDownList1.SelectedValue = read["Year"].ToString();
如果您甚至还没有填充下拉列表,则必须使用数据源(可能是年份列表)提前填充它。例如,假设你想要 2000 年到 2050 年之间的所有年份,这样的东西可能会起作用:
var dataSource = Enumerable.Range(2000, 51)
.Select(x => new { TheYear = x })
.ToArray();
DropDownList1.DataSource = dataSource;
DropDownList1.DataValueField = "TheYear";
DropDownList1.DataTextField = "TheYear";
DropDownList1.DataBind();
请注意,"数据文本字段"和"数据值"字段表示数据源中对象的属性。
对于像数字这样简单的东西,您也可以一次填充一个下拉列表,而不是使用数据源 - 最终结果相同。
SqlDataReader 逐行读取您的数据。如果要使用DataReader,则必须在每次迭代中向DDL添加新的列表项
。像这样尝试:
while (read.Read())
{
/*code omitted*/
var item = new ListItem();
item.Text = read["Year"].ToString();
item.Value = read["Year"].ToString();
DropDownList1.Items.Add(item);
}
延伸阅读和替代解决方案:
- 从数据库填充下拉列表的正确方法是什么?