In this article I will explain how to filter GridView rows using CheckBoxList’s CheckBoxes in ASP.Net with C# and VB.Net.
The GridView rows will be filtered on CheckBoxList SelectedIndexChanged event.
 
 
Database
Here I am making use of Microsoft’s Northwind Database. The download and install instructions are provided in the following article.
 
 
Concept
The CheckBoxList displays some Countries and the GridView will be populated with records from the Customers table of the Northwind database.
When the CheckBoxList’s CheckBox is checked or unchecked the GridView records will be filtered based on the selected Countries.
If none of the CheckBoxes of the CheckBoxList are selected then the GridView will display all records.
 
 
HTML Markup
The HTML Markup consists of an ASP.Net GridView and a CheckBoxList control. The CheckBoxList control has been assigned an OnSelectedIndexChanged event handler.
<asp:CheckBoxList ID="chkCountries" runat="server" AutoPostBack="true" OnSelectedIndexChanged="Country_Selected">
    <asp:ListItem Text="Argentina" Value="Argentina"></asp:ListItem>
    <asp:ListItem Text="Austria" Value="Austria"></asp:ListItem>
    <asp:ListItem Text="Belgium" Value="Belgium"></asp:ListItem>
    <asp:ListItem Text="Brazil" Value="Brazil"></asp:ListItem>
    <asp:ListItem Text="Canada" Value="Canada"></asp:ListItem>
</asp:CheckBoxList>
<hr />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" CssClass="grid"
    AllowPaging="true" OnPageIndexChanging="OnPageIndexChanging">
    <Columns>
        <asp:BoundField HeaderText="Contact Name" DataField="ContactName" />
        <asp:BoundField HeaderText="Country" DataField="Country" />
    </Columns>
</asp:GridView>
 
 
Namespaces
You will need to import the following namespaces.
C#
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
 
VB.Net
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
 
 
Populating the GridView
The GridView is populated inside the Page Load event handler. The GridView is populated using dynamic SQL Query built based on the CheckBoxList selections.
The CheckBoxList items are iterated and if the Item is selected then it is appended to the SQL Query.
Finally the SQL Query is completed by appending the WHERE clause and the GridView is populated.
The logic works as follows:-
When none of Items in CheckBoxList is selected the SQL Query is:
"SELECT ContactName, Country FROM Customers"
 
When CheckBoxes (say Argentina and Austria) are selected then the SQL Query is:
"SELECT ContactName, Country FROM Customers WHERE Country IN ('Argentina', 'Austria')"
Thus using the dynamic SQL Query, the GridView can be easily filtered based on CheckBoxList selections.
The GridView has been assigned OnPageIndexChanging event handler which simply assigns the new PageIndex to the GridView and rebinds it.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        this.BindGrid();
    }
}
 
private void BindGrid()
{
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    string query = "SELECT ContactName, Country FROM Customers";
 
    string condition = string.Empty;
    foreach (ListItem item in chkCountries.Items)
    {
        condition += item.Selected ? string.Format("'{0}',", item.Value) : string.Empty;
    }
 
    if (!string.IsNullOrEmpty(condition))
    {
        condition = string.Format(" WHERE Country IN ({0})", condition.Substring(0, condition.Length - 1));
    }
 
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand(query + condition))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                cmd.Connection = con;
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
                }
            }
        }
    }
}
 
protected void OnPageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    this.BindGrid();
}
 
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Me.BindGrid()
    End If
End Sub
 
Private Sub BindGrid()
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Dim query As String = "SELECT ContactName, Country FROM Customers"
 
    Dim condition As String = String.Empty
    For Each item As ListItem In chkCountries.Items
        condition += If(item.Selected, String.Format("'{0}',", item.Value), String.Empty)
    Next
 
    If Not String.IsNullOrEmpty(condition) Then
        condition = String.Format(" WHERE Country IN ({0})", condition.Substring(0, condition.Length - 1))
    End If
 
    Using con As New SqlConnection(constr)
        Using cmd As New SqlCommand(query & condition)
            Using sda As New SqlDataAdapter(cmd)
                cmd.Connection = con
                Using dt As New DataTable()
                    sda.Fill(dt)
                    GridView1.DataSource = dt
                    GridView1.DataBind()
                End Using
            End Using
        End Using
    End Using
End Sub
 
Protected Sub OnPageIndexChanging(sender As Object, e As GridViewPageEventArgs)
   GridView1.PageIndex = e.NewPageIndex
    Me.BindGrid()
End Sub
 
 
Handling the SelectedIndexChanged event handler of CheckBoxList
The following event handler is executed when the CheckBoxList’s CheckBoxes are checked or unchecked.
Inside the event handler, the GridView is again populated so that the records can be filtered as per the latest selections.
C#
protected void Country_Selected(object sender, EventArgs e)
{
    this.BindGrid();
}
 
VB.Net
Protected Sub Country_Selected(sender As Object, e As EventArgs)
    Me.BindGrid()
End Sub
 
 
Screenshot
Filter GridView using CheckBoxList (CheckBoxes) in ASP.Net
 
 
Demo
 
 
Downloads
Filter_GridView_CheckBoxList.zip