DropDownList不能与SqlDataReader一起使用

时间:2014-12-03 20:53:44

标签: c# asp.net

您好我正在尝试让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();
    }

2 个答案:

答案 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);
}

进一步阅读和替代解决方案: