У меня есть кусок кода, который создает динамические элементы управления, используя 2 цикла while.
Как вы можете видеть, я вынужден объявлять оба LiteralControls INSIDE каждый цикл while, потому что если я этого не сделаю, puBugList.Controls.Add(lineBreak)
не подтвердит.
В: Почему я не вижу область действия элементов управления внутри цикла while?
//this control is not acknowledged
//LiteralControl lineBreak = new LiteralControl("<br/>");
while (nwReader.Read())
{
int id = (int)nwReader["bid"];
string user = (string)nwReader["buname"];
string prob = (string)nwReader["bproblem"];
string content = id + ". " + user + ": " + prob + "<br/>";
Label lb = new Label();
lb.Text = content;
phBugList.Controls.Add(lb);
//forced to declare 1 here
LiteralControl lineBreak = new LiteralControl("<br/>");
String sqlSelRep = "SELECT * FROM [reply] WHERE bid=@bid";
SqlCommand cmdSelRep = new SqlCommand(sqlSelRep, conn);
cmdSelRep.Parameters.AddWithValue("@bid", id);
SqlDataReader repReader = cmdSelRep.ExecuteReader();
while (repReader.Read())
{
//forced to declare another
LiteralControl lineBreak2 = new LiteralControl("<br/>");one here
string msg = (string)repReader["rmsg"];
Label lbRep = new Label();
lbRep.Text = "Admin: \"" + msg + "\"";
phBugList.Controls.Add(lbRep);
phBugList.Controls.Add(lineBreak2);
}
repReader.Close();
if (Convert.ToInt32(Session["user"]) == 1)
{
phBugList.Controls.Add(lineBreak);
TextBox tbRep = new TextBox();
tbRep.ID = "tb" + id.ToString();
phBugList.Controls.Add(tbRep);
LinkButton butRep = new LinkButton();
butRep.ID = "rep" + id.ToString();
butRep.Text = " Reply";
butRep.Click += InsertReply;
phBugList.Controls.Add(butRep);
LinkButton butDel = new LinkButton();
butDel.ID = "del" + id.ToString();
butDel.Text = " Delete";
butDel.Click += DeleteBug;
phBugList.Controls.Add(butDel);
phBugList.Controls.Add(lineBreak);
}
phBugList.Controls.Add(lineBreak);
}