ayha
ayha

Reputation: 181

CheckBoxList loop not working

I'm trying to select values in a CheckBoxList control based on a data source. I have five items in the CheckBoxList and three items in the data source, but in the loop I only get one item selected.

if (ddlUserId.SelectedIndex != 0)
{
   RoleDetails rd;
   rd = CatalogAccess.GetSingleUserRole(ddlUserId.SelectedValue.ToString());

   for (int i = 0; i < cblRoles.Items.Count; i++)
   {
      cblRoles.Items.FindByValue(rd.RoleID.ToString()).Selected = true;
   }
}

I tried this, but it still selects only one item:

RoleDetails rd;

for (int i = 0; i < cblRoles.Items.Count; i++)
{            
   rd = CatalogAccess.GetSingleUserRole(ddlUserId.SelectedValue.ToString());

   if (cblRoles.Items[i].Value == rd.RoleID.ToString())
      cblRoles.Items[i].Selected = true;
}

CheckboxList bind code

  cblRoles.DataSource = CatalogAccess.GetRoles();
  cblRoles.DataTextField = "RoleDetails";
  cblRoles.DataValueField = "RoleId";
  cblRoles.DataBind();

Upvotes: 0

Views: 105

Answers (1)

GMD
GMD

Reputation: 761

When you use for loop you need to use index value (Here it is "i"), like

 for (int i = 0; i < cblRoles.Items.Count; i++)
 {
   if(cblRoles.Items[i].Value == rd.RoleID.ToString())
           cblRoles.Items[i].Selected = true;
 }

Or you can use foreach as below:

Here i have created looping through items of checkbox list using foreach & item will be made selected id its value will match RoleId .

 foreach (ListItem li in cblRoles.Items)
    {
        if (rd.RoleID.ToString() ==  li.Value)
        {
            li.Selected = true;
        }
        else
        {
            li.Selected = false;
        }
    }

Upvotes: 1

Related Questions