Solved

Checking Items in CheckListBox

Posted on 2004-10-14
7
2,555 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 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
Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

 
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

Enroll in May's Course of the Month

May’s Course of the Month is now available! Experts Exchange’s Premium Members and Team Accounts have access to a complimentary course each month as part of their membership—an extra way to increase training and boost professional development.

Question has a verified solution.

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

This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…
Finding and deleting duplicate (picture) files can be a time consuming task. My wife and I, our three kids and their families all share one dilemma: Managing our pictures. Between desktops, laptops, phones, tablets, and cameras; over the last decade…

734 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