C# 使用MySQL reader填充许多DropDownList

C# 使用MySQL reader填充许多DropDownList,c#,mysql,asp.net,loops,drop-down-menu,C#,Mysql,Asp.net,Loops,Drop Down Menu,我有10个下拉列表DDLQuestion1ID、DDLQuestion2ID、DDLQuestion3ID。。。我想用数据库中的数据填充它。但是,以下代码仅填充DDLQuestion1ID。为什么会这样?用相同的数据填充所有10个数据的最有效方法是什么 protected void getQuestionIDs() { string connStr = ConfigurationManager.ConnectionStrings["myConnectionString"].Connect

我有10个下拉列表DDLQuestion1ID、DDLQuestion2ID、DDLQuestion3ID。。。我想用数据库中的数据填充它。但是,以下代码仅填充DDLQuestion1ID。为什么会这样?用相同的数据填充所有10个数据的最有效方法是什么

protected void getQuestionIDs()
{
    string connStr = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
    MySqlConnection conn = new MySqlConnection(connStr);
    MySqlDataReader reader;

    string cmdText = "SELECT * FROM questions WHERE module_id=@ModuleID";
    MySqlCommand cmd = new MySqlCommand(cmdText, conn);
    cmd.Parameters.Add("@ModuleID", MySqlDbType.Int32);
    cmd.Parameters["@ModuleID"].Value = ddlModules.SelectedValue;

    try
    {
        conn.Open();
        reader = cmd.ExecuteReader();
        for (int i = 1; i <= 10; i++)
        {
            var ddlQuestion = (DropDownList)FindControl("ddlQuestion" + i.ToString() + "IDs");
            ddlQuestion.DataSource = reader;
            ddlQuestion.DataValueField = "question_id";
            ddlQuestion.DataTextField = "question_id";
            ddlQuestion.DataBind();
            ddlQuestion.Items.Insert(0, new ListItem(string.Empty, "blank"));
        }
        reader.Close();
    }
    catch
    {
        lblError.Text = "Database connection error - failed to get question IDs.";
    }
    finally
    {
        conn.Close();
    }
}

我的猜测是,读卡器是基于流的,仅向前,第一个绑定成功地迭代了数据,而随后的绑定发现数据流位于末尾

我会尝试将数据复制到一个数组中,并尝试绑定到该数组。这里有一个问题可能会有帮助


为什么不使用单个变量,而不是始终搜索同一个控件?这将更有效率,更重要的是,更具可读性。var ddlQuestion=DropDownListFindControlddlQuestion+i.ToString+IDs;//设置所有属性…@TimSchmelter已修改。谢谢,不过当我真的想填充全部10个时,仍然只填充第一个DropDownList。我将使用MySqlDataAdapter填充数据表并将其用作数据源。