您好我正在尝试让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();
}
答案 0 :(得分:1)
假设您的下拉列表已填充年份列表,您需要设置其值而不是设置其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();
请注意,DataTextField和DataValue字段表示数据源中对象的属性。
对于像数字这样简单的东西,你也可以一次填充一个下拉列表,而不是使用数据源 - 它最终会得到相同的结果。
答案 1 :(得分:0)
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);
}
进一步阅读和替代解决方案: