C# 使用MySQL reader填充许多DropDownList
我有10个下拉列表DDLQuestion1ID、DDLQuestion2ID、DDLQuestion3ID。。。我想用数据库中的数据填充它。但是,以下代码仅填充DDLQuestion1ID。为什么会这样?用相同的数据填充所有10个数据的最有效方法是什么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
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填充数据表并将其用作数据源。