We help IT Professionals succeed at work.

Checkboxlist - set checked status from database

glebn asked
Medium Priority
Last Modified: 2009-07-29
I have a checkboxlist bound to an object data source in a VB ASP.NET 2.0 environment.

My object datasource returns a three column sqlDataReader with the following columns: "TagName", "TagID", "Selected". The "Selected" column is boolean. I set the "DataTextField" = "TagName" and the "DataValueField" = "TagID". Unfortunately there is no "DataCheckedField" property to set the selected status of the check box to the value from the "Selected" column.

When I load the checkboxlist I want the items for which  the "Selected" field from the database equals "True" to be selected in the checkboxlist. What is the easiest way to do this? If the answer involves setting it with code which it probably does, please use VB.

Note: I have no problem writing back the user's selections to the database.
Watch Question

In page load

for (int i = 0; i < CheckBoxList1.Items.Count; i++)
            CheckBoxList1.Items[i].Selected = true;

i mean loop thru reader and set "DataCheckedField"

CheckBoxList1.Items[i].Selected =   //convert to boolean and set salData("DataCheckedField")

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts


Thanks for responding Renju, but I'm sorry your comments didn't answer my question. Your second comment was too vague and it didn't use VB. Telling me to loop through and set the box tells me nothing about how to do this most effectively. Again, thanks for responding.

I solved my own problem. My fundamental mistake was trying to use one datasource to build the list and set the values. Being an ASP.NET newbie I did this because I expected to be able to use the boolean "Selected" field to set the check box "checked" status which I now see that I can't. Instead, I used a datasource to populate the CheckboxList which included all possible rows ignoring the "Selected" field. I then created a different data source pulling only the rows for which selected was true. This second data source I used for the sqlReader in the code below to loop through the checkboxlist items during page load to check the appropriate items.

If sqlReader.HasRows Then
      Do While sqlReader.Read()
            For Each li As ListItem In Me.chkblCategories.Items
                  If li.Value = sqlReader("TagID") Then
                        li.Selected = True
                  End If
        ' If sqlReader doesn't have rows then no items should be selected.
      For Each li As ListItem In Me.chkblCategories.Items
            li.Selected = False
End If
sqlreader = Nothing

If anybody has suggestions for improving this or alternate approaches to the problem I would be glad to award the points.

Do you mean by like this? :

If sqlReader.HasRows Then
    Do While sqlReader.Read()
     While i < MyList.Items.Count
      Dim chklst As CheckBoxList = CType(MyList.Items(i).FindControl("CheckBoxList1"), CheckBoxList)
      quantity = Int32.Parse(quantityTxt.Text)
      If chklst .value = sqlReader("TagID") Then
        chklst .Checked = True Then
      End If
    End While
End IF


Both work fine. I prefer the For-Next loop because it is easier to read--don't know which method would be faster but the number of checkboxes are so small that it doesn't matter.

P.S. My Else clause was written a little to late at night ;) -- as written it doesn't clear checkboxes properly in some cases. I fixed it by removing the Else clause entirely and putting the clear all checkboxes code before the initial If-Then.

Thanks for the comment.


I actually decided to use my solution posted above, but appreciate both responses which were correct solutions. I gave sandip132 most of the points because s/he gave a detailed solution with VB code.
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

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


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.