2013-12-09 2 views
1

У меня есть код ниже, который работает по назначению; когда выбран переключатель, я хочу, чтобы событие CheckChanged добавило элемент управления в местозаполнитель StatusBar. Как я могу ссылаться на этот элемент управления из события? Любая обратная связь будет оценена.Правильно Ссылка на ASP Placeholder Programatically

public void Page_Load(object sender, EventArgs e) 
    { 

      for (int T = 0; T <= 26; T++) 
      { 
       Label x = new Label(); 
       x.ID = T.ToString(); 
       x.Text = "orem ipsum dolor sit amet, consectetur adipiscing elit. Nulla blandit id felis ac volutpat. Aenean tempor faucibus est, ac feugiat libero egestas sit amet. Aliquam"; 

       Label y = new Label(); 
       y.ID = "Title_" + T.ToString(); 
       y.Text = "Title " + T.ToString(); 



       RadioButton Radio1 = new RadioButton(); 
       Radio1.ID = "R_" + T.ToString(); 
       Radio1.Text = "Yes"; 
       Radio1.GroupName = "Radio_" + T.ToString(); 
       Radio1.CheckedChanged += new EventHandler(this.CheckedChanged); 
       Radio1.AutoPostBack = true; 

       RadioButton Radio2 = new RadioButton(); 
       Radio2.ID = "RX_" + T.ToString(); 
       Radio2.Text = "No"; 
       Radio2.GroupName = "Radio_" + T.ToString(); 
       Radio2.CheckedChanged += new EventHandler(this.CheckedChanged); 
       Radio2.AutoPostBack = true; 

       PlaceHolder StatusBar = new PlaceHolder(); 
       StatusBar.ID = "status_" + T.ToString(); 


       PlaceHolder pcl = new PlaceHolder(); 
       pcl.ID = "test_" + T.ToString(); 
       pcl.Controls.Add(y); 
       pcl.Controls.Add(new LiteralControl("<br>")); 
       pcl.Controls.Add(x); 
       pcl.Controls.Add(new LiteralControl("<br>")); 
       pcl.Controls.Add(Radio1); 
       pcl.Controls.Add(Radio2); 
       pcl.Controls.Add(new LiteralControl("<br><br>")); 
       form1.Controls.Add(pcl); 
       form1.Controls.Add(StatusBar); 
      } 
     } 


    protected void CheckedChanged(object sender, EventArgs e) 
    { 
     RadioButton tRadio = (RadioButton)sender; 

     if (tRadio.Text == "Yes") 
     { 
      Statusbar.Controls.Add(somecontrol); 
     } 


    } 
+0

Я не могу понять, что это ваша проблема именно? И что такое somecontrol ?? –

+0

somecontrol был просто владельцем места. Предположим, что я меняю эту строку на StatusBar.Controls.Add (новый LiteralControl («
»>)); , Я получаю сообщение об ошибке «StatusBar не существует в текущем контексте». –

+0

Мне просто удалось заставить его работать, добавив Placeholder StatusBar; вне события Page_Load. Есть ли другой способ сделать это? –

ответ

1

Чтобы найти элемент управления StatusBar, вы должны использовать FindControl. Ваша проблема будет решена, если вы измените тип StatusBar от PlaceHolder Кому `Panel.

Обновление: вам не нужно использовать Panel Управление вместо PlaceHolder, но PlaceHolder генерировать тег, который поможет вам настроить внешний вид строки состояния. I Измените свой обработчик CheckedChanged, чтобы найти элемент управления StatusBar и добавьте в него буквальный текст.

Проверьте следующий код:

protected void Page_Load(object sender, EventArgs e) 
    { 
     for (int T = 0; T <= 26; T++) 
     { 
      Label x = new Label(); 
      x.ID = T.ToString(); 
      x.Text = "orem ipsum dolor sit amet, consectetur adipiscing elit. Nulla blandit id felis ac volutpat. Aenean tempor faucibus est, ac feugiat libero egestas sit amet. Aliquam"; 

      Label y = new Label(); 
      y.ID = "Title_" + T.ToString(); 
      y.Text = "Title " + T.ToString(); 



      RadioButton Radio1 = new RadioButton(); 
      Radio1.ID = "R_" + T.ToString(); 
      Radio1.Text = "Yes"; 
      Radio1.GroupName = "Radio_" + T.ToString(); 
      Radio1.CheckedChanged += new EventHandler(this.CheckedChanged); 
      Radio1.AutoPostBack = true; 

      RadioButton Radio2 = new RadioButton(); 
      Radio2.ID = "RX_" + T.ToString(); 
      Radio2.Text = "No"; 
      Radio2.GroupName = "Radio_" + T.ToString(); 
      Radio2.CheckedChanged += new EventHandler(this.CheckedChanged); 
      Radio2.AutoPostBack = true; 

      Panel StatusBar = new Panel(); 

      StatusBar.ID = "status_" + T.ToString(); 


      PlaceHolder pcl = new PlaceHolder(); 
      pcl.ID = "test_" + T.ToString(); 
      pcl.Controls.Add(y); 
      pcl.Controls.Add(new LiteralControl("<br>")); 
      pcl.Controls.Add(x); 
      pcl.Controls.Add(new LiteralControl("<br>")); 
      pcl.Controls.Add(Radio1); 
      pcl.Controls.Add(Radio2); 
      pcl.Controls.Add(new LiteralControl("<br><br>")); 
      form1.Controls.Add(pcl); 
      form1.Controls.Add(StatusBar); 
     } 

     //form1.Controls.Add(new PlaceHolder { ID = "MyStatusBar" }); 
    } 

    protected void CheckedChanged(object sender, EventArgs e) 
    { 
     RadioButton tRadio = (RadioButton)sender; 
     var T = tRadio.ID.Split('_')[1]; 

     var statusBarID = "status_" + T; 

     var StatusBar = tRadio.Parent.FindControl(statusBarID) as Panel; 

     if (tRadio.Text == "Yes") 
     { 
      StatusBar.Controls.Add(new LiteralControl("SampleText")); 
     } 


    } 
Смежные вопросы