*/ In Drag/Drop OF THE GRID OBJECT lparameters oSource, nXCoord, nYCoord, nState &&default parameters With This */ Determine which row the mouse is over... Then force */ activateRow to that row. Start count with zero do case case nYCoord <= .Top */ Force to scroll up a row or more, based on */ distance above grid area... lnScroll = int( (.Top - nYCoord) / 3 ) for ln1 = 1 to lnScroll .DoScroll( 0 ) endfor case nYCoord >= .Top + .Height */ Force to scroll down a row or more, based on */ distance above grid area... lnScroll = int( (nYCoord - .Top) / 3 ) for ln1 = 1 to lnScroll .DoScroll( 1 ) endfor otherwise */ Determine which row the cursor is above from private ln1, lnCurTop */ First, figure what the real row is currently over */ based on each container individually based on .Top Property lnRows = int(( .Height - .HeaderHeight ) / .RowHeight ) lnMinTop = .Top + .HeaderHeight for ln1 = 1 to lnRows */ When determining object, make sure to account for */ any top of form buffer that this container might */ not be at exact position 0 lnMinX = lnMinTop + ( ln1-1 ) * .RowHeight lnMaxX = lnMinTop + ln1 * .RowHeight */ Strange artifact of dragging over with the icon */ cursor. The scroll limit appears to be based on */ the middle of the selected row, not the actual top */ or bottom of the control... Allow for test lnMinX = lnMinX + int( .RowHeight / 2 ) lnMaxX = lnMaxX + int( .RowHeight / 2 ) if between( nYCoord, lnMinX, lnMaxX ) .activatecell( ln1, 1 ) exit endif endfor endcase EndWithThen once you have forced the ActivateCell, the table should be force to the proper record for whatever updates you have intended. Hope this clarifies the determining factors of where to drop based on the visible viewing area of the grid.