我有一个sqldatasource等的gridview。对于网格,我也有 搜索文本框。如果用户需要过滤记录,我想 使用带有参数的sql过程动态调整SqlDataSource的SELECT语句可以从文本框中获取值。我喜欢 所有的分页,排序等自动功能,所以我没有 想要绑定旧的方式。
任何线索?
感谢,
<form id="form1" runat="server">
<div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
SelectCommand="SelectCategorie" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="CategorieName"
PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource3" runat="server"
ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
SelectCommand="SELECT [ProductName], [ProductID] FROM [Alphabetical list of products]">
</asp:SqlDataSource>
<br />
<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button3" runat="server" Text="Button" />
<br />
<br />
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="SqlDataSource3" DataTextField="ProductName"
DataValueField="ProductName">
</asp:DropDownList>
<br />
<br />
<asp:Button ID="Button2" runat="server" Text="Change the datasource" />
<br />
<br />
<asp:GridView ID="GridView1" runat="server"
DataKeyNames="ProductID" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="ProductID" HeaderText="ProductID"
InsertVisible="False" ReadOnly="True" SortExpression="ProductID"
DataFormatString="[Yassine {0}]" />
<asp:BoundField DataField="ProductName" HeaderText="ProductName"
SortExpression="ProductName" />
<asp:BoundField DataField="SupplierID" HeaderText="SupplierID"
SortExpression="SupplierID" />
<asp:BoundField DataField="CategoryID" HeaderText="CategoryID"
SortExpression="CategoryID" />
<asp:BoundField DataField="CategoryName" HeaderText="CategoryName"
SortExpression="CategoryName" />
<asp:BoundField DataField="Description" HeaderText="Description"
SortExpression="Description" />
<asp:BoundField DataField="QuantityPerUnit" HeaderText="QuantityPerUnit"
SortExpression="QuantityPerUnit" />
<asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
SortExpression="UnitPrice" />
<asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock"
SortExpression="UnitsInStock" />
<asp:BoundField DataField="UnitsOnOrder" HeaderText="UnitsOnOrder"
SortExpression="UnitsOnOrder" />
<asp:BoundField DataField="ReorderLevel" HeaderText="ReorderLevel"
SortExpression="ReorderLevel" />
<asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
SortExpression="Discontinued" />
</Columns>
</asp:GridView>
<br />
<br />
</div>
</form>
和场景背后的代码:
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
SqlDataSource1.SelectCommand = "SelectCategorieParDescription"
SqlDataSource1.SelectParameters.Add("@ProductName", DropDownList1.DataValueField)
End Sub
End Class
这是我得到的错误:
过程或函数SelectCategorieParDescription指定了太多参数
答案 0 :(得分:1)
我们对您想要做的事情使用类似的方法。困难的方法如下(您可以看到有关此here的文章:
但是,所有这些可能需要一段时间,另一个选择是将搜索功能限制为单个字符串。例如:
接收where查询的存储过程有点像这样:
ALTER PROCEDURE [dbo].[usp_SearchForObjectsForDashboard]
@searchTerm as varchar(250)
BEGIN
...
SET @sql = 'SELECT ...
...
WHERE someConditionOfYourOwn = whatever
AND ' + @searchTerm
EXEC(@sql)
END
希望有所帮助
答案 1 :(得分:0)
我会尽量详细说明。为您的问题提供编码解决方案有点超出范围。我将提供一些关于如何处理这个问题的想法。希望其他人也会为此添加一些有价值的观点。
搜索可以通过多种方式实现。这一切都取决于您的要求和搜索的效率。根据您的问题,我相信您正在尝试的是搜索和几个过滤选项
比如说你想搜索员工(并说你想通过名字/姓氏/部门/经理搜索)
要开始简单,你可以拥有(除了GridView和SqlDataSource)
1)搜索框的文本框。
2)按选项搜索(4个RadioButtons或带有firstname
的DropDownList,lastname
,department
,manager
)
3)一个按钮
4)具有两个参数(searchText
,searchBy
)
在您的存储过程中,根据您的SearchBy
类型,您可以searchText
构建您选择的搜索查询
伪代码
if (searchBy == firstname)
{
set @sql = select ...... where firstName = searchText
}
else if (searchBy == lastname)
{
set @sql = select ...... where lastName = searchText
}
else if (searchBy == department)
{
set @sql = select ...... where department = searchText
}
else if (searchBy == manager)
{
set @sql = select ...... where manager = searchText
}
exec(@sql)
在button_click中,您将更改sqlDataSource选择参数
来自DropDownList或RadioButton的TextBox searchText
的{{1}}
这也是最低限度的。您可以根据需要进行扩展。例如
1)在select查询中使用searchBy
子句来获得类似的匹配而不是完全匹配(在UI中,您可以为用户提供在精确,类似匹配之间进行选择的选项)
2)您可以为用户提供在多列中搜索的选项
等等(选项无穷无尽;再次取决于您的要求)