10

GridView のヘッダーに DropDownList が必要です。私のコードビハインドでは、アクセスできないようです。ヘッダー テンプレートは次のとおりです。

<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 を返します。コントロールにアクセスするにはどうすればよいですか?

4

5 に答える 5

5

Repeater では、次のように OnItemDataBoundEvent で FindControl を使用して、headerTemplate アイテムにアクセスします。

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

これは GridView でも機能しますか?

于 2009-03-13T18:54:58.080 に答える
3
private void GetDropDownListControl()
    {
        DropDownList TypeFilter = ((DropDownList)this.yorGridView.HeaderRow.FindControl("TypeFilter"));
    }
于 2013-06-18T12:52:54.823 に答える
2
protected void ObjectDataSource1__RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
             DropDownList typeFilter = (DropDownList)GridView1.FindControl("TypeFilter");
        }
     }
于 2011-08-09T11:16:46.333 に答える
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();
}
}
}
于 2012-05-22T13:14:09.177 に答える