private void OnLayerGrid_DragDrop(object sender, DragEventArgs e) { int layerHandle = 0; // The mouse locations are relative to the screen, so they must be // converted to client coordinates. System.Drawing.Point clientPoint = layerGrid.PointToClient(new System.Drawing.Point(e.X, e.Y)); // Get the row index of the item the mouse is below. _rowIndexOfItemUnderMouseToDrop = layerGrid.HitTest(clientPoint.X, clientPoint.Y).RowIndex; if (_rowIndexOfItemUnderMouseToDrop < 0) { e.Effect = DragDropEffects.None; } else { // If the drag operation was a move then remove and insert the row. if (e.Effect == DragDropEffects.Move) { DataGridViewRow rowToMove = e.Data.GetData(typeof(DataGridViewRow)) as DataGridViewRow; layerGrid.Rows.RemoveAt(_rowIndexFromMouseDown); layerGrid.Rows.Insert(_rowIndexOfItemUnderMouseToDrop, rowToMove); for (int row = 0; row < layerGrid.RowCount; row++) { if (row > 0) { layerHandle = (int)layerGrid[0, row].Tag; var pos = _mapLayersHandler.get_LayerPosition(layerHandle); _mapLayersHandler.MoveLayerBottom(pos); } } _mapLayersHandler.RefreshMap(); } } }