Asp.net 如何向SqlDataSource添加多个SelectParameters?

Asp.net 如何向SqlDataSource添加多个SelectParameters?,asp.net,vb.net,gridview,sqldatasource,Asp.net,Vb.net,Gridview,Sqldatasource,我一直在尝试将两个SelectParameters添加到我的SqlDataSource中,但没有成功 下面是我在aspx页面中的代码 <table> <tr> <td colspan="2"><strong>Search By child</strong> </td> </tr> <tr>

我一直在尝试将两个SelectParameters添加到我的SqlDataSource中,但没有成功

下面是我在aspx页面中的代码

<table>
        <tr>
            <td colspan="2"><strong>Search By child</strong>
            </td>
        </tr>
        <tr>
            <td>Case Number:
            </td>
            <td>
                <asp:TextBox ID="txtCaseNumber" runat="server"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td>Last Name:
            </td>
            <td>
                <asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td>First Name:
            </td>
            <td>
                <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <asp:LinkButton ID="lnkSearchChild" runat="server">Search</asp:LinkButton>
            </td>
        </tr>
    </table>

<asp:GridView ID="childListGrid" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" AllowPaging="True" AllowSorting="True" PageSize="20" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Horizontal">
        <Columns>
            <asp:BoundField DataField="child_recordId" HeaderText="Child ID" InsertVisible="False" ReadOnly="True" SortExpression="child_recordId" />
            <asp:BoundField DataField="child_caseNumber" HeaderText="Case Number" SortExpression="child_caseNumber" />
            <asp:BoundField DataField="child_LastName" HeaderText="Last Name" SortExpression="child_LastName" />
            <asp:BoundField DataField="child_FirstName" HeaderText="First Name" SortExpression="child_FirstName" />
            <asp:TemplateField HeaderText=" " InsertVisible="False"
                SortExpression="child_recordId">
                <ItemTemplate>
                    &nbsp;&nbsp;
                        <asp:LinkButton ID="lnkViewForms" runat="server" CommandName="ViewForms" CommandArgument='<%# Bind("child_recordId") %>' OnClick="lnkViewForms_Click">View forms</asp:LinkButton>
                    &nbsp;&nbsp;
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
        <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
        <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#F7F7F7" />
        <SortedAscendingHeaderStyle BackColor="#4B4B4B" />
        <SortedDescendingCellStyle BackColor="#E5E5E5" />
        <SortedDescendingHeaderStyle BackColor="#242121" />
    </asp:GridView>

<asp:SqlDataSource ID="SqlDataSource5" runat="server" ConnectionString="<%$ ConnectionStrings:eci_conn %>" SelectCommand="SELECT ... FROM ... WHERE [child_LastName] LIKE @lname + '%' AND [child_FirstName] LIKE @fname + '%' ORDER BY [child_LastName]">
        <SelectParameters>
            <asp:ControlParameter Name="lname" DbType="String" />
            <asp:ControlParameter Name="fname" DbType="String" />
        </SelectParameters>
    </asp:SqlDataSource>
还有这个

SqlDataSource5.SelectParameters.Add("@lname", txtLastName.Text.Trim())
SqlDataSource5.SelectParameters.Add("@fname", txtFirstName.Text.Trim())
childListGrid.DataSourceID = "SqlDataSource5"
还有这个

SqlDataSource5.SelectParameters("lname").DefaultValue = txtLastName.Text.Trim()
SqlDataSource5.SelectParameters("fname").DefaultValue = txtFirstName.Text.Trim()
childListGrid.DataSourceID = "SqlDataSource5"
似乎什么都没用,我还能试什么

谢谢你试试这个

SqlDataSource5.SelectParameters("lname").DefaultValue = txtLastName.Text.Tostring
SqlDataSource5.SelectParameters("fname").DefaultValue = txtFirstName.Text.Tostring
childListGrid.DataSource = "SqlDataSource5"
childListGrid.Databind

向SqlDataSource添加参数时,只需执行一项或另一项(标记或代码隐藏)。看看这个:

<SelectParameters>
    <asp:ControlParameter Name="lname" ControlID="txtLastName" PropertyName="Text" />
    <asp:ControlParameter Name="fname" ControlID="txtFirstName" PropertyName="Text" />
</SelectParameters>

你说它不起作用是什么意思?什么都没有得到回报。它只需要一个参数就可以正常工作,但不需要两个参数。当我一步一步地浏览代码时,我看到计数是4而不是2。你在哪里更新代码?它在你的页面加载中吗?如果不在页面加载中,是否使用ajax调用来更新reuslts?请尝试向页面加载中添加数据绑定。另外,您是否测试了查询以确保返回结果?查询工作正常,并且使用一个参数也可以正常工作,但是当我添加两个参数时停止工作我真的不喜欢人们故意编写错误代码-在本例中()而不是[]我在标记中创建GridView。我更改了标记以反映您提供的标记。如果不需要在代码隐藏中添加参数,如何执行搜索?如果我只是将childListGrid.DataSourceID=“SqlDataSource5”留在代码中,然后单击搜索,它会返回所有内容。我将GridView代码添加到question@JGeZau标记中的数据源ID设置为
DataSourceID=“SqlDataSource1”
。它不应该是
DataSourceID=“SqlDataSource5”
?我想可能您没有充分解释您的场景,或者我只是不理解一些东西。SqlDataSource1是“默认”数据源。我有其他的搜索功能。第一次加载页面后,它将加载DS1;DS2是按案例编号搜索的(正如你所看到的,我有一个文本框用于此),这是完美的工作方式。我有DS3和DS4,分别按姓氏和姓氏进行搜索,这也很好用,因为对姓氏和姓氏使用了两个DSs。我想做的是摆脱DS3和DS4,并将它们结合起来,以便能够一起搜索fname和lname,这就是我要做的trouble@JGeZau啊,谢谢你的补充信息!我想我明白你的问题所在了。在这里的第一条评论中,您说“如果我只是在代码中留下childListGrid.DataSourceID=“SqlDataSource5”,然后在搜索中单击,它会返回所有内容”-您需要在更改数据源ID后调用databind,然后就可以开始了。我更新了我的答案。嘿,@jgezou。这个答案解决了你的问题,还是帮助你解决了你的问题?
<SelectParameters>
    <asp:ControlParameter Name="lname" ControlID="txtLastName" PropertyName="Text" />
    <asp:ControlParameter Name="fname" ControlID="txtFirstName" PropertyName="Text" />
</SelectParameters>
childListGrid.DataSourceID = "SqlDataSource5";
childListGrid.DataBind();