C# ASP.NET – GridView : How to Use Checkbox in Gridview to Select Multiple Rows

2009-01-06

I wanted to select multiple rows of the grid view using check boxes to select each row.

In this post I will discus how and what I did to achieve this goal…

I used a template column which holds a check box to select or de-select a row in the grid view.

Adding a Template Column:

There are several simple ways to add a template column/field to your grid view:

  1. Select your grid view and then click on the small task button (the small square button located to the top right corner of the grid view control) and select “Add New Column…” from the “GridView Tasks” box.
    1. Use “TemplateField” as the field type
    2. Provide a header text
    3. click ok
  2. Or… Select “Edit Columns…” from the “GridView Tasks” box and
    1. Select “TemplateField” from the “Available fields: ” section
    2. Click “Add” button
    3. Provide a header text in the “TemplateField properties: ” section
    4. click ok
  3. Or… Select “Columns” from the grid view properties and follow the steps described in the earlier method (2nd one)

Adding a Checkbox to the Template Column:

  1. Select “Edit Templates” from the “GridView Tasks” box. Then it will show you the inside of the template.
  2. Select “Item Template” from the “Display: ” drop down list.
  3. Drag and drop a check box in the item template area.
  4. Give an id as “chkid” for the check box – You can use a different name if you want but make sure you don’t confuse when I use this name in later parts of this article.
  5. Click “End Template Editing” from the “GridView Tasks” box.

If you have completed the above steps correctly, you should see the expected checkbox column added in to the grid view.

Design View

As you can see in the image above, in my example I use a Name column along with the check box column to make this clearer.

How to Databind the Template Field:

I use a datatable to populate the gridview so we have to databind our two columns.

The second column name is a “BoundField” so to databind it simply specify the name of the data table column you want to bind to this column in “DataField” property under “Data” property set in the fields dialog box you get when adding the second column (use one of the ways I described above to add a column).

Databinding the template field is a bit tricky, but not hard.

  1. Click “Edit Templates” from the “GridView Tasks” box so that you will see the check box.
  2. Click on the small button with a triangle in the upper right corner of the check box which is similar to the one we clicked on the grid view to get the “Checkbox Tasks” box and then click on the “Edit Databindings…” link inside that box.

You can use this dialog box to bind any property of the control to a data source column

In this example we will bind the “Checked” property of our check box to a Boolean column called “Selected” of the data source.

For that:

  • Select “Checked” from the Bindable Properties section and enter following in the Custom Binding section:
    • DataBinder.Eval(Container, “DataItem.Selected“)
  • Note: the word “Selected” (in red color) refers to the “Selected” field of the data source.

Populating the GridView:

As I described earlier I create a simple data table in the page load, populate it with some dummy data and then bind the grid view with it.

Note: I have used several methods to add data to a table to illustrate those to you.

The Code:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Selected", System.Type.GetType("System.Boolean")));
dt.Columns.Add(new DataColumn("Name", System.Type.GetType("System.String")));

DataRow dr = dt.NewRow();
dr.ItemArray = new object[] { false, "Cassian" };
dt.Rows.Add(dr);
dt.Rows.Add(new object[] { false, "Menol" });
dt.Rows.Add(new object[] { false, "Razeek" });

this.GridView1.DataSource = dt;
this.GridView1.DataBind();
}
}

There are several things that I’d like to bring to your notice:

  • I have checked for postback to make sure this data population is not occurred in general post backs. The reason is the framework refreshes when the grid view is re-bound.
  • So if we don’t do this check, whenever we click on a check box, a postback occurs, the grid gets refreshed, the check boxes get cleared, we cannot keep track of what check boxes are selected…!
  • As illustrate in my code, you can either first populate a datarow and then add it to the datatable
  • Or you can directly add the items using only one line of code.

Retrieving the Status of Checkboxes:

Now we have completed the interface and the user now can select several rows of the grid view using the appropriate check box.

The next step is to capture the rows that the user has selected.

In my example, I have used a button, once clicked; it will display the list of names of the selected people.

I will introduce the code first and then explain it to you.

protected void Button1_Click(object sender, EventArgs e)
{
ArrayList names = new ArrayList();
foreach (GridViewRow gvr in this.GridView1.Rows)
{
if (((CheckBox)gvr.FindControl("chkid")).Checked == true)
{
names.Add(gvr.Cells[1].Text);
}
}

this.Label1.Text = string.Empty;
foreach (object itm in names)
{
this.Label1.Text += " " + itm.ToString();
}
}

Note following:

  • The code iterates through each row of the grid view using a for each loop, takes the Name field from the selected rows and then adds those names into a arraylist
  • The GridViewRow refers to a single row in a grid view
  • Control Control.FindControl(string controlID) – GridViewRow class provides this method to find a specific control within a grid view row. This method becomes very handy in situations like this where we cannot directly access the control from the code because those are generated at run time
  • FindControl returns a control so you have to explicitly cast the returned control to the type of it

Screen Shot:

21

Conclusion:

We can use a template field with a checkbox to allow user to select multiple rows using checkboxes associated to each row. When the button is clicked, checkbox of each row is checked for its status and the row is selected if the user has chosen it.

Was this post helpful to you? How can I improve? – Your comment is highly appreciated!

Cassian Menol Razeek

    How Fibonacci Sequence Relates to Nature

    2009-01-05

    Italian mathematician Leonardo Pisano had a problem worked on to find a mathematical pattern to answer the question: how many pairs of rabbits can be produced from a single pair of rabbits in one year?

    He carried out his work on following assumptions:

    1. Rabbits are kept under optimal conditions
    2. Female rabbits always give birth to pairs
    3. Each pair consists of one male and one female

    If we start with a pair of new born rabbits and monitor the population monthly…

    Rabbits cannot reproduce until they are at least one month old. So in the first month there will only be one pair and at the end of the second month the pair is able to reproduce so the female rabbit will give birth to a new pair.

    In month three the original pair gives birth to yet another pair while their first pair of baby rabbits grows to the adulthood.

    In the beginning of month four there are two pairs of adult rabbits and one pair growing so both of these adult pairs give birth to two new pairs. So the total number of pairs in the end of the fourth month:

    Adult pairs : 2
    Growing pairs : 3
    Total : 5

    Like wise the pattern goes on as follows:

    1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, … on to the infinity. Each number is the sum of the previous two.

    Leonardo Pisano found this interesting pattern on 1202. How come the pattern is named Fibonacci Sequence?

    Leonardo Pisano was also knows as Fibonacci, meaning “son of Bonacci” giving this name to his finding.

    Are rabbits the only species having relevance to Fibonacci Sequence?

    Many natural entities such as Fruits, Vegetables and Seed Heads show spiral patterns which follows Fibonacci Sequence.

    Some examples:

    If you look at the array of seeds in a center of a sunflower you should notice that those seeds are arranged in spiral patterns curving left and right. And the amazing thing is if you count the number of these spirals you will get a Fibonacci number. The most amazing thing is if you divide the spirals pointed to left and right and count those separately you will get two consecutive Fibonacci numbers!

    If you look at a pineapple you can notice that its scales make a spiral pattern and if you look closer and count those scales in each spiral you will notice that those numbers reflect Fibonacci Sequence.

    Same thing can be noticed in pinecones, cauliflower and many more natural things we live with.

    This sequence has an amazing link with the nature and that’s may be why the ratio between two of these numbers is called The Golden Ratio.

    The Golden Ratio:

    Two numbers are considered as in The Golden Ratio if the ratio between the sum of two numbers and the larger one is equal to the ratio between the larger one and the smaller.

    In mathematics the golden ratio is often denoted by the Greek letter ϕ (phi).

    The value of the golden ratio: ϕ = 1.6180339887…

    Was this post helpful to you? How can I improve? – Your comment is highly appreciated!

    Cassian Menol Razeek

    My Goals for the New Year 2009!

    2009-01-01

    It’s a New Year…!

    I want to be much more improved in both my personal and professional lives when I look back at the end of this New Year!

    So I decided to make a list of goals I want to achieve in this year. And I will make sure that I achieve my goals as I go on living this New Year.

    Goals for My Professional Life:

    I have a set of goals which will improve the quality of my professional life and will increase the value of me in the profession. If I directly go to the list…

    1. Obtain MCTS Certification
    2. Obtain SCJP Certification
    3. Be More Competent on My Work at My Office
    4. Make My Clients Happy
    5. Find More Freelance Work
    6. Create Several Methods to Earn Some Money Online

    Goals for My Personal Life:

    1. Keep My Family Happy
    2. Focus More on Health of My and My Girl Friend’s Parents
    3. Cut Extra Fat I Have Gained and Get the Body I Used to Have
    4. Learn to Play Guitar – ANYHOW!!!
    5. Go to Swim

    My Financial Goals:

    1. Open a Fixed Deposit Before the End of June

    Other Goals:

    1. Obtain Work Permit
    2. Give Clothes Regularly to Children of a Poor Family

    These are the Goals I have in my mind at the moment and I will update the list as I go on…!

    Yes, I know, I will have to work so hard if I want to have all of these achieved at the end of this year. I will definitely make this dream come true with the great help from my parents, my girl friend and all my friends around me and always the best helper, The God!

    I wish the whole world, a Happy and Successful New Year!

    Cassian Menol Razeek