2012-11-28 16 views
5

Sto provando a filtrare i risultati utilizzando un elenco a discesa per il mio listview.Impossibile trovare il controllo 'x' in ControlParameter 'y'

ho modificato la query di selezione per l'origine dati come segue ...

ListView:

<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
     DataFile="~/App_Data/ASPNetDB.mdb" 
     SelectCommand="SELECT * FROM [tblNames] WHERE [email protected]"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="DropDownList1" Name="Surnames" 
       PropertyName="SelectedValue" /> 
     </SelectParameters> 
    </asp:AccessDataSource> 

DropDownList:

<asp:DropDownList ID="DropDownList1" runat="server" 
     DataSourceID="AccessDataSource2" DataTextField="Genre" 
     DataValueField="NameID" AppendDataBoundItems="true"> 
      <asp:ListItem Value="" Selected ="True" >All Surnames</asp:ListItem> 
</asp:DropDownList> 

    <asp:AccessDataSource ID="AccessDataSource2" runat="server" 
     DataFile="~/App_Data/ASPNetDB.mdb" SelectCommand="SELECT * FROM [tblSurnames]"> 
    </asp:AccessDataSource> 

il nome del controllo corretto viene utilizzato (il anche le stesse maiuscole), ma la pagina in caricamento restituisce Impossibile trovare il controllo "DropDownList1" in "Cognomi" di ControlParameter.

Qualche suggerimento su cosa sto facendo male qui?

EDIT: Ecco la traccia dello stack se aiuta

[InvalidOperationException: Could not find control 'DropDownList1' in ControlParameter 'Surname'.] 
    System.Web.UI.WebControls.ControlParameter.Evaluate(HttpContext context, Control control) +2107838 
    System.Web.UI.WebControls.Parameter.UpdateValue(HttpContext context, Control control) +50 
    System.Web.UI.WebControls.ParameterCollection.UpdateValues(HttpContext context, Control control) +113 
    System.Web.UI.WebControls.SqlDataSource.LoadCompleteEventHandler(Object sender, EventArgs e) +46 
    System.EventHandler.Invoke(Object sender, EventArgs e) +0 
    System.Web.UI.Page.OnLoadComplete(EventArgs e) +9010786 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2350 
+0

Sono 'AccessDataSource' e' DropDownList' in diversi contenitori di denominazione? –

+0

Si trovano in due ContentPlaceHolders diversi all'interno della stessa pagina. – Imran

+2

Quindi il 'ControlID' deve essere preceduto dal' ID' di 'ContentPlaceHolder' che contiene il' DropDownList': http://stackoverflow.com/a/5719348/124386 –

risposta

8

Le ControlID esigenze del prefisso con l'ID del ContentPlaceHolder che contiene la DropDownList:

<asp:ControlParameter 
    Name="Surnames" 
    ControlID="ContentPlaceholderID$DropDownList1" 
    PropertyName="SelectedValue" 
/> 

Vedi anche: https://stackoverflow.com/a/5719348/124386

+0

Ho scoperto che se il controllo è annidato in più elementi devi specificarli tutti, quindi ho trovato qualcosa del tipo: YourContentPlaceHolder $ YourASPxCallbackPanel $ YourASPxPopupControl $ YourASPxComboBox – Trajanus

0

Inoltre, assicurarsi che il controllo di interesse abbia nat = "server". Argh.

Problemi correlati