在循环中填充标签

时间:2014-07-05 17:11:56

标签: c# asp.net loops label

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

2 个答案:

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