#c# #asp.net #loops #label
#c# #asp.net #циклы #метка
Вопрос:
У меня есть 5 меток с названиями lblQuestion1, lblQuestion2, lblQuestion3… и как часть цикла ниже, когда i = 0, я хочу lblQuestion1.Text = reader[«ответ1»].toString(); …
i=1 —> lblQuestion2.Text = reader[«ответ1»].toString(); …
i=2 —> lblQuestion3.Text = reader[«ответ1»].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();
}
}
Комментарии:
1. где вы устанавливаете текст метки??
2. @EhsanSajjad Я хочу установить его там, где я написал комментарий //lblQuestion[i 1]. Text = reader[«ответ1»]. toString();
3. что такое lblQuestion[], где это определено?
4. @EhsanSajjad Ничего и нигде. Я пытаюсь задать текст lblQuestion1, lblQuestion2, lblQuestion3, lblQuestion4, lblQuestion5, но я не уверен, как это сделать.
5. вы можете сделать это таким образом:
lblQuestion1.Text = reader["answer1"].ToString();
Ответ №1:
Вы можете поместить ссылки на метки в массив и получить к ним доступ с помощью этого. Я поместил пять меток в форму (оставив их имена по умолчанию) и использовал этот код в качестве примера:
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();
}
Ответ №2:
Чтобы ответить на ваш комментарий к моему комментарию. Поскольку FindControl
в качестве входных данных используется строка, вы бы просто создали строку с именем компонента, который вы ищете. Имейте в виду, что вы должны использовать метод FindControl контейнера, в котором находятся ваши метки.
По ссылке (выделено мной):
Используйте FindControl для доступа к элементу управления из функции на странице, находящейся за кодом, для доступа к элементу управления, который находится внутри другого контейнера, или в других обстоятельствах, когда целевой элемент управления недоступен напрямую вызывающему. Этот метод найдет элемент управления, только если элемент управления непосредственно содержится в указанном контейнере; то есть метод не выполняет поиск по всей иерархии элементов управления внутри элементов управления. Информацию о том, как найти элемент управления, если вы не знаете его непосредственный контейнер, см. в разделе Как: Доступ к элементам управления сервера по идентификатору.
итак, что-то подобное должно сработать для вас.
((Label) this.FindControl("lblQuestion" (i 1))).Text = reader["answer" (i 1)].ToString();