• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1544
  • Last Modified:

VB.net DataGridView drag multiple items

Hi. I use the following code to drag a single item from DataGridView1 to DataGridView2.
How do I update the code so that multiple items can be dragged


    Private Sub DataGridView1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
        Try

            Dim info As DataGridView.HitTestInfo = Me.DataGridView1.HitTest(e.X, e.Y)
            Dim row As DataGridViewRow = Me.DataGridView1.Rows(info.RowIndex)

            Me.DataGridView1.DoDragDrop(row, DragDropEffects.Copy)

        Catch ex As Exception
            'MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub DataGridView2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView2.DragEnter
        Try
            e.Effect = DragDropEffects.All

        Catch
        End Try
    End Sub

    Private Sub DataGridView2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView2.DragDrop


        Try

            Dim row As DataGridViewRow = TryCast(e.Data.GetData(GetType(DataGridViewRow)), DataGridViewRow)
            'This is where the row from the ist DGV is effectively copied and added to the second DGV
            If row IsNot Nothing Then

                Dim newRow As New DataGridViewRow()
                Dim oAmount As Decimal
                Dim oDue As Decimal

                newRow.CreateCells(Me.DataGridView1)
                '------------------------------------------------------------------
                'First get first three columns from DataGridView1

                newRow.Cells(0).Value = row.Cells(0).Value
                newRow.Cells(1).Value = row.Cells(1).Value
                newRow.Cells(2).Value = row.Cells(2).Value

                newRow.Cells(3).Value = Me.DateTimePicker_PaySelected.Value.Date.ToString("dd MMMM yyyy")
                'Now gather the Amount and Pad cell values in top DGV
                If IsNumeric(row.Cells(3).Value) = False Then
                    oAmount = 0
                Else
                    oAmount = row.Cells(3).Value
                End If
                If IsNumeric(row.Cells(4).Value) = False Then
                    oDue = 0
                Else
                    oDue = row.Cells(4).Value
                End If
                If oDue = 0 Then
                    MsgBox("This has been paid!")
                    Exit Sub
                End If

                newRow.Cells(4).Value = oDue

                newRow.Cells(5).Value = Me.ComboBox_PaymentSelected.Text

                'Me.DataGridView2.Columns(0).DefaultCellStyle.ForeColor = Color.Azure

                'next customize the
                Dim oSupplier As String = row.Cells(1).Value
                Dim oReference As String = row.Cells(2).Value

                If Me.DataGridView1.Rows(row.Index).DefaultCellStyle.ForeColor <> Color.OrangeRed _
                    Or Check_If_Supplier_And_Reference_in_DGV2(oSupplier, oReference) = False Then

                    Me.DataGridView2.Rows.Add(newRow) '
                Else
                    MsgBox("The invoice is already there!")

                    'Don't add the row if it is already owolintshi
                End If

            End If
            '***Color line orange -on the drop
            Me.DataGridView1.Rows(row.Index).DefaultCellStyle.ForeColor = Color.OrangeRed
            Me.DataGridView1.ClearSelection()
        Catch
            MsgBox(Err.Description)
        End Try

        Exit Sub
0
Murray Brown
Asked:
Murray Brown
  • 3
  • 3
1 Solution
 
CodeCruiserCommented:
You can change your mousedown to following

 Private Sub DataGridView1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
        Try

            Dim info As DataGridView.HitTestInfo = Me.DataGridView1.HitTest(e.X, e.Y)
            Dim rows As DataGridViewRow() = Me.DataGridView1.SelectedRows

            Me.DataGridView1.DoDragDrop(rows, DragDropEffects.Copy)

        Catch ex As Exception
            'MsgBox(ex.Message)
        End Try
    End Sub

Open in new window




And change your dragdrop to

    Private Sub DataGridView2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView2.DragDrop


        Try

            Dim rows As DataGridViewRow() = TryCast(e.Data.GetData(GetType(DataGridViewRow)), DataGridViewRow)
        

Open in new window



  You will need to wrap code from there after into a for loop so that each row is added
0
 
Murray BrownMicrosoft Cloud Azure/Excel Solution DeveloperAuthor Commented:
Thanks very much
0
 
Murray BrownMicrosoft Cloud Azure/Excel Solution DeveloperAuthor Commented:
Hi. I got an error

1
0
Cloud Class® Course: CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

 
CodeCruiserCommented:
Change the type of rows to

DatagridviewSelectedRowsCollection in both methods.
0
 
Murray BrownMicrosoft Cloud Azure/Excel Solution DeveloperAuthor Commented:
Great! That did the trick. Thanks very much
0
 
CodeCruiserCommented:
Glad its working :-)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now