Cannot add identical strings in first column of CListCtrl

Hi.  I add two rows of text to a list control (with report view) where the first column has the same string in it.  For example:

   listCtrl.InsertItem(0, "MyString");
   listCtrl.SetItemText(0, 1, "Row0Col1");
   listCtrl.SetItemText(0, 2, "Row0Col2");

   listCtrl.InsertItem(1, "MyString");
   listCtrl.SetItemText(1, 1, "Row1Col1");
   listCtrl.SetItemText(1, 2, "Row1Col2");

The result is that the first row contains the column 1 text ("MyString"), but columns 2 and 3 are blank.  Row 2 contains everything that I would expect it to contain.
Ie.

Row1:       My String  |                   |
Row2:       My String  |  Row1Col1   |   Row1Col2

If I change the column 1 strings so that are differnt, then both rows have all the strings I would expect (below).  Do the strings in column 0 have to be unique?  What's going on here?

Row1:       My String Row 1 |  Row1Col1   |   Row1Col2
Row2:       My String Row 2 |  Row1Col1   |   Row1Col2

Also, the ListView is created with the following flags:

style &= ~LVS_TYPEMASK;
style |= LVS_REPORT;
style |= LVS_EDITLABELS;
style |= LVS_SORTASCENDING;
style |= LVS_SINGLESEL;
mromeoAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
nonubikConnect With a Mentor Commented:
Ok, I got it. It's quite simple :)

When you insert the second  item, because it is the same with the first, the sorting algorithm will place it first.
But you set the item text for the second.... So the first one (the one you just inserted) has no subitem texts.

You should do:

int iIdx = listCtrl.InsertItem(1, "MyString");
   listCtrl.SetItemText(iIdx, 1, "Row1Col1");
   listCtrl.SetItemText(iIdx, 2, "Row1Col2");
0
 
nonubikCommented:
I reproduced your problem. Seems to be from the LVS_EDITLABELS style. If exclude it from the styles, it will behave normaly.
0
 
mromeoAuthor Commented:
I tried excluding that style.  That didn't change the result for me.   Did you actually get that to work?
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
nonubikCommented:
Do not mind the above comment :)
I's from the sorting
0
 
mromeoAuthor Commented:
It appears to be the LVS_SORTASCENDING style.  Is there any way around this limitation?
0
 
nonubikCommented:
It's a problem sorting the items in a list control.
If you do not set a sorting style, will work...
I'll try digging deeper
0
 
KurtVonCommented:
I think nonubik is explaining that the insert item position is ignored if the list control is sorted, so you are actually changing the first item's row with your second set of SetItemText statements.  Try using the return value from InsertItem as the row number instead.
0
 
mromeoAuthor Commented:
Ahhh..I see.  I suppose that makes sense.  Perhaps I should add them all unsorted first and then sort them afterwards.  Thanks.
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
No - check the index of the newly added item, then add the subitems to that - it should be returned from the InsertItem
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.