Click here to Skip to main content
Click here to Skip to main content

Store and show Tree struct in a Combobox

, 31 Jul 2002 GPL3
Rate this:
Please Sign up or sign in to vote.
Store and show Tree struct in Combobox

Sample Image - CWzCombox.gif

Introduction

I am working in a CAPP project which based on database. We often use combo-box to show all table in database to user and let user select a table, it's a simple way, not only for the user but also for coder. In some condition, there is special relationship between one table and another table, the simple combo-box can't describe it. I write a new class to deal with this condition.

I use a struct to store the relationship between items (tables):

typedef struct tagITEMDATA
{
    WORD wParantOriginIdx; //the root item's parent is nRootIndex
    WORD wOriginIdx; //Original index when first insert to listbox
    BYTE cType;
    BYTE cLevel;
}ITEMDATA,*LPITEMDATA;
  • wParantOriginIdx is the item's parent original index (the index when it was first insert to combo-box), the index of items may change when you add or delete items, so we should keep it.
  • wOriginIdx is item's original index.
  • cType mark the item type, maybe use for other special .
  • cLevel is the level of items, children level is higher than parents.

This struct is the core of CWzCombox class, please check source code for detail.

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)

Share

About the Author

Simon.W
Software Developer (Senior)
China China
I had graduated from HuaZhong University of Science & Technology. Now, I'm working in ZTE.

Comments and Discussions

 
GeneralVery good. One thing to keep in mind though Pinmemberstrtdusty7-Mar-05 11:38 
Thanks for the quality code!  One thing to keep in mind for those using this.  Because the return index from the AddCTString method is not unique, you need to fill the tree in a depth first fashion (unless I'm missing something).  Indexes within the tree can be duplicated so something like this:
 
	WORD wParentIdx1 = m_comboType.AddCTString(nRootIndex,nTypeTYM,"66kv Concrete Single Pole"); //==0
	WORD wParentlevel1 = m_comboType.AddCTString(wParentIdx1,nTypeTYC,"5/160");//==1
	WORD wParentlevel2 = m_comboType.AddCTString(wParentIdx1,nTypeTYC,"5/180");//==2
	WORD wParentlevel3 = m_comboType.AddCTString(wParentIdx1,nTypeTYC,"5/200");//==3
	WORD wParentlevel4 = m_comboType.AddCTString(wParentIdx1,nTypeTYC,"5/220");//==4
	m_comboType.AddCTString(wParentlevel1,nTypeTYX,"21.5m80kN-C+5/160+G-MS"); //returns an index of 2
	m_comboType.AddCTString(wParentlevel1,nTypeTYX,"21.5m60kN-C+5/160+G-M2"); //returns an index of 3.  But we added it to a parent of 2.  Which one is that?
	m_comboType.AddCTString(wParentlevel1,nTypeTYX,"21.5m24kN-C+5/160+G-M2");//returns an index of 4
	m_comboType.AddCTString(wParentlevel2,nTypeTYX,"21.5m80kN-C+5/180+");//returns an index of 3
	m_comboType.AddCTString(wParentlevel2,nTypeTYX,"21.5m24kN-C+5/180+");//returns an index of 4
	m_comboType.AddCTString(wParentlevel2,nTypeTYX,"21.5m60kN-C+5/180+");//returns an index of 5
 
Will result in some odd results.   
 

However, if you fill the tree depth first, it seems to work great.  I started looking for a non-invasive fix but gave up and just filled the tree the way it expects.

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.141223.1 | Last Updated 1 Aug 2002
Article Copyright 2002 by Simon.W
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid