04-12-15, 04:29 AM
كود رائع جدا ،،، لكن واجهتني بعض المشاكل منها اذا قمت برمي السطر خارج القريد الفيو فان السهم الاصفر لا يختفي ،، ثانيا مع ظهور الحقل الاضافي الااخير في حالة تفعيل امكانية الاضافة في القريد فيو فانها تظهر اخطأ ، ايضا مؤشر السهم لا يتناسب مع حركت الفأره فانه يشير الى صف غير صحيح ،، على العموم قمت بالبحث بالانترنت ،، ووجدت هذه الاكواد و عدلتها لكي يمكن اضافتها بمودل :
PHP كود :
#Region "GridView DragDrop"
Private fromIndex As Integer
Private dragIndex As Integer
Private dragRect As Rectangle
Public Sub Dragable(ByVal DGV As DataGridView)
DGV.AllowDrop = True
AddHandler DGV.DragOver, AddressOf DGVDragOver
AddHandler DGV.MouseDown, AddressOf DGVMouseDown
AddHandler DGV.DragDrop, AddressOf DGVDragDrop
AddHandler DGV.MouseMove, AddressOf DGVMouseMove
End Sub
Private Sub DGVDragDrop(ByVal sender As Object, ByVal e As DragEventArgs)
Dim p As Point = sender.PointToClient(New Point(e.X, e.Y))
dragIndex = sender.HitTest(p.X, p.Y).RowIndex
If (e.Effect = DragDropEffects.Move) Then
Dim dragRow As DataGridViewRow = e.Data.GetData(GetType(DataGridViewRow))
Dim DGVLastRowIndex As Integer = sender.rows.count - 1
Try
If dragIndex <> -1 AndAlso Not dragIndex = DGVLastRowIndex AndAlso Not dragRow.Index = DGVLastRowIndex AndAlso Not dragRow.Index = dragIndex Then
sender.Rows.RemoveAt(fromIndex)
sender.Rows.Insert(dragIndex, dragRow)
sender.Rows(dragIndex).Selected = True
sender.CurrentCell = sender.Rows(dragIndex).Cells(0)
End If
Catch ex As Exception
End Try
End If
End Sub
Private Sub DGVDragOver(ByVal sender As Object, ByVal e As DragEventArgs)
e.Effect = DragDropEffects.Move
End Sub
Private Sub DGVMouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
fromIndex = sender.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 DGVMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
If (dragRect <> Rectangle.Empty AndAlso Not dragRect.Contains(e.X, e.Y)) Then
sender.DoDragDrop(sender.Rows(fromIndex), DragDropEffects.Move)
End If
End If
End Sub
#End Region
