Emil,
Yes, it wasn't that. The interface drag-and-drop had a bug which Syncfusion has fixed and will be available in the 2017 Volume 1 SP1 release.
However the code-behind QueryRowDraggingEventArgs.To parameter still has the same unexpected behavior. That is, it returns the same index value when dropping below either the second-last row or the last row of the Grid. SyncFusion provided a solution that uses the QueryRowDraggingEventArgs.Position.Y parameter to distinguish those two scenarios. Here's the code in case it's useful to anyone else.
public int LastIndex
{
get
{
return (dataGrid.GroupColumnDescriptions.Count > 0
? this.dataGrid.View.TopLevelGroup.DisplayElements.Count
: this.dataGrid.View.Records.Count);
}
}
private void DataGrid_QueryRowDragging(object sender, QueryRowDraggingEventArgs e)
{
if (e.Reason == QueryRowDraggingReason.Dragging)
{
var totalHeight = dataGrid.RowColumnIndexToPoint(new RowColumnIndex(this.LastIndex, 0)).Y + this.dataGrid.RowHeight;
if (Math.Ceiling(e.Position.Y + (dataGrid.RowHeight * 0.45))
> totalHeight && e.To == LastIndex)
{
// Will hit if RowDragView move below the last row.
}
}
}