We help IT Professionals succeed at work.

Sample For GridView with Multiple Filters ASP.NET C#

7,186 Views
Last Modified: 2011-10-19
I have come across this web site:

http://www.aspdotnetcodes.com/Asp.Net_GridView_Filter.aspx

Sample: http://www.aspdotnetcodes.com/Asp.Net_GridView_Filter_Sample.aspx

I would like to sort out my gridview like the example I have shown.

Bare in mind, I have been using MS Access as my database. C# as my background code.

Any idea??

Thanks
Comment
Watch Question

CERTIFIED EXPERT
Top Expert 2007

Commented:
So what exactly is your question?
The article is pretty straightfoward....notice that you don't have to change your queries or anything.
the filtering happens to the dataview:

if (condition!= null)
   dv.RowFilter = condition;

so if you implement the dropdownlists in the header as described in the tutorial, and the data you return is in a dataset or datatable, you can make a dataview out of that data and apply the "RowFilter" to the dataview...
introluxTechincal Director

Author

Commented:
I have looked at that exmaple and I have no idea how to go around doing that on my code. If you read the comments, people are having problems with it aswell.

I have started doing one filter but it is different to what I have done, and got helped on. I would like to use multiple filters instead of using one.

This is my code as follows:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
public partial class testFilter : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 
    }
 
    protected void FilterDropDown_IndexChanged(object sender, EventArgs e)
    {
        DropDownList dd = (DropDownList)sender;
        ViewState["SelectedValue"] = dd.SelectedValue;
        this.AccessDataSource1.SelectCommand = "SELECT [PName], [ICD_IDF], [PType], [CName] FROM [tblProCom] WHERE [PName] <> 'select' AND [PType]='" + dd.SelectedValue + "'";
        GridView1.DataBind();
    }
 
    protected void SetValue(object sender, EventArgs e)
    {
        if (ViewState["SelectedValue"] != null)
        {
            DropDownList ddl = (DropDownList)sender;
            ddl.SelectedValue = ViewState["SelectedValue"].ToString();
        }
    }
 
    protected void GridView1_PageIndexChanged(object sender, EventArgs e)
    {
 
    }
 
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("testFilter.aspx");
    }
}
 
=====================================================================
 
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testFilter.aspx.cs" Inherits="testFilter" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/Data/ProCom.mdb" SelectCommand="SELECT [PName], [ICD_IDF], [PType], [CName] FROM [tblProCom] WHERE [PName] <> 'select'">
</asp:AccessDataSource>
        <br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Reset Filters" /><br />
        <br />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        CellPadding="4" DataSourceID="AccessDataSource1"
        ForeColor="#333333" GridLines="None"
        AllowPaging="True" OnPageIndexChanged="GridView1_PageIndexChanged">
        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <Columns>
                <asp:BoundField DataField="PName" HeaderText="PName" SortExpression="PName" />
                <asp:BoundField DataField="ICD_IDF" HeaderText="ICD_IDF" SortExpression="ICD_IDF" />
                <asp:TemplateField HeaderText="ProjectType" SortExpression="PType">
                <HeaderTemplate>
                Project Type
                <asp:DropDownList ID="ddPType"  
                DataTextField="PType"
                AutoPostBack="true"
                OnSelectedIndexChanged="FilterDropDown_IndexChanged"
                OnPreRender="SetValue"
                DataSourceID="AccessDataSource2" runat="server" AppendDataBoundItems="True">
                    <asp:ListItem>Please select</asp:ListItem>
                </asp:DropDownList>
                </HeaderTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("PType") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("PType") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="CName" HeaderText="CName" SortExpression="CName" />
            </Columns>
            <RowStyle BackColor="#EFF3FB" />
            <EditRowStyle BackColor="#2461BF" />
         <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
         <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="White" />
        </asp:GridView>
        <br />
        <br />
        &nbsp;<br />
        <asp:AccessDataSource ID="AccessDataSource2" runat="server" DataFile="~/Data/ProCom.mdb"
            SelectCommand="SELECT DISTINCT PType FROM tblProCom">
        </asp:AccessDataSource>
        </div>
    </form>
</body>
</html>

Open in new window

introluxTechincal Director

Author

Commented:
any idea?
CERTIFIED EXPERT
Top Expert 2007

Commented:
Sorry, haven't had time to set up my own test yet...might have some time this morning...
just looking at what you have so far though:
  protected void FilterDropDown_IndexChanged(object sender, EventArgs e)
    {
        DropDownList dd = (DropDownList)sender;
        ViewState["SelectedValue"] = dd.SelectedValue;
        this.AccessDataSource1.SelectCommand = "SELECT [PName], [ICD_IDF], [PType], [CName] FROM [tblProCom] WHERE [PName] <> 'select' AND [PType]='" + dd.SelectedValue + "'";
        GridView1.DataBind();
    }
 

I wouldn't try the set the select command and rebind here...the only thing I'd do in the IndexChanged event(s) (since you'll eventually have multiple filters)...the only thing I'd do is set the viewstate value....
then setting the select command and binding in page_load based on viewstate values...
introluxTechincal Director

Author

Commented:
When will you get the time to give it a test run? as im not sure how to approach this.
Regards,
CERTIFIED EXPERT
Top Expert 2007

Commented:
How important to you is it to have the dropdownlists in the headers autopostback?
I have it working (using Northwind as test db) when I have "Apply" and "Undo" filter as buttons outside the grid...
ScreenShot8-7-2008-9.30.41-AM.jpg
ScreenShot8-7-2008-9.31.00-AM.jpg
introluxTechincal Director

Author

Commented:
That could work aswell i guess
CERTIFIED EXPERT
Top Expert 2007
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION
introluxTechincal Director

Author

Commented:
Thanks for the advice!
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.