我的场景是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,或者如果没有写入任何内容。
感谢所有提前做出贡献的人。
答案 0 :(得分:1)
我不保证这会解决问题,但我认为有三件事看起来有问题:
您将值1,2和3分配给Name
代码的asp:ControlParameter
属性。除非您调用的存储过程实际上具有名为@ 1,@ 2和@ 3的参数,否则您需要将这些名称更改为要映射到的存储过程的参数名称。
同样,在您的代码隐藏中,您使用控件名称来查找SqlDataSource.SelectCommand
的参数,如下所示:
sqlSourceID.SelectParameters["textbox1"].DefaultValue = this.textbox.Text;
但“textbox1”不是存储过程参数的名称。正如您所写,@ 1是该参数的名称。如果保留名称1,2和3,则应进行如下参数设置:
sqlSourceID.SelectParameters["1"].DefaultValue = this.textbox.Text;
但我认为您根本不需要在代码隐藏中设置参数的值。这就是ControlParameter
的要点:它获取控件属性的值并将其赋值给command参数。以下是一些可能有用的链接:Selecting Data Using the SqlDataSource Control和ASP.NET DetailsView and ControlParameter Example.
我希望这会有所帮助。