?
Solved

Checking Items in CheckListBox

Posted on 2004-10-14
7
Medium Priority
?
2,566 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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 800 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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 3

Assisted Solution

by:aacool
aacool earned 800 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 800 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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

In order to hide the "ugly" records selectors (triangles) in the rowheaders, here are some suggestions. Microsoft doesn't have a direct method/property to do it. You can only hide the rowheader column. First solution, the easy way The first sol…
Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…

718 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