Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1411
  • 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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

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