Как получить доступ к элементу управления в шаблоне Header моего GridView - PullRequest
9 голосов
/ 05 марта 2009

Я хочу иметь DropDownList в заголовке моего GridView. В моем коде я не могу получить к нему доступ. Вот шаблон заголовка:

<asp:TemplateField SortExpression="EXCEPTION_TYPE">
    <HeaderTemplate>
        <asp:Label ID="TypeId" runat="server" Text="Type" ></asp:Label>
        <asp:DropDownList ID="TypeFilter" runat="server" AutoPostBack="true">
        </asp:DropDownList>
    </HeaderTemplate>
    ...
</asp:TemplateField>

А вот фрагмент кода, где я пытаюсь получить доступ к элементу управления TypeFilter.

protected void ObjectDataSource1_Selected(object sender, 
                                          ObjectDataSourceStatusEventArgs e)
{
    DataTable dt = (DataTable)e.ReturnValue;
    int NumberOfRows = dt.Rows.Count;
    TotalCount.Text = NumberOfRows.ToString();
    DataView dv = new DataView(dt);
    DataTable types = dv.ToTable(true, new string[] { "EXCEPTION_TYPE" });
    DropDownList typeFilter = (DropDownList)GridView1.FindControl("TypeFilter");
    typeFilter.DataSource = types;
    typeFilter.DataBind();

}

Вы заметите, что я пытаюсь использовать FindControl для получения ссылки на элемент управления DropDownList. Этот вызов возвращает ноль вместо возврата элемента управления. Как получить доступ к элементу управления?

Ответы [ 5 ]

5 голосов
/ 13 марта 2009

С помощью Repeaters вы получаете доступ к элементам headerTemplate с помощью FindControl в OnItemDataBoundEvent следующим образом:

RepeaterItem item = (RepeaterItem)e.Item;
if (item.ItemType == ListItemType.Header) {
    item.FindControl("control"); //goes here
}

Это работает и для GridView?

2 голосов
/ 18 июня 2013
private void GetDropDownListControl()
    {
        DropDownList TypeFilter = ((DropDownList)this.yorGridView.HeaderRow.FindControl("TypeFilter"));
    }
2 голосов
/ 09 августа 2011
protected void ObjectDataSource1__RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
             DropDownList typeFilter = (DropDownList)GridView1.FindControl("TypeFilter");
        }
     }
0 голосов
/ 23 августа 2013

Попробуйте найти элемент управления в шаблоне Header без привязки данных строки, если это то, что нужно:

private void Lab_1_GV1_Populate_SearchText()
    {
        GridView GV1 = (GridView)FindControl("Lab_1_GV1");
        TextBox TXB1 = (TextBox)GV1.HeaderRow.FindControl("Lab_1_TX2GV1");
    }

Спасибо

Ruchir

0 голосов
/ 22 мая 2012
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
DropDownList ddlLocation = (DropDownList)e.Row.FindControl("ddlLocation");
ddlLocation.DataSource = dtLocation;
ddlLocation.DataBind();
}
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...