如何过滤gridview

时间:2011-05-26 11:21:27

标签: c# asp.net sql-server-2008 gridview filter

我有一个通过sqldatasource连接到数据库的gridview。我有多个下拉列表和一个表,用户可以在其中选择不同的数据来过滤gridview。

我知道如何为一个控件设置它,但不知道如何为多个控件执行此操作。理想情况下,我想要做的是onfilterButton_Click后面的代码连接到数据库中的存储过程。参数取决于用户选择的过滤器选项。我只是不知道如何编写存储过程。 (我不是最好的SQL)

但我愿意接受有关更好方法的建议。我正在使用c#visual studios 2010和sql server 2008。

我已经坚持了一个多星期了,所以任何实际的帮助都会受到欢迎。

4 个答案:

答案 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();
    }