2014-10-21 5 views
0

Im пытается создать radgrid, в котором все значения являются ссылками. Это код, который у меня есть до сих пор, он делает все правильные кнопки ссылок значений, но когда они нажимаются на событие клика, не срабатывает, страница возвращается и все кнопки уходят. У меня этот код в событии OnitemDataBound, которое вызывается, когда сетка загружается при загрузке страницы.Динамически создавать поля в radgrid clickable

foreach (GridColumn col in gridOver.MasterTableView.RenderColumns) 
{ 
    if (col.UniqueName == "approved" || col.UniqueName == "submitted" 
    || col.UniqueName == "rejected" || col.UniqueName == "notSub") 
    { 
     GridDataItem dataItem = (GridDataItem)e.Item; 
     LinkButton btn = new LinkButton(); 
     btn.ID = item.Cells[2].Text + "-" + x.ToString(); 
     btn.Text = dataItem[col.UniqueName].Text; 
     btn.ForeColor = System.Drawing.Color.Black; 
     btn.Click += gridOver_Click; 
     dataItem[col.UniqueName].Controls.Add(btn); 
     x++; 
    } 
} 

Я также попытался это сделать:

btn.Click += new EventHandler(gridOver_Click); 

и

btn.Click += new System.EventHandler(gridOver_Click); 

Это то, что она выглядит, как раньше один из feilds щелкают: http://puu.sh/ckNyU/a2e570a8e4.png

Это как это выглядит после: http://puu.sh/ckNA2/acfe7f3455.jpg

Все поля переходят от кнопок к простому тексту, и событие не срабатывает.

любая помощь была бы потрясающей, спасибо!

+0

Где этот код? Нагрузка на страницу? Обычно хорошо быть краткими с примерами кода на SO, но я думаю, нам, возможно, нужно будет увидеть больше. –

+0

Этот код находится в событии OnitemDataBound. Он вызывается при загрузке сетки, которая возникает при загрузке страницы. Какая еще информация потребуется? –

ответ

0

Динамически добавляется LinkButtons. В ASP.NET Web Forms динамические элементы управления необходимо воссоздавать на всех последующих обратных страницах. Также необходимо воссоздать их с теми же идентификаторами. Идентификаторы важны для механизма событий.

Согласно Telerik documentation:

ItemDataBound событие вызывается только, когда сетка связывается с данными.

тогда:

ItemCreated события вызывается, когда сетка привязки к данным и когда сетка является обязательной из ViewState, следовательно, после каждого постбэка - только до наступления события Load.

Я не знаю точно, что вы пытаетесь достичь, но для того, чтобы ваши кнопки ссылок, присутствующих на каждом постбэка, я хотел бы предложить переместить свой код внутри ItemCreated события:

protected void gridOver_ItemCreated(object sender, GridItemEventArgs e) 
{ 
    if (e.Item is GridDataItem) 
    { 
     // ... declare and init x somehow  
     foreach (GridColumn col in gridOver.MasterTableView.RenderColumns) 
     { 
      if (col.UniqueName == "rejected") 
      { 
       GridDataItem dataItem = (GridDataItem)e.Item; 
       LinkButton btn = new LinkButton(); 
       btn.ID = dataItem.Cells[2].Text + "-" + x.ToString(); 
       btn.Text = dataItem[col.UniqueName].Text; 
       btn.ForeColor = System.Drawing.Color.Black;          
       btn.Click += gridOver_Click; 
       dataItem[col.UniqueName].Controls.Add(btn); 
       x++; 
      } 
     } 
    } 
} 

Пожалуйста, обратите внимание что ItemCreated уволен до элемент привязан к данным. Таким образом, данные по-прежнему не находятся в текстовых или элементах управления ячейками. В ItemDataBound все доступно. Это может быть проблемой, если вам нужно получить доступ к тексту ячеек, чтобы создать свои кнопки ссылок.

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