2010-11-04 5 views
0

J'ai un gridview qui affiche le contenu d'une table de base de données, en utilisant un sqlDataSource. Cette partie (y compris l'insertion, la mise à jour et la suppression de lignes) fonctionne parfaitement. Ce que je veux faire est d'ajouter une fonction de "recherche" pour limiter les lignes retournées à un nom entré par l'utilisateur. J'ai une zone de texte pour le nom à rechercher et un bouton « Rechercher » dans le HeaderTemplate comme tel:Passer la zone de texte dans le modèle d'en-tête gridview en tant que paramètre dans une sélection sqldatasource

<HeaderTemplate> 
    <asp:Button ID="btnShowAll" runat="server" CausesValidation="False" CommandName="ShowAll" Text="Show All" Visible="false" /> 
    <asp:Button ID="btnSearch" runat="server" CausesValidation="True" CommandName="Search" Text="Search" ValidationGroup="vldSearch" /> 
    <asp:TextBox ID="txtSearchName" runat="server"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="vldSearchName" runat="server" ErrorMessage="You have to provide an attorney name to search for." Text="*" ControlToValidate="txtSearchName" ValidationGroup="vldSearch" ForeColor="White"></asp:RequiredFieldValidator> 
</HeaderTemplate> 

Maintenant, dans le gestionnaire d'événements RowCommand, je le code suivant:

Case "Search" 
    If Page.IsValid Then 
     Dim btnSearch As Button = Me.dgAttorneys.HeaderRow.FindControl("btnSearch") 
     Dim btnShowAll As Button = Me.dgAttorneys.HeaderRow.FindControl("btnShowAll") 
     Dim txtSearchName As TextBox = Me.dgAttorneys.HeaderRow.FindControl("txtSearchName") 
     Me.sqlAttorneys.SelectCommand = "SELECT [userID], [login], [username], [password] FROM [attorney] WHERE [username] LIKE '%' + @username + '%' ORDER BY [login]" 
     Dim parmUserName As New ControlParameter("username", "txtSearchName", "Text") 
     Me.sqlAttorneys.SelectParameters.Add(parmUserName) 
     Me.dgAttorneys.DataBind() 
     Me.dgAttorneys.PageIndex = 0 
     btnSearch.Visible = False 
     btnShowAll.Visible = True 
     txtSearchName.Visible = False 
    End If 

Le DataBind échoue, avec l'erreur:

Impossible de trouver le contrôle 'txtSearchName' dans ControlParameter 'nom d'utilisateur'.

Des suggestions sur des méthodes alternatives pour y parvenir?

Merci.

Répondre

0

J'ai trouvé un autre moyen - plutôt que d'utiliser un ControlParameter, je viens d'utiliser un paramètre « standard » comme suit:

Me.sqlAttorneys.SelectCommand = "SELECT [userID], [login], [username], [password] FROM [attorney] WHERE [username] LIKE '%' + @username + '%' ORDER BY [login]" 
Dim parmUserName As New Parameter("username", DbType.String, txtSearchName.Text) 
Me.sqlAttorneys.SelectParameters.Add(parmUserName) 

Cela fonctionne.

Questions connexes