如何解决如何过滤gridview
| 我有一个通过sqldatasource连接到数据库的gridview。我有多个下拉列表和一个表,用户可以在其中选择不同的数据来过滤gridview。 我知道如何为一个控件设置此功能,但不知道如何为多个控件设置此功能。理想情况下,我想做的是将代码“ 0”连接到数据库中的存储过程。参数将取决于用户选择的过滤器选项。我只是不知道如何编写存储过程。 (我不是SQL方面的佼佼者) 但是我愿意提出更好的方法建议。我正在使用C#Visual Studios 2010和SQL Server 2008。 我已经在这个问题上停留了一个多星期,所以实际上任何实际的帮助都将受到欢迎。解决方法
编写一个存储过程,并将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进行数据绑定。
,如果您不太擅长编写SP\'s
,则可以使用FilterExpression
属性直接过滤SQLDataSource
。
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();
,下面可能会告诉您这是如何工作的,请检查:
<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();
}
,您的存储过程将声明您的所有参数,如下所示:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。