Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 258
  • Last Modified:

List view control problem

Hi,

I am building a dialog box with 3 edit controls, a list view control in report view and 3 push buttons. With the buttons I want to "Add", "Change" and "Delete" items in the list view control, so for every button I have a button click event handler. See below my event handler for an "Add" button click :

void CBuildShareListDlg::OnAddShareItem()
{
    // Retrieves the following data from the dialog box :
    // CListCtrl    m_lvcShareList;
    // long         m_lVolume;
    // CString      m_strDate;
    // float        m_fRate;
    if ( UpdateData() != TRUE )
        return;
        :
        :
    // Build a CTime object "time" out of m_strDate.

    LV_ITEM      lvItem;
    int          iActItem, iItem;
    TCHAR        szText[3][15];

    lstrcpy( szText[0], ( LPCTSTR ) time.Format( "%d/%m/%Y" ) );
    _stprintf( szText[1], "%f", m_fRate );
    _strprint( szText[2], "%u", ( UINT) m_lVolume );

    iItem = ?  // THAT IS MY PROBLEM.

    for ( int iSubItem = 0; iSubItem < 3; iSubItem++ )
    {
        lvItem.mask = LVIF_TEXT | ( iSubItem == 0 ? LVIF_IMAGE : 0 );
        lvItem.iItem = ( iSubItem == 0 ) ? iItem : iActItem;
        lvItem.iSubItem = iSubItem;
        lvItem.pszText = szText[iSubItem];
        lvItem.iImage = 0;

        if ( iSubItem == 0 )
            ASSERT( ( iActItem = m_lvcShareList.InsertItem( &lvItem ) )!= -1 );
        else
            ASSERT( m_lvcShareList.SetItem( &lvItem ) != -1 );
    }
}

Question 1 :
According to my documentation iItem is a zero based index, but must these indexes be ordered starting from 0 and incremented by 1 each time a new ShareItem is added, or is it just a value that identifies an item in the control.

Question 2 :
When I write my handlers for the "Change" and "Delete" button clicks, how can I figure out which item in the list view is selected. A little bit of code would be very appreciated.


Thanks in advance for everyone that is willing to help me.
0
bs161900
Asked:
bs161900
1 Solution
 
Answers2000Commented:
#1
The index identifies the item.  But it is important (depending if the list's built in sort is turned off), it gives the position to insert.  If you want to insert at the end of the list, use GetItemCount() to get the number of items currently in the list, and this gives you to index to use when adding items.

#2
int nItem = m_lvc.GetNextItem( nSearchFrom, LVNI_SELECTED ) ;

Gives the _next_ selected item.  If you have a max of 1 item selected (depends on your lists styles, set nSearchFrom to -1)...if you have a list control style allowing multi-seleciton then start from -1.  When you find an item, repeat the call with the return value of the previous call to find the next item, and so.

nItem will be set to -1 when no (more) items are found
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.

Join & Write a Comment

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

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

Tackle projects and never again get stuck behind a technical roadblock.
Join Now