我有一个通过sqldatasource连接到数据库的gridview。我有多个下拉列表和一个表,用户可以在其中选择不同的数据来过滤gridview。
我知道如何为一个控件设置它,但不知道如何为多个控件执行此操作。理想情况下,我想要做的是onfilterButton_Click
后面的代码连接到数据库中的存储过程。参数取决于用户选择的过滤器选项。我只是不知道如何编写存储过程。 (我不是最好的SQL)
但我愿意接受有关更好方法的建议。我正在使用c#visual studios 2010和sql server 2008。
我已经坚持了一个多星期了,所以任何实际的帮助都会受到欢迎。
答案 0 :(得分:1)
如果您不善于撰写SP's
,那么您可以使用DataSource
属性直接过滤SQL FilterExpression
。
sql.FilterExpression = "Filteration Expression";
GridView1.DataBind();
修改:适用于您的内容:
if (DropDownList1.SelectedItem.Text != "All")
{
SqlDataSource1.FilterExpression = "Title like '" + textbox1.Text + "' and Category like " + DropDownList1.SelectedValue;
}
else
{
SqlDataSource1.FilterExpression = "Title like '" + textbox1.Text + "'";
}
GridView1.DataBind();
答案 1 :(得分:1)
编写一个存储过程并将DropDownList值作为参数传递,如下所示:
CREATE PROC CUST_Details
(
@CustomerID INT,
@CompanyID INT
)
AS
BEGIN
SELECT
Customer.CustomerName,
Company.CompanyName
FROM
Customer INNER JOIN
Company ON Customer.CompanyID = Company.CompanyID
WHERE
(@CompanyID = -1 OR Customer.CompanyID = @CompanyID) AND
(@CustomerID = -1 OR Customer.CustomerID = @CustomerID)
END
在此之前,在DropDownList中添加项目,例如“< ----- Select ----->”作为DataTextField,“-1”作为DataValueField。
在DropDownList SelectedIndexChanged事件中,将DropDownList的SelectedValue作为参数传递,再次调用数据库并使用Grid对其进行数据绑定。
答案 2 :(得分:0)
您的存储过程会声明所有参数:
CREATE PROCEDURE GetData
@parameter1 varchar(50),
@parameter2 int
etc...
然后,您可以使用以下参数调用存储过程:
GetData(dropdownlist1.SelectedItem.Value, dropdownlist2.SelectedItem.Value);
这是你的意思吗?
更新: 对于选择“全部”选项的情况,您仍然可以将该值作为空参数传递,并在存储过程中将其声明为“可选”:
CREATE PROCEDURE GetData
@parameter1 varchar(50) = NULL,
@parameter2 int
因此,存储过程中的查询看起来像这样:
SELECT *
FROM Table
WHERE ((@parameter1 IS NULL) OR (column1 = @parameter1 ))
AND column2 = @parameter2
答案 3 :(得分:0)
下面可能会告诉您这是如何工作的,请检查:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="FORM1" runat="server">
<p>Show all employees with the following title:
<asp:DropDownList
id="DropDownList1"
runat="server"
AutoPostBack="True">
<asp:ListItem>Sales Representative</asp:ListItem>
<asp:ListItem>Sales Manager</asp:ListItem>
<asp:ListItem>Vice President, Sales</asp:ListItem>
</asp:DropDownList></p>
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees"
FilterExpression="Title='{0}'" OnFiltering="SqlDataSource1_Filtering">
<FilterParameters>
<asp:ControlParameter Name="Title" ControlId="DropDownList1" PropertyName="SelectedValue"/>
</FilterParameters>
</asp:SqlDataSource><br />
<asp:GridView
id="GridView1"
runat="server"
DataSourceID="SqlDataSource1"
AutoGenerateColumns="False">
<columns>
<asp:BoundField Visible="False" DataField="EmployeeID" />
<asp:BoundField HeaderText="First Name" DataField="FirstName" />
<asp:BoundField HeaderText="Last Name" DataField="LastName" />
</columns>
</asp:GridView>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>
服务器端:
protected void SqlDataSource1_Filtering(object sender, SqlDataSourceFilteringEventArgs e)
{
Label1.Text = e.ParameterValues[0].ToString();
}