Click here to Skip to main content
Click here to Skip to main content

How to allow the user to filter out a gridview by multiple selection

By , 27 Jan 2010
 
My contribution to my fellow developers & to make our life easier. The following code allow the user to filter out a gridview depending on their Selection.
 

'Here is the Complete Code Behind that handles the GridView and 4 
'Different DropDownlist each one representing a Filter. 
Imports System.IO
Imports System.Data
Imports System.Net.Mail
Imports System.Web
Imports System.Globalization
Imports System
Imports system.Data.SqlClient
Partial Class pmo_projectlist
    Inherits System.Web.UI.Page
    Protected WithEvents daTableData As System.Data.SqlClient.SqlDataAdapter
    Protected WithEvents dsTableData As System.Data.DataSet
    Protected WithEvents dvTableData As System.Data.DataView
    Dim cnProj As New SqlConnection(
        System.Configuration.ConfigurationManager.ConnectionStrings("ProjectsConnectionString").ConnectionString)
    Dim cmdSP As SqlClient.SqlCommand
    Dim prmSP As SqlClient.SqlParameter
    Dim Executivex As DropDownList
    
 
    Private Sub Page_Load(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles MyBase.Load, Me.Load
 
        If Not Page.IsPostBack Then
         
        End If
 
        All()
    End Sub
 

    Protected Sub GridView1_rowdatabound(ByVal sender As Object,
        ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
 
        Dim projidx
        projidx = e.Row.Cells(0).Text
        If e.Row.RowIndex <> -1 Then
            e.Row.Cells(9).Text = "<a href=project.aspx?projid=" & projidx & ">Edit</a>"
 
        End If
 
    End Sub
 
    Sub Filter()
 
        Dim Executivex = ddl_executive_sponsor.SelectedItem.Text
        Session("strExecutive") = Executivex
        Dim Leadx = ddl_project_lead.SelectedValue
        Session("strLead") = Leadx
        Dim FAx = ddl_functional_area.SelectedItem.Text
        Session("strFA") = FAx
        Dim Statusx = ddl_projStatus.SelectedItem.Text
        Session("strStatus") = Statusx
        Exit Sub
      
    End Sub
    Private Sub All()
        Try
            '_-----------------Full View------------------
            If (cnProj.State = Data.ConnectionState.Closed) Then
                cnProj.Open()
            End If
 
            cmdSP = New Data.SqlClient.SqlCommand("PMO_sp_filter3", cnProj)
            cmdSP.CommandType = Data.CommandType.StoredProcedure
            cmdSP.CommandTimeout = "200"
            prmSP = cmdSP.Parameters.Add("@SQLType", Data.SqlDbType.VarChar, 250)
            prmSP.Value = "Full_Filter"
 

            daTableData = New System.Data.SqlClient.SqlDataAdapter(cmdSP)
            dsTableData = New DataSet
            daTableData.FillSchema(dsTableData, SchemaType.Source, "TableData")
            daTableData.Fill(dsTableData, "TableData")
 
            cmdSP.ExecuteNonQuery()
            cnProj.Close()
 

            dvTableData = New DataView
            dvTableData.Table = dsTableData.Tables(0)
            dvTableData.Sort = Session("strODSSortField") & Session("strODSSortOrder")
            GridView1.DataSource = dvTableData
            GridView1.DataMember = "Projects"
            GridView1.DataBind()
 

        Catch xcp As Exception
            lblErrorMessage.Visible = True
            lblErrorMessage.Text = "Error on Loading Project Details Drop Downs List. " & xcp.Message
        End Try
 
    End Sub
 
    Private Sub Filters()
 
        '_-----------------Executive------------------
        Filter()
        If ddl_executive_sponsor.SelectedItem.Text = "Select" Then
            Session("strExecutive") = DBNull.Value
        End If
        'If ddl_project_lead.SelectedValue = "0" Then
        '    Session("strLead") = ""
        'End If
        If ddl_functional_area.SelectedItem.Text = "Select" Then
            Session("strFA") = DBNull.Value
        End If
        If ddl_projStatus.SelectedItem.Text = "Select" Then
            Session("strStatus") = DBNull.Value
        End If
 
        If (cnProj.State = Data.ConnectionState.Closed) Then
            cnProj.Open()
        End If
 
        cmdSP = New Data.SqlClient.SqlCommand("PMO_sp_filter3", cnProj)
        cmdSP.CommandType = Data.CommandType.StoredProcedure
        cmdSP.CommandTimeout = "200"
        prmSP = cmdSP.Parameters.Add("@SQLType", Data.SqlDbType.VarChar, 250)
        prmSP.Value = "Filters"
        prmSP = cmdSP.Parameters.Add("@Executive", Data.SqlDbType.VarChar, 250)
        prmSP.Value = Session("strExecutive")
        prmSP = cmdSP.Parameters.Add("@Leader", Data.SqlDbType.VarChar, 250)
        prmSP.Value = Session("strLead")
        prmSP = cmdSP.Parameters.Add("@FA", Data.SqlDbType.VarChar, 250)
        prmSP.Value = Session("strFA")
        prmSP = cmdSP.Parameters.Add("@Status", Data.SqlDbType.VarChar, 250)
        prmSP.Value = Session("strStatus")
 

        daTableData = New System.Data.SqlClient.SqlDataAdapter(cmdSP)
        dsTableData = New DataSet
        daTableData.FillSchema(dsTableData, SchemaType.Source, "TableData")
        daTableData.Fill(dsTableData, "TableData")
 
        cmdSP.ExecuteNonQuery()
        cnProj.Close()
 

        dvTableData = New DataView
        dvTableData.Table = dsTableData.Tables(0)
        dvTableData.Sort = Session("strODSSortField") & Session("strODSSortOrder")
        GridView1.DataSource = dvTableData
        GridView1.DataMember = "Projects"
        GridView1.DataBind()
 
    End Sub
 
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        If ddl_executive_sponsor.SelectedItem.Text <> "Select" Or ddl_project_lead.SelectedItem.Text <> "Select" _
        Or ddl_functional_area.SelectedItem.Text <> "Select" Or ddl_projStatus.SelectedItem.Text <> "Select" Then
            Filters()
        Else
            All()
        End If
 
    End Sub
    Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, 
    ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
 
        If ddl_executive_sponsor.SelectedItem.Text <> "Select" Then
            Filters()
            Me.GridView1.PageIndex = e.NewPageIndex
            Me.GridView1.DataBind()
        ElseIf ddl_project_lead.SelectedItem.Text <> "Select" Then
            Filters()
            Me.GridView1.PageIndex = e.NewPageIndex
            Me.GridView1.DataBind()
        ElseIf ddl_functional_area.SelectedItem.Text <> "Select" Then
            Filters()
            Me.GridView1.PageIndex = e.NewPageIndex
            Me.GridView1.DataBind()
        ElseIf ddl_projStatus.SelectedItem.Text <> "Select" Then
            Filters()
            Me.GridView1.PageIndex = e.NewPageIndex
            Me.GridView1.DataBind()
        Else
            All()
            Me.GridView1.PageIndex = e.NewPageIndex
            Me.GridView1.DataBind()
        End If
 
    End Sub
 
End Class
To Complete the Filter Out for the GridView you must call the Stored Procedure located in your database. I am including the Stored Procedure Syntax to make your life easy.
 
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE  [dbo].[Use your own name ] 
(
@SQLType          	nvarchar(100) = NULL,
@Executive nvarchar(250) = Null,
@Leader int = Null,
@FA nvarchar (250) = Null,
@Status nvarchar (250) = Null
)	 
AS
/********************************************************************
*	Program Name	: 	 
*
*	Create Date	:   
*
*	Author		: 	Osirisa
*
*	Purpose		:	Create a Gridview Filter for the Main Page
*********************************************************************
*
*	Modification History: 
*
*********************************************************************
 
--*************************************************************
--SET SQL STMT BASED ON SQL TYPE PASSED IN 
--*************************************************************/
Declare @Leader2 int
Set @Leader2 = @Leader
 
If @SQLType = 'Filters'
begin
 
-- Handle Empty Paramaters. 
If
@Executive IS NULL 
SET @Executive = '%' 
 
If
@Leader IS NULL 
SET @Leader = '0'
If @Leader = '0' SET @Leader2 ='1000'
 
IF
@FA IS NULL 
SET @FA = '%'
 
 
IF
@Status IS NULL 
SET @Status = '%'
 
 
-- Insert statements for procedure here 

SELECT PMO_Projects.project_number, PMO_Projects.project_name, 
PMO_Executives.executive_full, 
PMO_Employees.[Last Name] + N',  ' + PMO_Employees.[First Name] 
AS project_lead, PMO_Functional_Area.functional_area, 
    PMO_Projects.completion, PMO_Projects.project_start_date, 
    PMO_Projects.project_end_date, PMO_Project_Status.code FROM 
PMO_Projects LEFT OUTER JOIN PMO_Functional_Area ON 
PMO_Projects.functional_area = PMO_Functional_Area.id
LEFT OUTER JOIN PMO_Employees ON 
PMO_Projects.project_lead = PMO_Employees.ID 
LEFT OUTER JOIN PMO_Executives ON 
PMO_Projects.executive_sponsor = PMO_Executives.ID
LEFT OUTER JOIN PMO_Project_Status   on
PMO_PROJECT_Status.ID = PMO_Projects.Project_Status
WHERE
 ((Executive_full LIKE @Executive) and (
   Project_Lead BETWEEN @Leader and @Leader2 ) and (
   PMO_Functional_Area.functional_area Like @FA) and (PMO_Project_Status.code  Like @Status))
ORDER BY PMO_Projects.project_number
END
 
If @SQLType = 'Full_Filter'
Begin
SELECT PMO_Projects.project_number, PMO_Projects.project_name, 
PMO_Executives.executive_full, 
PMO_Employees.[Last Name] + N',  ' + PMO_Employees.[First Name] 
AS project_lead, PMO_Functional_Area.functional_area,
    PMO_Projects.completion, PMO_Projects.project_start_date, 
    PMO_Projects.project_end_date, PMO_Project_Status.code FROM 
PMO_Projects LEFT OUTER JOIN PMO_Functional_Area ON 
PMO_Projects.functional_area = PMO_Functional_Area.id
 LEFT OUTER JOIN PMO_Employees ON 
PMO_Projects.project_lead = PMO_Employees.ID 
LEFT OUTER JOIN PMO_Executives ON 
PMO_Projects.executive_sponsor = PMO_Executives.ID
LEFT OUTER JOIN PMO_Project_Status   on
PMO_PROJECT_Status.ID = PMO_Projects.Project_Status
ORDER BY PMO_Projects.project_number
End
 
SELECT @LEADER
SELECT @LEADER2

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

osiris mckinney
Unknown
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
-- There are no messages in this forum --
Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130523.1 | Last Updated 27 Jan 2010
Article Copyright 2010 by osiris mckinney
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid