Перетаскивание строк в datagridview
Это код, который я нашел, но он, кажется, дает мне ошибку, когда я перетаскиваю на новую область ячейки:
Что я уже пробовал:
Private fromIndex As Integer Private dragIndex As Integer Private dragRect As Rectangle Private Sub DataGridView1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles DataGridView1.DragDrop Dim p As Point = DataGridView1.PointToClient(New Point(e.X, e.Y)) dragIndex = DataGridView1.HitTest(p.X, p.Y).RowIndex If (e.Effect = DragDropEffects.Move) Then Dim dragRow As DataGridViewRow = CType(e.Data.GetData(GetType(DataGridViewRow)), DataGridViewRow) If dragIndex < 0 Then dragIndex = DataGridView1.RowCount - 1 'If dragIndex < DataGridView1.RowCount Then dragIndex = DataGridView1.RowCount - 1 DataGridView1.Rows.RemoveAt(fromIndex) DataGridView1.Rows.Insert(dragIndex, dragRow) End If End Sub Private Sub DataGridView1_DragOver(ByVal sender As Object, ByVal e As DragEventArgs) _ Handles DataGridView1.DragOver e.Effect = DragDropEffects.Move End Sub Private Sub DataGridView1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) _ Handles DataGridView1.MouseDown fromIndex = DataGridView1.HitTest(e.X, e.Y).RowIndex If fromIndex > -1 Then Dim dragSize As Size = SystemInformation.DragSize dragRect = New Rectangle(New Point(e.X - (dragSize.Width / 2), e.Y - (dragSize.Height / 2)), dragSize) Else dragRect = Rectangle.Empty End If End Sub Private Sub DataGridView1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) _ Handles DataGridView1.MouseMove If (e.Button And MouseButtons.Left) = MouseButtons.Left Then If (dragRect <> Rectangle.Empty _ AndAlso Not dragRect.Contains(e.X, e.Y)) Then DataGridView1.DoDragDrop(DataGridView1.Rows(fromIndex), DragDropEffects.Move) End If End If End Sub