Solved

Checking Items in CheckListBox

Posted on 2004-10-14
7
2,550 Views
Last Modified: 2012-06-27
Greetings,

Here's the issue. I first have users check certain items in the checklistBox, and I save thier selection in an arraylist. I store all the items in the checklistBox which should also store whichs one are checked. The problem comes when i want to repopulate the same checkListBox later from the items stored in the arraylist.

Here's the code to populate the ChecklistBox...
StreamReader myXmlStream = new StreamReader(myFileStream);
DataSet myDataSet = new DataSet();
myDataSet.ReadXml(myXmlStream);
                  
chBook.DataSource    = myDataSet.Tables[4];
chBook.DisplayMember = myDataSet.Tables[4].Columns[0].ToString();
chBook.ValueMember   = myDataSet.Tables[4].Columns[1].ToString();

Here's how i store the information...
for(int i = 0; i < this.chBook.Items.Count; i++){
ls.books.Add(chBook.Items[i]);}

Now how do i repopulate the CheckListBox from the arraylist? I've tried so many things I won't even post them here.

Thanks,


0
Comment
Question by:vargasbo
  • 4
  • 3
7 Comments
 
LVL 3

Expert Comment

by:aacool
ID: 12315025
You have a few declarations missing, but assuming,

ArrayList lsBooks;
CheckedListBox chBook
private void setCBValues()
{
      chBook.Items.Clear();
        // Populate checkedListBox with items from array
      chBook.Items.AddRange(lsBooks.ToArray());
}

I have a fully working example to send you if you need it - please mail me at aacool - hotmail.com if needed
0
 
LVL 3

Assisted Solution

by:aacool
aacool earned 200 total points
ID: 12315173
Of course, if you want to also store and retrieve the list items check state, make a class like
class CheckedItem
{
   string text;
   bool itemState;
}

and add objects of this class when storing the objects in the ArrayList. When getting them back, create items one by one and set the text as the item Text and the checked state as the CheckState property for the Item.

if(chItem.ItemState==true)
    chBook.Items.Add(chItem.text,CheckState.Checked);
else
    chBook.Items.Add(chItem.text,CheckState.Unchecked);

0
 
LVL 1

Author Comment

by:vargasbo
ID: 12315357
aacool

What i did try your following suggestion, but it didn't work. What shows up in the CheckedListBox is System.DataView..

DataRowView []oCheckedItems= new DataRowView[ls.books.Count];
ls.books.CopyTo(oCheckedItems,0);
chBook.DataSource = null;  //Have to remove Datasource otherwise can't edit items            
chBook.Items.AddRange(ls.books.ToArray());

Why can't i just save the items in the list with it's checked status? This is the code I'm using which shows the item name, but it doesn't show it's checked state.

for(int x = 0; x < oCheckedItems.Length; x++) {
   chGrade.Items.Add(oCheckedItems[x].Row[0]);}
                  
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 3

Assisted Solution

by:aacool
aacool earned 200 total points
ID: 12320835
I see why - the way you are adding your items to the array is you are adding the Objects from the chBook.Items.
The only important elements from the checkedListBox.Items are the Item Text and Checked State. Store the text from chBook.Items.Item[i].Text and chBook.Items.Item[i].CheckState in an object and put that in your array. Then, use the code to add items to the chBook

Basically, Do you need to use DataRowView[] as your array? Use something simple like an array of the class
class CheckedItem
{
   string text;
   bool itemState;
}
chItemsArray[] CheckedItem;
Then when adding entries to the chBook, do this:

for(int x=0;x < checkedItemsArray;x++)
{
if(chItemsArray[x].ItemState==true)
    chGrade.Items.Add(chItemsArray[x].text,CheckState.Checked);
else
    chGrade.Items.Add(chItemsArray[x].text,CheckState.Unchecked);
}
0
 
LVL 3

Accepted Solution

by:
aacool earned 200 total points
ID: 12320898
Going back to your original code,
rather than storing the items as

for(int i = 0; i < this.chBook.Items.Count; i++){
                      ls.books.Add(chBook.Items[i]);}

use

for(int i=0;i<chBook.Items.Count;i++)
{
     CheckedItem chItem = new CheckedItem();
     chItem.text = chBook.Items[i].Text;
     (chBook.Items[i].CheckState=CheckState.Checked) ? chItem.itemState=true : chItem.itemState = false;
     chItemsArray[i++] = chItem;
     chItem.Dispose();
}

to store the checkedlistbox items in the item array
0
 
LVL 1

Author Comment

by:vargasbo
ID: 12320996
for(int i=0;i<chBook.Items.Count;i++)
{
     CheckedItem chItem = new CheckedItem();
     chItem.text = chBook.Items[i].Text; <---- Can't do this
     (chBook.Items[i].CheckState=CheckState.Checked) ? chItem.itemState=true : chItem.itemState = false; <<< --- or this
     chItemsArray[i++] = chItem;
     chItem.Dispose();
}

Have to uses DataRowView b/c the CheckListBox is tied to a Datasource, That why i can't uses the chBook.Items[i].Text.
0
 
LVL 1

Author Comment

by:vargasbo
ID: 12321337
OK, I finally got the code to work and here's the code

When Items first saves....

for(int i = 0; i < this.chBook.Items.Count; i++){
                        
CheckedItems chItem = new CheckedItems();
chItem.text  = ((DataRowView)chBook.Items[i]).Row[0].ToString();
chItem.check = chBook.GetItemChecked(i);
ls.books.Add(chItem);
chItem = null;
}

When repopulating the form
chBook.DataSource = null;
for(int x = 0; x < ls.books.Count; x++) {
  if(((CheckedItems)ls.books[x]).check == true)
      chBook.Items.Add(((CheckedItems)ls.books[x]).text,true);
      else
      chBook.Items.Add(((CheckedItems)ls.books[x]).text,false);
}

Thanks for the help
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Article by: Najam
Having new technologies does not mean they will completely replace old components.  Recently I had to create WCF that will be called by VB6 component.  Here I will describe what steps one should follow while doing so, please feel free to post any qu…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

756 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question