我有5个名为lblQuestion1,lblQuestion2,lblQuestion3的标签......并且作为下面循环的一部分,当i = 0时,我想要lblQuestion1.Text = reader [“answer1”]。ToString(); ......
i = 1 - > lblQuestion2.Text = reader [“answer1”]。ToString(); ...
i = 2 - > lblQuestion3.Text = reader [“answer1”]。ToString(); ......
然而,这不起作用,所以有人可以建议另一种方法。
for (int i = 0; i < 5; i++)
{
try
{
conn.Open();
string cmdText = "SELECT * FROM questions ORDER BY RAND() LIMIT 1";
MySqlCommand cmd = new MySqlCommand(cmdText, conn);
reader = cmd.ExecuteReader();
if (reader.Read())
{
if (!(list.Contains(reader["question_id"].ToString())))
{
list.Add(reader["question_id"].ToString());
//lblQuestion[i+1].Text = reader["answer1"].ToString();
}
}
else
{
lblError.Text = "(no questions found)";
}
reader.Close();
}
catch
{
lblError.Text = "Database connection error - failed to insert record.";
}
finally
{
conn.Close();
}
}
答案 0 :(得分:3)
您可以将对标签的引用放在数组中并使用它进行访问。我在表单上放了五个标签(将其名称作为默认名称)并使用此代码作为示例:
private void SetLabelsText()
{
// Put references to the labels in an array
Label[] labelsArray = { label1, label2, label3, label4, label5 };
for (int i = 0; i < labelsArray.Count(); i++)
{
labelsArray[i].Text = "I am label " + (i + 1).ToString();
}
}
private void Form1_Load(object sender, EventArgs e)
{
SetLabelsText();
}
答案 1 :(得分:1)
回答您对我的评论的评论。由于FindControl
将字符串作为输入,因此您只需使用要查找的组件名称创建字符串。 请注意,您必须使用标签所在容器的FindControl方法。
来自Link(强调我的):
使用FindControl从代码隐藏页面中的函数访问控件,访问位于另一个容器内的控件,或者在调用者无法直接访问目标控件的其他情况下。 仅当控件直接包含在指定容器中时,此方法才会找到控件;也就是说,该方法不会在控件中的控件层次结构中进行搜索。有关如何在不知道其直接容器时查找控件的信息,请参见如何:按ID访问服务器控件。
所以这样的事情对你有用。
((Label) this.FindControl("lblQuestion" + (i+1))).Text = reader["answer" + (i+1)].ToString();