Sorting CComboBox containing numbers

Hi,
I have a CCombobox containing numbers, I want its items to be sorted.
How do I do that ?

thanks,
iris.
iriszAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jkrCommented:
Add the 'CBS_SORT' sytel to the combo box. You can do that either in the resource editor or by setting that style bit when calling 'Create()'
0
iriszAuthor Commented:
My combobox contains numbers !!!
I need it to be sorted not alpha-betic, but numerically !!!
0
jkrCommented:
>>My combobox contains numbers !!!

I got that.

>>I need it to be sorted not alpha-betic, but numerically !!!

Where's the difference? Have you tried it?
0
OWASP: Avoiding Hacker Tricks

Learn to build secure applications from the mindset of the hacker and avoid being exploited.

ZoppoCommented:
jkr, difference is i.e.

Alphabetical:
23
234
24

Numerical:
23
24
234

irisz, best would be to first fill i.e. an array with the
numbers, sort the array (i.e. with qsort) and then fill
the combobox from the array.

ZOPPO
0
Vinayak KumbarSr Program ManagerCommented:
Hi irisz,

I understand what u r talking about. Yes, there is no straight forward way I believe. The real simple way would be Remove the "Sorting" option to that combobox and insert the items in a sorted manner. As u have numbers, take them in a array and sort that array first and then insert the items.

Try it out.
VinExpert
0
Vinayak KumbarSr Program ManagerCommented:
Hi,

Just see the following two functions. U can derive ur own class from CComboBox and add the following functions and call the AddNumber function. Just test the code once for correct working.

int CSortCombo::AddNumber(int nItem, BOOL bSelect)
{
     CString cStrTemp;
     int nDummy = 0;
     int nIndex = 0;
     int nItemCnt = GetCount();
     int *pItems = new int[nItemCnt + 2];
     
     ZeroMemory(pItems, (nItemCnt + 2) * sizeof(int));

     // Get the items
     if(nItemCnt != 0)
     {
          for(nIndex = 0; nIndex < nItemCnt; nIndex++)
          {
               GetLBText(nIndex, cStrTemp);
               sscanf(cStrTemp, "%d", &nDummy);
               pItems[nIndex] = nDummy;
          }
     }

     // Add the new eliment also
     pItems[nIndex] = nItem;
     nItemCnt++;

     // Sort them
     if(nItemCnt > 1)
          SortNumbers(pItems, nItemCnt);

     // Clear the previous items
     ResetContent();

     // Insert the sorted items now
     for(nIndex = 0; nIndex < nItemCnt; nIndex++)
     {
          cStrTemp.Format("%d", pItems[nIndex]);
          AddString(cStrTemp);
     }

     // Clean the memory
     if(pItems)
     {
          delete []pItems;
          pItems = NULL;
     }

     // Get the index of insert item
     cStrTemp.Format("%d", nItem);
     nIndex = FindStringExact(0, cStrTemp);

     // Select the inserted string
     if(bSelect)
     {
          SetCurSel(nIndex);
     }

     return nIndex;
}

void CSortCombo::SortNumbers(int *pElements, int nCount)
{
     for(int nMain = 0; nMain < nCount; nMain++)
     {
          for(int nSub = nMain + 1; nSub < nCount; nSub++)
          {
               if(pElements[nMain] > pElements[nSub])
               {
                    int nTemp = pElements[nMain];
                    pElements[nMain] = pElements[nSub];
                    pElements[nSub] = nTemp;
               }
          }
     }
}

Hope it helps.
VinExpert
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Mortiis1Commented:
I think it's a little slow to sort each time you want to insert a number.
If you want to insert 500 number it could be better to make 500 addstring
and after sort the listbox.

Or if you have the number sort them and after insert them.
0
Mortiis1Commented:
Sorry i said listbox but i want to sai combobox
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
System Programming

From novice to tech pro — start learning today.