Codejock Forums Homepage
Forum Home Forum Home > Codejock Products > Visual C++ MFC > Report Control
  New Posts New Posts RSS Feed - Skip rows in Report Control that are not editable
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

Skip rows in Report Control that are not editable

 Post Reply Post Reply
Author
Message
orca View Drop Down
Newbie
Newbie


Joined: 05 November 2009
Status: Offline
Points: 1
Post Options Post Options   Thanks (0) Thanks(0)   Quote orca Quote  Post ReplyReply Direct Link To This Post Topic: Skip rows in Report Control that are not editable
    Posted: 06 November 2009 at 12:32pm
I have a report control that contains three columns and 100+ rows.  Some of the rows are considered category headers (Category 1, Category 2, etc.) while others are calculated.  Category headers and calculated rows are not editable.  All other rows allow for user input in the second and third column (the first column is a description of the row).  All of this has been implemented by another programmer and is working correctly.

I've been tasked with adding a bit of keyboard navigation for the grid such that when a user hits the up or down arrow key, the focus will skip any non-editable rows, jumping immediately to the next editable row in the grid in either direction.  I should add here that I have very little experience in using these controls.

What I've come up with is to override the OnFocusChanging event in our derived report control class.  In that event I've added logic to do the navigation described above and it works, at least as far as skipping the non-editable rows are concerned.  The problem is that when I use that code to skip the non-editable rows I can no longer edit the editable rows.  It selects them as if they were editable but I can't actually type in them anymore.  So the navigation works, but I've somehow killed the editing.

Here's my navigation code, for better or worse:

BOOL CDerivedListReportCtrl::OnFocusChanging(CXTPReportRow* pNewRow, CXTPReportColumn* pNewCol)
{
    BOOL rc = FALSE;
    if (pNewRow)
    {
        int iNewRowIndex = pNewRow->GetIndex();

        CXTPReportRows* pRows = GetRows();
        ASSERT(pRows);

        int iRowCount = pRows->GetCount();
        int iFocusedIndex = 0;

        // Find the currently focused row
        for (int i = 0; i < pRows->GetCount(); i++)
        {
            CXTPReportRow* pRow = pRows->GetAt(i);

            if (pRow->IsFocused())
            {
                iFocusedIndex = i;
                break;
            }
        }

        if (pNewRow->GetRecord()->GetItem(1)->IsEditable())
        {
            rc = TRUE;
        }
        else
        {       
            //if iFocusedIndex < iNewRowIndex then we're moving down, otherwise we're moving up
            if (iFocusedIndex < iNewRowIndex)
            {           
                do
                {
                    iFocusedIndex++;
                    if (iFocusedIndex < iRowCount)
                    {               
                        if (pRows->GetAt(iFocusedIndex)->GetRecord()->GetItem(1)->IsEditable())
                        {                               
                            break;
                        }
                    }
                } while (iFocusedIndex < iRowCount);
            }           
            else
            {           
                do
                {
                    iFocusedIndex--;
                    if (iFocusedIndex > 0)
                    {               
                        if (pRows->GetAt(iFocusedIndex)->GetRecord()->GetItem(1)->IsEditable())
                        {                               
                            break;
                        }
                    }
                } while (iFocusedIndex > 0);
            }       

            if (iFocusedIndex < 1)
            {
                iFocusedIndex = 1;
            }

            SetFocusedRow(pRows->GetAt(iFocusedIndex));   
        }
    }   

    return rc;
}

If I comment that code out and just return TRUE I can edit the rows again but the non-editable rows are no longer skipped (obviously).  If I enable the above code, navigation works but I can't edit any of the editable rows (which are just CXTPReportItemText objects).

Any help would be greatly appreciated.

Thank you in advance.
Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down



This page was generated in 0.076 seconds.