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

DropDownList 不适用于 SqlDataReader

假设您的下拉列表已经填充了年份列表,则需要设置其值而不是设置其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);
}

延伸阅读和替代解决方案:

  • 从数据库填充下拉列表的正确方法是什么?