2013-05-30 3 views
0

Я пытаюсь реализовать пейджинг с помощью reapeter, который создает таблицу. Проблема в том, что я добавляю кнопки внутри tr, но когда я нажимаю на них, ничего не происходит, если я помещаю точку останова внутри своего обработчика кликов.Repeater Paging, динамические кнопки

Создание кнопки

private void CreatePaging(PlaceHolder literal) 
    { 
     int numPage = (totalItems/ITEMS_PER_PAGE); 
     if (totalItems % ITEMS_PER_PAGE > 0) numPage++; 



     literal.Controls.Add(CreateButton("<<", "b")); 
     for (int i = 0; i < numPage; i++) { 



      if (currentPageIndex == i) 
      { 
       Label lbl = new Label(); 
       literal.Controls.Add(lbl); 
       lbl.Text = " " + (i + 1).ToString() + " ";  
      } 
      else { 
       literal.Controls.Add(CreateButton((i+1).ToString(), (i+1).ToString())); 
      } 

     } 
     literal.Controls.Add(CreateButton("&gt;&gt;", "f")); 
    } 



    LinkButton CreateButton(string title, string index) { 
     LinkButton lnk = new LinkButton(); 
     lnk.ID = index.ToString(); 
     lnk.Text = title; 
     lnk.CommandArgument = index.ToString(); 
     lnk.Click += new EventHandler(PageBtnClicked); 
     return lnk; 
    } 

ответ

1

Проверьте, когда вы вызываете метод CreatePaging() во время жизненного цикла страницы. Его нужно вызывать во время либо Page_Init, либо Page_Load.

Если после этого вызывается, элементы управления не будут созданы к тому моменту, когда ASP.NET обрабатывает обратный вызов и не знает, какой обработчик должен передать событие нажатия кнопки.

0

На вашем Repeater в разметке, можно добавить OnItemCommand = "rptMystuff_ItemCommand"

И в вашей следующей странице Кнопка/LinkButton Имя_команды = "СледующаяСтраница"

Затем в вашем коде за

protected void rptMyStuff_ItemCommand(object sender, RepeaterCommandEventArgs e) 
    { 
     if (e.CommandName == "NextPage") 
     { 
       //Code to switch pages 
     } 
     if (e.CommandName == "PreviousPage") 
     { 
       //More code 
     } 
    } 

Редактировать:

О, и для запоминания того, на какой странице вы находитесь, может также храниться, чем в HiddenField на веб-странице. Что-то вроде

 public int PageNum 
     { 
      get { return string.IsNullOrEmpty(hfPageNum.Value) ? 0 : int.Parse(hfPageNum.Value); } 
      set { hfPageNum.Value = value.ToString(CultureInfo.InvariantCulture); } 
     } 
+0

Спасибо за последний бит, я буду использовать его. –

+0

@ Dr.DenisMcCracleJizz Да, удобно использовать скрытые поля, завернутые в свойства. Каждый пост назад помнит, что вы в него вложили, и вам не нужно использовать память сеанса –

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