>>Nadya,
>>
>>Here's the Reorder() method of my grid class:
>>
>>
>>lparameter pcOrder, plAscending
>>
>>local i, j, llLockScreen, lnRecno, lnRelativeRow, lnDirection, lcDescending
>>
>>llLockScreen = thisform.LockScreen
>>thisform.LockScreen = .t.
>>
>>lnRecno = recno()
>>lnRelativeRow = this.RelativeRow
>>lcDescending = iif( ! plAscending, "descending", "ascending" )
>>set order to pcOrder &lcDescending
>>this.Refresh()
>>
>>goto lnRecno
>>this.Refresh()
>>
>>if ( lnRelativeRow != this.RelativeRow )
>> * the record didn't wind up at the same grid row, so we scroll the grid
>>
>> lnDirection = iif( lnRelativeRow > this.RelativeRow, 0, 1 )
>> j = abs( lnRelativeRow - this.RelativeRow )
>> for i = 1 to j
>> this.DoScroll( lnDirection )
>> endfor
>>
>> this.Refresh()
>>endif
>>
>>thisform.LockScreen = llLockScreen
>>
>>
>>>Perhaps I asked this question already. There is one annoying behavior of the grid, which I need to overcome. When I click on the column's header, I'm re-ordering on that field and I'm still on the same record. Is where a way to avoid scrolling up or down of the grid? E.g. grid should remain with the same amount of records before the selected record and after it?
>>>
>>>Or it is impossible without changing the record position?
>
>David,
>
>Thanks a lot to you and Fabio for the code. I'm going to try it tomorrow...
This code open a issue ( a bug for me ):
it fire multiple beforeRCC/afterRCC because it change the record pointer.
Example:
- with a record Buffer the buffer is written
- if a change cell refresh other container/form you have multiple refresh
----
A correct reorder, preserving the relative row (when possible)
it doesn't have to produce any beforeRCChange
that is it must be does without moving the record.