2012-06-22 4 views
0

Я хочу найти элемент управления (гиперссылку) в gridview. На основе значения элемента управления я хочу включить или отключить гиперссылку. Я пробовал вот так. Но я всегда получаю нуль.Не удалось найти элемент управления в gridview

protected void gridResult_RowDataBound(object sender, GridViewRowEventArgs e) { 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     HyperLink status = e.Row.FindControl("id") as HyperLink; 
     if (status != null && status.Text == "AAAA") { 
      status.Enabled = false; 
     } 
    } 
} 

Пожалуйста, помогите.

+2

'FindControl()' не является рекурсивной, поэтому, если гиперссылка не является прямым потомком 'Row', то он не будет найден. Возможно, вам понадобится реализовать свою собственную рекурсивную версию, чтобы получить необходимую функциональность. См. Http://msdn.microsoft.com/en-us/library/486wc64h.aspx для получения дополнительной информации. – dlev

+0

привет, вы можете отправить свой код aspx –

+0

Как заявил Агилас, ваш код ASPX для GridView необходим, если ответы ниже не решили вашу проблему. – Trisped

ответ

2

Ваше «id» значение очень подозрительно. Мои деньги связаны с тем, что вы используете неправильное имя управления: FindControl("id!!!!!!!").

я ожидал бы увидеть что-то вроде:

HyperLink status = e.Row.FindControl("hlStatus") as HyperLink; 

Если вы действительно поставляете правильное имя управления (YUCK), то это может быть, что ваш контроль гиперссылке вложенное слишком глубоко, и в этом случае, вы нужно будет «обходить» свою иерархию управления, ища ее.

0

@dlev абсолютно корректен, элементы управления часто вложены, поэтому вам нужно будет создать свою собственную функцию, чтобы найти то, что ищете, вы можете передать эту функцию вашей контрольной коллекции (e.Row.Controls()) и ваш идентификатор

private HyperLink FindControl(ControlCollection page, string myId) 
    { 
     foreach (Control c in page) 
     { 
      if ((HyperLink)c.ID == myId) 
      { 
       return (HyperLink)c; 
      } 
      if (c.HasControls()) 
      { 
       FindControl(c.Controls, myId); 
      } 
     } 
     return null; //may need to exclude this line 
    } 
Смежные вопросы