使用Textboxes搜索绑定到SQLDataSource的GridView

时间:2012-11-02 10:37:42

标签: c# asp.net sql

我的场景是Gridview,它使用asp:SQLDataSource绑定到存储过程。这是使用向导快速完成的,我选择了SP并且显示了所有数据。 SP的创建方式包含4个参数。当这些参数为null时,它们将返回查询中的所有值。

我创建了3个文本框和一个下拉列表来填充这些参数,将它们绑定到按钮以尝试创建搜索功能。我尝试了很多方法和方法,特别是通过对这个网站的研究,但似乎都没有。我无法找到我的问题,所以我感谢你对此事的任何帮助。以下是我的代码。

<asp:SqlDataSource ID="sqlSourceID" runat="server" ConnectionString="<%$ ConnectionStrings:DBCONNSTRING%>"
            SelectCommand="storedProcedureName" SelectCommandType="StoredProcedure">                
        </asp:SqlDataSource>

以上是SQL存储过程绑定。

我已经将控件绑定为SQL Server的参数。在此代码之前,用于在没有搜索参数的情况下加载所有记录的页面,因为SP假定为空值。现在没有任何东西加载。

            <SelectParameters>
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="textBox1" PropertyName="Text" Name="1" Type="DateTime" />
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="textBox2" PropertyName="Text" Name="2" Type="DateTime" />
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="textBox3" PropertyName="Text" Name="3" Type="String" />
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="ddl1" PropertyName="SelectedText" Name="4" Type="String" />
            </SelectParameters>

控件ID表示文本框ID

以下是我的代码。

        sqlSourceID.SelectParameters["textbox1"].DefaultValue = this.textbox.Text;
        sqlSourceID.SelectParameters["textbox2"].DefaultValue = this.textbox1.Text;
        sqlSourceID.SelectParameters["textbox3"].DefaultValue = this.textbox2.Text;
        sqlSourceID.SelectParameters["ddl1"].DefaultValue =    Convert.ToString(this.ddl.SelectedText);

那是我的问题。我需要找到一种方法,在单击“搜索”按钮时从文本框传递参数,并在页面加载时假设为null,或者如果没有写入任何内容。

感谢所有提前做出贡献的人。

1 个答案:

答案 0 :(得分:1)

我不保证这会解决问题,但我认为有三件事看起来有问题:

  1. 您将值1,2和3分配给Name代码的asp:ControlParameter属性。除非您调用的存储过程实际上具有名为@ 1,@ 2和@ 3的参数,否则您需要将这些名称更改为要映射到的存储过程的参数名称。

  2. 同样,在您的代码隐藏中,您使用控件名称来查找SqlDataSource.SelectCommand的参数,如下所示:

    sqlSourceID.SelectParameters["textbox1"].DefaultValue = this.textbox.Text;
    

    但“textbox1”不是存储过程参数的名称。正如您所写,@ 1是该参数的名称。如果保留名称1,2和3,则应进行如下参数设置:

    sqlSourceID.SelectParameters["1"].DefaultValue = this.textbox.Text;
    
  3. 但我认为您根本不需要在代码隐藏中设置参数的值。这就是ControlParameter的要点:它获取控件属性的值并将其赋值给command参数。以下是一些可能有用的链接:Selecting Data Using the SqlDataSource ControlASP.NET DetailsView and ControlParameter Example.

  4. 我希望这会有所帮助。