Solved

VB.net DataGridView drag multiple items

Posted on 2013-01-25
6
1,230 Views
Last Modified: 2013-01-27
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
Comment
Question by:murbro
  • 3
  • 3
6 Comments
 
LVL 83

Accepted Solution

by:
CodeCruiser earned 500 total points
Comment Utility
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
 

Author Closing Comment

by:murbro
Comment Utility
Thanks very much
0
 

Author Comment

by:murbro
Comment Utility
Hi. I got an error

1
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 83

Expert Comment

by:CodeCruiser
Comment Utility
Change the type of rows to

DatagridviewSelectedRowsCollection in both methods.
0
 

Author Comment

by:murbro
Comment Utility
Great! That did the trick. Thanks very much
0
 
LVL 83

Expert Comment

by:CodeCruiser
Comment Utility
Glad its working :-)
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Article by: Kraeven
Introduction Remote Share is a simple remote sharing tool, enabling you to see, add and remove remote or local shares. The application is written in VB.NET targeting the .NET framework 2.0. The source code and the compiled programs have been in…
Creating an analog clock UserControl seems fairly straight forward.  It is, after all, essentially just a circle with several lines in it!  Two common approaches for rendering an analog clock typically involve either manually calculating points with…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now