Не удалось найти элемент управления в 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; 
        }
    }
}

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


person Ranjith    schedule 22.06.2012    source источник
comment
FindControl() не является рекурсивным, поэтому, если гиперссылка не является прямым потомком Row, она не будет найдена. Возможно, вам потребуется реализовать собственную рекурсивную версию, чтобы получить желаемую функциональность. См. msdn.microsoft.com/en-us/library/486wc64h.aspx для получения дополнительной информации.   -  person dlev    schedule 23.06.2012
comment
привет, вы можете отправить свой код aspx   -  person Aghilas Yakoub    schedule 23.06.2012
comment
Как заявил Агилас, ваш код ASPX для GridView требуется, если приведенные ниже ответы не помогли решить вашу проблему.   -  person Trisped    schedule 25.06.2012


Ответы (2)


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

Я ожидал увидеть что-то вроде:

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

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

person Jeremy    schedule 22.06.2012

@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
    }
person e wagness    schedule 22.06.2012