Print Page | Close Window

Skip rows in Report Control that are not editable

Printed From: Codejock Forums
Category: Codejock Products
Forum Name: Report Control
Forum Description: Topics Related to Codejock Report Control
URL: http://forum.codejock.com/forum_posts.asp?TID=15561
Printed Date: 26 April 2024 at 5:22am
Software Version: Web Wiz Forums 12.04 - http://www.webwizforums.com


Topic: Skip rows in Report Control that are not editable
Posted By: orca
Subject: Skip rows in Report Control that are not editable
Date 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.



Print Page | Close Window

Forum Software by Web Wiz Forums® version 12.04 - http://www.webwizforums.com
Copyright ©2001-2021 Web Wiz Ltd. - https://www.webwiz.net