Print Page | Close Window

Programmatically selecting a row

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=3591
Printed Date: 07 May 2024 at 5:11am
Software Version: Web Wiz Forums 12.04 - http://www.webwizforums.com


Topic: Programmatically selecting a row
Posted By: John31
Subject: Programmatically selecting a row
Date Posted: 02 February 2006 at 1:57pm

Is it possible to select a row programmatically? 

For example:

The user is looking a record that is near the bottom of the list and has scrolled to get there.  The user deletes this record.  I can get the view to stay the same by restoring the TopRowIndex to the value it was before the Populate routine.  However, if the user hits an arrow key the rc jumps to the top of the list.  I have tried the following but it does not work as the row selected value goes back to false.

 

Any Ideas?

lTopIndex = RC1.TopRowIndex

' loop through all report records
For Each oRec In RC1.Records
    If InStr(1, sRecID, oRec.Item(COL_RECID).Value) Then
        Set oRow = RC1.Rows.FindRow(oRec).NextSiblingRow
        RC1.Records. RemoveAt oRec.Index
    End If
Next
                                   
RC1.Populate
RC1.TopRowIndex = lTopIndex
If Not oRow Is Nothing Then
    oRow.Selected = True
End If

 

 



-------------
Regards

John Layton



Replies:
Posted By: SuperMario
Date Posted: 02 February 2006 at 2:24pm
Try setting the ReportControl.FocusedRow


Posted By: John31
Date Posted: 02 February 2006 at 2:30pm

Mario

Did you mean FocusedRow?  This does not highlight the record either.  Any other ideas?

 



-------------
Regards

John Layton


Posted By: SuperMario
Date Posted: 02 February 2006 at 2:39pm
I just tried this:

Set wndReportControl.FocusedRow = wndReportControl.Rows(8)

and it both focuses and selects the row.  Is this not what you want?


Posted By: John31
Date Posted: 02 February 2006 at 2:57pm

I got this to work some of the time.  Here is my dilemma, I think.

The records in the ReportControl are pulled from a DB and then sorted various ways depending on user input.  I then send a command to my server using the record id for each selected column to delete.  When I get the server response it sends me back list of records that it has deleted which is the sRecID string in the code above. 

I have no problem finding the records to delete using the code above. Finding the relative row to set focus back to is what the problem is.  I can store the last index of the last removed record and then find this row.  However, given that the ReportRows are sorted there is no guarantee that the row associated with the last index -1 is near the row that was just deleted. 

Does this make sense or am I confusing everyone.

 

 

 

 

 



-------------
Regards

John Layton


Posted By: SuperMario
Date Posted: 02 February 2006 at 3:01pm
Maybe you should use ReportRows.FindRow method to find the Row, then get its index.  You should get the Row index and not the Record index ans the Record index will remain the same.


Posted By: John31
Date Posted: 02 February 2006 at 3:20pm

I think I figured a faster way to do it but I need to know if I can LOCK the report control so they cannot click anything else until the process is complete?  Is there a way to do this?

 

 



-------------
Regards

John Layton


Posted By: John31
Date Posted: 02 February 2006 at 3:33pm

This works great if the user has not selected another record between delete and the server reply

 

' get the current top row to use later
lTopIndex = RC1.TopRowIndex
' set the last index to highest possible value
lLastIndex = RC1.Rows.Count
' check to see how many rows are selected
If RC1.SelectedRows.Count = 1 Then
    If RC1.SelectedRows(0).GroupRow Then
        ' loop through all child rows for this group
        For Each oRow In RC1.SelectedRows(0).Childs
             ' make sure the recid is one that actually got deleted
             If InStr(1, sRecID, oRow.Record.Item(COL_RECID).Value) Then
                 ' adjust the last row index if needed
                 If oRow.Index < lLastIndex Then lLastIndex = oRow.Index
                 ' remove the record
                 RC1.Records.RemoveAt oRow.Record.Index
             End If
        Next
    Else
        ' since this is a single row just set and delete
        Set oRow = RC1.SelectedRows(0)
        ' make sure the recid is one that actually got deleted
        If InStr(1, sRecID, oRow.Record.Item(COL_RECID).Value) Then
             ' adjust the last row index if needed
             If oRow.Index < lLastIndex Then lLastIndex = oRow.Index
             ' remove the record
             RC1.Records.RemoveAt oRow.Record.Index
        End If
    End If
Else
    ' loop through all selected records
    For Each oRow In RC1.SelectedRows
        ' make sure the recid is one that actually got deleted
        If InStr(1, sRecID, oRow.Record.Item(COL_RECID).Value) Then
             ' adjust the last row index if needed
             If oRow.Index < lLastIndex Then lLastIndex = oRow.Index
             ' remove the record
             RC1.Records.RemoveAt oRow.Record.Index
        End If
    Next
End If
' repopulate the control
RC1.Populate
' set the top index back to what it was
RC1.TopRowIndex = lTopIndex
' correct the last index as needed
If lLastIndex > RC1.Rows.Count Then
    lLastIndex = RC1.Rows.Count - 1
ElseIf lLastIndex > 1 Then
    lLastIndex = lLastIndex - 1
End If
' get the row we want to set focus on
Set oNextRow = RC1.Rows(lLastIndex)
' make sure it exists and set focus
If Not oNextRow Is Nothing Then Set RC1.FocusedRow = oNextRow



-------------
Regards

John Layton


Posted By: SuperMario
Date Posted: 03 February 2006 at 11:48am
Maybe you can first delete the record from your database, then after the delete is finished you can delete it from the ReportControl.



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