why don't you do it upon SelectedIndexChanged
event of your comboBox. That's where you are re-binding everytime your CheckedListBox.
so inside AddSubCategories2(int from, int to)
, after adding items to your CheckedListBox, again iterate through the items of it and mark all those which exist in the checkedItems list.
private void AddSubCategories2(int from, int to)
{
for (int i = from; i < to; i++)
clbSubCategories2.Items.Add(strSubCategories2[i]);
if(checkedItems!=null)
foreach(string item in checkedItems)
{
int index= clbSubCategories2.FindStringExact(item);
if(index>-1)
clbSubCategories2.SetItemChecked(index, true);
}
}