C# 在LinqDataSource中找不到控件,其中包含控件参数

C# 在LinqDataSource中找不到控件,其中包含控件参数,c#,linq,gridview,C#,Linq,Gridview,我正在尝试设置一个下拉列表来过滤gridview。以下是我初始化ddl的方式: public partial class MyClass : System.Web.UI.Page { DropDownList brList; protected void Page_Init(object sender, EventArgs e) { brList = new DropDownList(); brList.ClientIDMode = System.Web.UI.Cl

我正在尝试设置一个下拉列表来过滤gridview。以下是我初始化ddl的方式:

public partial class MyClass : System.Web.UI.Page
{
  DropDownList brList;

  protected void Page_Init(object sender, EventArgs e)
  {
    brList = new DropDownList();
    brList.ClientIDMode = System.Web.UI.ClientIDMode.Static;
    brList.ID = "ddlBR";
  }

...
稍后在gridview的prerender事件中,我构建了一个新的gridview行,将数据添加到下拉列表中,并将其插入gridview的第一行:

  //filter for BR
  TableHeaderCell brCell = new TableHeaderCell();
  brList.AutoPostBack = true;
  brList.Items.Add(new ListItem(" ", "%"));
  brList.DataSource = ldsBrCodes;
  brList.AppendDataBoundItems = true;
  brList.DataTextField = "BR";
  brList.DataValueField = "BR";
  brList.DataBind();
  brCell.Controls.Add(brList);
  theNewRow.Cells.Add(brCell);
<asp:LinqDataSource ID="ldsMyLDS" runat="server" 
    ContextTypeName="DataClassesDataContext" EntityTypeName="" 
    TableName="vwMyReport"  AutoGenerateWhereClause="true">
    <WhereParameters>
      <asp:Parameter DefaultValue="W" Name="MPC" Type="String" />
      <asp:ControlParameter Name="BR" ControlID="ddlBR" Type="String" />
    </WhereParameters>
  </asp:LinqDataSource>
下面是填充gridview的LinqDataSource:

  //filter for BR
  TableHeaderCell brCell = new TableHeaderCell();
  brList.AutoPostBack = true;
  brList.Items.Add(new ListItem(" ", "%"));
  brList.DataSource = ldsBrCodes;
  brList.AppendDataBoundItems = true;
  brList.DataTextField = "BR";
  brList.DataValueField = "BR";
  brList.DataBind();
  brCell.Controls.Add(brList);
  theNewRow.Cells.Add(brCell);
<asp:LinqDataSource ID="ldsMyLDS" runat="server" 
    ContextTypeName="DataClassesDataContext" EntityTypeName="" 
    TableName="vwMyReport"  AutoGenerateWhereClause="true">
    <WhereParameters>
      <asp:Parameter DefaultValue="W" Name="MPC" Type="String" />
      <asp:ControlParameter Name="BR" ControlID="ddlBR" Type="String" />
    </WhereParameters>
  </asp:LinqDataSource>

我已经将它添加到gridview PreRender事件的最后一行,但它仍然表示找不到它。什么时候可以添加参数以便找到底层控件?

您需要将控件添加到层次结构中,即使它没有在Init中填充/完成,我想为什么您不能直接将ddlBR放入页面标记中,而不是以编程方式实例化它?动态控件很难正确设置,如果不必这样做,几乎总是很容易。我会将其添加到标记中,但我希望在gridview的第一行中有一整行过滤器。我想我可以在gridview之外构建一行,但是匹配列宽会很棘手。我更希望能够将过滤器放在呈现表的第一个tr中