private int GetRowIndexOfItemUnderMouseToDrop(DragEventArgs e) { // The mouse locations are relative to the screen, so they must be // converted to client coordinates. Point clientPoint = DataGridViewMapas.PointToClient(new Point(e.X, e.Y)); // Get the row index of the item the mouse is below. return(DataGridViewMapas.HitTest(clientPoint.X, clientPoint.Y).RowIndex); }
//private int rowIndexOfItemUnderMouseToDrop; private void DataGridViewMapas_MouseMove(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { // If the mouse moves outside the rectangle, start the drag. if (dragBoxFromMouseDown != Rectangle.Empty && !dragBoxFromMouseDown.Contains(e.X, e.Y)) { // Proceed with the drag and drop, passing in the list item. DragDropEffects dropEffect = DataGridViewMapas.DoDragDrop( DataGridViewMapas.Rows[rowIndexFromMouseDown], DragDropEffects.Move); _ddSource = DragDropSource.Mapas; } } }
private void DataGridViewMapas_MouseDown(object sender, MouseEventArgs e) { // Get the index of the item the mouse is below. rowIndexFromMouseDown = DataGridViewMapas.HitTest(e.X, e.Y).RowIndex; if (rowIndexFromMouseDown != -1) { // Remember the point where the mouse down occurred. // The DragSize indicates the size that the mouse can move // before a drag event should be started. Size dragSize = SystemInformation.DragSize; // Create a rectangle using the DragSize, with the mouse position being // at the center of the rectangle. dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2), e.Y - (dragSize.Height / 2)), dragSize); } else { // Reset the rectangle if the mouse is not over an item in the ListBox. dragBoxFromMouseDown = Rectangle.Empty; } }
private void DataGridViewMapas_DragDrop(object sender, DragEventArgs e) { int rowIndexOfItemUnderMouseToDrop = GetRowIndexOfItemUnderMouseToDrop(e); // If the drag operation was a move then remove and insert the row. // if (e.Effect == DragDropEffects.Move) { if (_ddSource == DragDropSource.Mapas) { DataGridViewRow rowToMove = e.Data.GetData( typeof(DataGridViewRow)) as DataGridViewRow; if (rowToMove.Index == rowIndexOfItemUnderMouseToDrop) { return; } _mapas[rowToMove.Index].Updated = true; if (rowToMove.Index > rowIndexOfItemUnderMouseToDrop) { // Moving UP _mapas[rowToMove.Index].Corredor = _mapas[rowIndexOfItemUnderMouseToDrop].Corredor; for (int r = rowIndexOfItemUnderMouseToDrop; r < rowToMove.Index; r++) { _mapas[r].Corredor = _mapas[r].Corredor + 1; _mapas[r].Updated = true; } } else { // Moving DOWN _mapas[rowToMove.Index].Corredor = _mapas[rowIndexOfItemUnderMouseToDrop].Corredor - 1; for (int r = rowToMove.Index + 1; r < rowIndexOfItemUnderMouseToDrop; r++) { _mapas[r].Corredor = _mapas[r].Corredor - 1; _mapas[r].Updated = true; } } var SortedList = _mapas.OriginalList.OrderBy(o => o.Corredor); _mapas = new SortableBindingList <clsMapa>(); foreach (clsMapa mapa in SortedList) { _mapas.Add(mapa); } _sourceMapas.DataSource = _mapas; bindingSourceMapas.DataSource = _sourceMapas; LojaBindingNavigatorSaveItem.Enabled = _mapas.Any(m => m.Updated); } else { if (e.Data.GetDataPresent(typeof(ListView.SelectedListViewItemCollection))) { foreach (ListViewItem current in (ListView.SelectedListViewItemCollection)e.Data.GetData(typeof(ListView.SelectedListViewItemCollection))) { if (_ddSource == DragDropSource.ProdutosNoCorredor) { if (bindingSourceMapas.Position == rowIndexOfItemUnderMouseToDrop) { return; } _mapas[bindingSourceMapas.Position].ProdutoRemove(current); } _mapas[rowIndexOfItemUnderMouseToDrop].ProdutoAdd(current); current.Remove(); } DataGridViewMapas.Refresh(); LojaBindingNavigatorSaveItem.Enabled = true; } } }