Как получить доступ к элементу управления в HeaderTemplate моего GridView
8 minty [2009-03-05 21:24:00]
Я хочу иметь DropDownList в заголовке моего GridView. В My codebehind я не могу получить доступ к нему. Вот заголовок:
<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. Этот вызов возвращает null вместо возврата элемента управления. Как получить доступ к элементу управления?
c# asp.net findcontrol
5 ответов
5 iZ. [2009-03-13 21:54:00]
С ретрансляторами вы получаете доступ к элементам headerTemplate, используя FindControl в OnItemDataBoundEvent, как это:
RepeaterItem item = (RepeaterItem)e.Item;
if (item.ItemType == ListItemType.Header) {
item.FindControl("control"); //goes here
}
Это тоже работает для GridViews?
2 user2077087 [2013-06-18 15:52:00]
private void GetDropDownListControl()
{
DropDownList TypeFilter = ((DropDownList)this.yorGridView.HeaderRow.FindControl("TypeFilter"));
}
2 sathish kumar sandupatla [2011-08-09 14:16:00]
protected void ObjectDataSource1__RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
DropDownList typeFilter = (DropDownList)GridView1.FindControl("TypeFilter");
}
}
0 user2366118 [2013-08-23 13:19:00]
Попробуйте найти элемент управления в HeaderTemplate без привязки к строковым данным, если это необходимо:
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 Mubashir Ahmed [2012-05-22 16:14:00]
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();
}
}
}