代码之家  ›  专栏  ›  技术社区  ›  Ken Ray

将GridView头模板中的文本框作为sqldatasource select中的参数传递

  •  0
  • Ken Ray  · 技术社区  · 15 年前

    我有一个使用sqldatasource显示数据库表内容的GridView。这个部分(包括插入、更新和删除行)工作得很好。我想做的是添加一个“搜索”功能,以限制返回到用户输入名称的行。我有一个要搜索的名称文本框和HeaderTemplate中的“搜索”按钮,例如:

     <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>   
    

    现在,在rowcommand事件处理程序中,我有以下代码:

     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
    

    数据绑定失败,错误为:

    在controlParameter“username”中找不到控件“txtSearchName”。

    关于实现这一目标的替代方法有什么建议吗?

    谢谢。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Ken Ray    15 年前

    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)
    

    推荐文章