2009-03-05 25 views
8

Tôi muốn có một DropDownList trong tiêu đề của GridView của tôi. Trong codebehind của tôi, tôi dường như không thể truy cập nó. Dưới đây là HeaderTemplate:Làm cách nào để truy cập một điều khiển trong HeaderTemplate của 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> 

Và đây là phần trong mã phía sau nơi tôi đang cố gắng truy cập điều khiển 'LoạiFilter'.

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(); 

} 

Bạn sẽ thấy rằng tôi đang cố gắng sử dụng FindControl để tham chiếu đến Kiểm soát DropDownList. Cuộc gọi này trả về null thay vì trả lại điều khiển. Làm cách nào để tôi có quyền truy cập vào bộ điều khiển?

Trả lời

5

Với bộ lặp, bạn truy cập vào mục headerTemplate bằng cách sử dụng FindControl trong OnItemDataBoundEvent như thế này:

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

Liệu tác phẩm này với GridViews là tốt?

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

Hãy thử này để tìm một điều khiển trong HeaderTemplate mà không có một hàng dữ liệu-ràng buộc, nếu đó là những gì cần thiết:

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

Cảm ơn

Ruchir

Các vấn đề liên quan