تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[كود] عمل DragDrop Row in DGV
#1
اضف مودل جديد وضع به
PHP كود :
Private fromIndex As Integer
    Private dragIndex 
As Integer
    Private dragRect 
As Rectangle
    Dim Arrow 
As Label Nothing
    Dim frm 
As Object
    Public Sub Dragable
(ByVal DGV As DataGridView)
 
       frm DGV.Parent
        DGV
.AllowDrop True
        AddHandler DGV
.DragOverAddressOf DragOver
        AddHandler DGV
.MouseDownAddressOf MouseDown
        AddHandler DGV
.DragDropAddressOf DragDrop
        AddHandler DGV
.MouseMoveAddressOf MouseMove
        AddHandler DGV
.MouseUpAddressOf MouseUp
    End Sub
    Private Sub DragDrop
(sender As ObjectAs DragEventArgs)
 
       Dim p As Point sender.PointToClient(New Point(e.Xe.Y))
 
       dragIndex sender.HitTest(p.Xp.Y).RowIndex
        If 
(e.Effect DragDropEffects.MoveThen
            Dim dragRow 
As DataGridViewRow e.Data.GetData(GetType(DataGridViewRow))
 
           sender.Rows.RemoveAt(fromIndex)
 
           Try
                sender
.Rows.Insert(dragIndexdragRow)
 
               sender.ClearSelection()
 
               sender.Rows(dragIndex).Selected True
            Catch ex 
As Exception
                sender
.Rows.Insert(fromIndexdragRow)
 
           End Try
 
           Arrow.Dispose()
 
       End If
 
   End Sub

    Private Sub DragOver
(sender As ObjectAs DragEventArgs)
 
       e.Effect DragDropEffects.Move
        If Not IsNothing
(ArrowThen
            Dim x 
As Integer sender.HitTest(sender.findform.PointToClient(New Point(e.Xe.Y)).Xsender.findform.PointToClient(New Point(e.Xe.Y)).Y).RowIndex
            If x 
= -1 Then Arrow.Visible False Else Arrow.Visible True
            Dim iii 
As Integer sender.Top sender.ColumnHeadersHeight
            Dim num 
As Double 0
            For i 
0 To x
                If i 
x Then
                    num 
sender.rows(i).height Arrow.Height

                Else
                    iii 
iii sender.Rows(i).Height
                End 
If

 
           Next
            Arrow
.Top iii num
        End 
If
 
   End Sub

    Private Sub MouseDown
(sender As ObjectAs MouseEventArgs)
 
       fromIndex sender.HitTest(e.Xe.Y).RowIndex

        If fromIndex 
> -1 Then
            Dim dragSize 
As Size SystemInformation.DragSize
            dragRect 
= New Rectangle(New Point(e.- (dragSize.Width 2), _
            e
.- (dragSize.Height 2)), _
            dragSize
)
 
           DrowArrow(sender)
 
       Else
            dragRect 
Rectangle.Empty
 
       End If
 
   End Sub
    Private Sub MouseUp
(sender As ObjectAs MouseEventArgs)
 
       Arrow.Dispose()
 
   End Sub
    Private Sub MouseMove
(sender As ObjectAs MouseEventArgs)
 
       If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
            If 
(dragRect <> Rectangle.Empty _
            AndAlso Not dragRect
.Contains(e.Xe.Y)) Then
                sender
.DoDragDrop(sender.Rows(fromIndex), _
                DragDropEffects
.Move)
 
           End If
 
       End If
 
   End Sub
    Private Sub DrowArrow
(sender As DataGridView)
 
       Dim lb As New Label
        lb
.Font = New Font("Arial"15)
 
       lb.Text "◄"
 
       lb.BackColor Color.Yellow
        lb
.ForeColor Color.Red
        lb
.AutoSize True
        lb
.BringToFront()
 
       Arrow lb
        If Not IsNothing
(frmThen sender.controls.add(Arrow)
 
       Arrow.Left sender.left sender.width Arrow.Width
    End Sub 

  وفي الفورم ضع الكود
PHP كود :
Dragable(DataGridView1
الرد }}}}
تم الشكر بواسطة: khodor1985 , myalsailamy , myalsailamy , sniperjawadino
#2
كود رائع جدا  ،،، لكن واجهتني بعض المشاكل منها اذا قمت برمي السطر خارج القريد الفيو فان السهم الاصفر لا يختفي ،، ثانيا مع ظهور الحقل الاضافي الااخير في حالة تفعيل امكانية الاضافة في القريد فيو فانها تظهر اخطأ  ،  ايضا مؤشر السهم لا يتناسب مع حركت الفأره  فانه يشير الى صف غير صحيح   ،،  على العموم قمت بالبحث بالانترنت  ،،  ووجدت هذه الاكواد  و عدلتها لكي يمكن  اضافتها بمودل :


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
.DragOverAddressOf DGVDragOver
        AddHandler DGV
.MouseDownAddressOf DGVMouseDown
        AddHandler DGV
.DragDropAddressOf DGVDragDrop
        AddHandler DGV
.MouseMoveAddressOf DGVMouseMove
    End Sub

    
Private Sub DGVDragDrop(ByVal sender As ObjectByVal e As DragEventArgs)
        Dim p As Point sender.PointToClient(New Point(e.Xe.Y))
        dragIndex sender.HitTest(p.Xp.Y).RowIndex
        
If (e.Effect DragDropEffects.MoveThen
            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(dragIndexdragRow)
                    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 ObjectByVal e As DragEventArgs)
        e.Effect DragDropEffects.Move
    End Sub

    
Private Sub DGVMouseDown(ByVal sender As ObjectByVal e As MouseEventArgs)
        fromIndex sender.HitTest(e.Xe.Y).RowIndex
        
If fromIndex > -1 Then
            Dim dragSize 
As Size SystemInformation.DragSize
            dragRect 
= New Rectangle(New Point(e.- (dragSize.Width 2), _
                                               e
.- (dragSize.Height 2)), _
                                     dragSize
)
        Else
            dragRect Rectangle.Empty
        End If
    End Sub

    
Private Sub DGVMouseMove(ByVal sender As ObjectByVal e As MouseEventArgs)
        If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
            
If (dragRect <> Rectangle.Empty AndAlso Not dragRect.Contains(e.Xe.Y)) Then
                sender
.DoDragDrop(sender.Rows(fromIndex), DragDropEffects.Move)
            End If
        End If
    End Sub

#End Region 
الرد }}}}
تم الشكر بواسطة: HASAN6.0


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم