منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
سحب وافلات من داتا جريد فيو الي داتا جريد فيو اخرى - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : سحب وافلات من داتا جريد فيو الي داتا جريد فيو اخرى (/showthread.php?tid=16963)



سحب وافلات من داتا جريد فيو الي داتا جريد فيو اخرى - Codack - 24-08-16

السلام عليكم ورحمة الله وبركاتة


لو سمحتم يا محترفي المنتدى

عايز اعمل خاصية سحب وافلات من داتا جريد فيو الي داتا جريد فيو اخرى

مثلا اسحب صف من الداتا جريد فيو الاولي ثم افلته في الداتا جريد فيو الثانية

وشكرا




RE: سحب وافلات من داتا جريد فيو الي داتا جريد فيو اخرى - أبو عمر - 24-08-16

وعليكم السلام ورحمة الله وبركاته
في الرابط التالي شرح لسحب عمود بأكمله لكن في نفس الاداة
https://msdn.microsoft.com/en-us/library/ms996459.aspx?f=255&MSPPError=-2147217396
ومن اداة الى اداة اخرى في الرابط التالي
http://stackoverflow.com/questions/9286685/drag-data-from-dg-and-other-controls-to-another-dg-in-vb-net
ولسحب صف بأكمله الاجابة في النشاركة الثانية في الرابط التالي
http://stackoverflow.com/questions/15879427/dragdrop-between-2-datagriviews-back-and-forth-duplicating-action
ولسحب خلية واحدة فقط انظر هذا الرابط
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b0599f85-1b29-4b03-8db7-b49d5193c11c/visualbasicnet-datagridview-drag-and-drop-from-one-cell-to-another-example?forum=vbgeneral

بالتوفيق


RE: سحب وافلات من داتا جريد فيو الي داتا جريد فيو اخرى - ابو ليلى - 25-08-16

اخي الكريم اعمل مشروع جديد و اضف له اثنين DataGridView 
اذهب الى الخاصية AllowDrop و اجعلها True 
في بداية النموذج عرف المتعيرات التالية
PHP كود :
   Private dragBoxFromMouseDown As Rectangle
    Private rowIndexFromMouseDown 
As Integer
    Private rowIndexOfItemUnderMouseToDrop 
As Integer 

سنحتاج الى معالجة 4 احداث على التوالي (MouseMove,MouseDown,DragOver,DragDrop) لكل اداة على حدا
لذا ارتايت ان اعمل وظيفة مشتركة وفق بارمترات

الوظيفة الاولى
PHP كود :
   Private Sub MoseMove(sender As ObjectAs MouseEventArgsByVal DataGrid As DataGridView)
 
       If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
            If dragBoxFromMouseDown 
<> Rectangle.Empty AndAlso Not dragBoxFromMouseDown.Contains(e.Xe.YThen

                Dim dropEffect 
As DragDropEffects DataGrid.DoDragDrop(DataGrid.Rows(rowIndexFromMouseDown), DragDropEffects.Move)
 
           End If
 
       End If

 
   End Sub 

الوظيفة الثانية
PHP كود :
   Private Sub MoseDown(sender As ObjectAs MouseEventArgsByVal DataGrid As DataGridView)
 
       rowIndexFromMouseDown DataGrid.HitTest(e.Xe.Y).RowIndex
        If rowIndexFromMouseDown 
<> -1 Then
            Dim dragSize 
As Size SystemInformation.DragSize

            dragBoxFromMouseDown 
= New Rectangle(New Point(e.- (dragSize.Width 2), e.- (dragSize.Height 2)), dragSize)
 
       Else
            dragBoxFromMouseDown 
Rectangle.Empty
 
       End If


 
   End Sub 

الوظيفة الثالثة
PHP كود :
   Private Sub DrageDrop(sender As ObjectAs DragEventArgsByVal DragGrid As DataGridViewDropGrid As DataGridView)

 
       Dim clientPoint As Point DragGrid.PointToClient(New Point(e.Xe.Y))

 
       rowIndexOfItemUnderMouseToDrop DragGrid.HitTest(clientPoint.XclientPoint.Y).RowIndex

        If e
.Effect DragDropEffects.Move Then
            Dim rowToMove 
As DataGridViewRow TryCast(e.Data.GetData(GetType(DataGridViewRow)), DataGridViewRow)
 
           If rowToMove.Index 0 Then
                Return
            End 
If
 
           If rowIndexFromMouseDown rowIndexOfItemUnderMouseToDrop Then
                DropGrid
.Rows.RemoveAt(rowIndexFromMouseDown)
 
               DragGrid.Rows.Insert(rowIndexOfItemUnderMouseToDrop 1rowToMove)
 
           ElseIf rowIndexFromMouseDown rowIndexOfItemUnderMouseToDrop Then
                DropGrid
.Rows.RemoveAt(rowIndexFromMouseDown)
 
               DragGrid.Rows.Insert(rowIndexOfItemUnderMouseToDroprowToMove)

 
           End If
 
       End If

 
   End Sub 

الحدث الرابع و هو مشترك بين الاداتين بدون بارمترات
PHP كود :
   Private Sub DataGridView1_DragOver(sender As ObjectAs DragEventArgsHandles DataGridView1.DragOverDataGridView2.DragOver
        e
.Effect DragDropEffects.Move
    End Sub 

بعد كتابة الوظائف السابقة نذهب الى الحدث الموافق لكل اداة و نمرر البارميتر المناسب

احداث DataGridView1
PHP كود :
   Private Sub DataGridView1_MouseMove(sender As ObjectAs MouseEventArgsHandles DataGridView1.MouseMove
        MoseMove
(DataGridView1eDataGridView1)
 
   End Sub

    Private Sub DataGridView1_MouseDown
(sender As ObjectAs MouseEventArgsHandles DataGridView1.MouseDown
        MoseDown
(DataGridView1eDataGridView1)
 
   End Sub


    Private Sub DataGridView1_DragDrop
(sender As ObjectAs DragEventArgsHandles DataGridView1.DragDrop
        DrageDrop
(DataGridView1eDataGridView1DataGridView2)

 
   End Sub 


احداث DataGridView2
PHP كود :
   Private Sub DataGridView2_MouseMove(sender As ObjectAs MouseEventArgsHandles DataGridView2.MouseMove
        MoseMove
(DataGridView2eDataGridView2)
 
   End Sub

    Private Sub DataGridView2_MouseDown
(sender As ObjectAs MouseEventArgsHandles DataGridView2.MouseDown
        MoseDown
(DataGridView2eDataGridView2)
 
   End Sub

    Private Sub DataGridView2_DragDrop
(sender As ObjectAs DragEventArgsHandles DataGridView2.DragDrop

        DrageDrop
(DataGridView2eDataGridView2DataGridView1)
 
   End Sub 

و عملت هذا الاجراء البسيط لاضافة بعض البيانات الى كلتا الاداتين استدعيه في بداية تحميل النموذج
PHP كود :
   Private Sub AddSomeRows()


 
       Dim col1 As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
 
       Dim col2 As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
 
       Dim col3 As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
 
       Dim col4 As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()

 
       col1.HeaderText "Column1"
 
       col1.Name "Column1"

 
       col2.HeaderText "Column2"
 
       col2.Name "Column2"

 
       col3.HeaderText "Column3"
 
       col3.Name "Column3"

 
       col4.HeaderText "Column4"
 
       col4.Name "Column4"



 
       DataGridView1.Columns.AddRange(New DataGridViewColumn() {col1col2})
 
       DataGridView2.Columns.AddRange(New DataGridViewColumn() {col3col4})

 
       Dim Data(,) As String = New String(21) {{1"Alkateb"}, {2"Abulaeth"}, {3"Alshaki"}}
 
       Dim Data2(,) As String = New String(21) {{1"Suaud"}, {2"AboLayla"}, {3"Alwadi"}}

 
       Dim s As Integer 0
        While s 
Data.Length 3
            Dim row1 
As DataGridViewRow DirectCast(DataGridView1.Rows(0).Clone(), DataGridViewRow)
 
           Dim row2 As DataGridViewRow DirectCast(DataGridView2.Rows(0).Clone(), DataGridViewRow)

 
           row1.Cells(0).Value Data.GetValue(s0)
 
           row1.Cells(1).Value Data.GetValue(s1)
 
           DataGridView1.Rows.Add(row1)
 
           '
            row2.Cells(0).Value = Data2.GetValue(s, 0)
            row2.Cells(1).Value = Data2.GetValue(s, 1)
            DataGridView2.Rows.Add(row2)

            s += 1
        End While

    End Sub 

الان شغل النموذج و جرب نقل البيانات بين الاداتين


RE: سحب وافلات من داتا جريد فيو الي داتا جريد فيو اخرى - Codack - 25-08-16

شكرا جار التجربة

فهل ممكن مشروع بالاكواد دي اذ ما لم تعمل معي؟