?
Solved

VB.net DataGridView drag multiple items

Posted on 2013-01-25
6
Medium Priority
?
1,385 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:Murray Brown
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 83

Accepted Solution

by:
CodeCruiser earned 2000 total points
ID: 38818285
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:Murray Brown
ID: 38818539
Thanks very much
0
 

Author Comment

by:Murray Brown
ID: 38818569
Hi. I got an error

1
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 83

Expert Comment

by:CodeCruiser
ID: 38818883
Change the type of rows to

DatagridviewSelectedRowsCollection in both methods.
0
 

Author Comment

by:Murray Brown
ID: 38821475
Great! That did the trick. Thanks very much
0
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 38824263
Glad its working :-)
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

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…
Introduction When many people think of the WebBrowser (http://msdn.microsoft.com/en-us/library/2te2y1x6%28v=VS.85%29.aspx) control, they immediately think of a control which allows the viewing and navigation of web pages. While this is true, it's a…
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastr…
Suggested Courses

718 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