2009-03-05 7 views
8

GridView의 헤더에 DropDownList를 갖고 싶습니다. 내 코드 숨김에서 액세스 할 수없는 것 같습니다. 여기에는 HeaderTemplate입니다 :내 GridView의 HeaderTemplate에서 컨트롤에 액세스하는 방법

<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을 반환합니다. 컨트롤에 액세스하려면 어떻게합니까? 리피터와

답변

5

,이 같은 OnItemDataBoundEvent에서의 FindControl을 사용하여는 HeaderTemplate 항목에 액세스 :

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

있는 GridViews에 대한이 작품뿐만 아니라합니까?

2
protected void ObjectDataSource1__RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Header) 
     { 
      DropDownList typeFilter = (DropDownList)GridView1.FindControl("TypeFilter"); 
     } 
    } 
0
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(); 
} 
} 
} 
2
private void GetDropDownListControl() 
    { 
     DropDownList TypeFilter = ((DropDownList)this.yorGridView.HeaderRow.FindControl("TypeFilter")); 
    } 
0

즉 필요한 것 인 경우, 행 - 데이터 바인딩하지 않고는 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

관련 문제