2010-06-07 2 views
0

Я использую GridView для отображения записей из базы данных. Также я подключил гиперссылку к GridView с помощью TemplateField. Когда я пытаюсь добавить «OnClick» атрибут гиперссылке внутри события RowDateBound, я получаю следующее сообщение об ошибке ..ArgumentOutOfRangeException был необработанным кодом пользователя - (ASP .net)

GridView1.DataKeys[e.Row.RowIndex].Value = 'GridView1.DataKeys[e.Row.RowIndex]' threw an exception of type 'System.ArgumentOutOfRangeException' 

сообщение = «Индекс находился вне диапазона. Должно быть неотрицательным и меньше размер коллекции \ г \ nParameter. имя: индекс»

Это кодирование внутри RowDataBound mentod ..

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       HyperLink HyperLink1 = (HyperLink)e.Row.FindControl("HyperLink1"); 

//The following line makes the error 
       HyperLink1.Attributes.Add("onclick", "ShowMyModalPopup('" + GridView1.DataKeys[e.Row.RowIndex].Value + "')"); 

      } 
     } 

Это "функция ShowMyModalPopup" в JavaScript

<script type="text/javascript"> 
     function ShowMyModalPopup(userpk) 
     { 
     var modal = $find('ModalPopupExtender1'); 
     modal.show(); 
     WebService.FetchOneUser(userpk,DisplayResult); 
     } 
</script> 

Несмотря на то, что значение индекса равно нулю, оно выбрасывает это исключение. Может кто-нибудь, пожалуйста, объясните мне, почему возникает эта ошибка ..

Большое спасибо заранее ..

ответ

0

Я собираюсь предположить, что причина, это не работает, потому что RowDataBound пожары до GridView фактически получает данные. Причина этого в том, что это конкретное событие используется для управления данными перед окончательным отображением. Таким образом, если вы звоните в этот код:

GridView1.DataKeys[e.Row.RowIndex].Value 

В данный момент нет данных. Если вы можете получить доступ к этому значению по-другому, например, к другому столбцу в строке (у вас есть доступ к самой строке), это был бы лучший способ сделать это. Если нет, то подумайте о добавлении столбца для данных, которые нужно передать в ShowMyModalPopup, а затем спрячьте его на самой сетке. Таким образом, вы можете сформировать гиперссылку на основе самих данных строк и не полагаться на нее уже в GridView.

+0

Как я могу добиться этого .. Можете ли вы пожалуйста, руководство меня .. Я передать «userPK» моей таблицы "пользователей к ShowMyModalPopup() –

+0

Ну, если он уже приходит в GridView (через любой запрос, который вы указали), все, что вам нужно сделать, это использовать код: 'e.Row [" userPK "]. Value', чтобы получить это значение для гиперссылки. Если он еще не входит в экран GridView для отображения, вам нужно будет обновить запрос (или автоматически сгенерированный DataTable), чтобы включить его. Надеюсь это имеет смысл; это трудно объяснить, не зная точных обстоятельств. – drharris

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