domingo, 19 de octubre de 2014

Copiar contenido de la papelera en celdas del Datagridview


Hola programadores, al igual como habia hecho hace algun tiempo el  Copiar Contenido de Datagridview al portapapeles ---->
http://jossm03.blogspot.com/2012/06/copiar-contenido-datagridview-al.html Ahora hago todo lo contrario es decir  copiar de celdas ya sean de Access o Excel y pegarlas en  la Datagridview.

Ademas al ejemplo le incluyo algunas funciones o trucos básicos del DatagridView para contar filas,numerar filas fijas, menú popup(menu con clik derecho), etc.

Mi captura en modo diseño



Imports System.Text.RegularExpressions

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '  migrid.Rows.Add(numfilas.Value)
        Try
            migrid.Rows.Add(200)   ' agrego 200 filas
        Catch ex As Exception
            MsgBox(ex.ToString())     ' controlo excepciones
        End Try
    End Sub
    Public Sub pegar()
        Try
            Dim o As DataObject = DirectCast(Clipboard.GetDataObject(), DataObject)
            If o.GetDataPresent(DataFormats.Text) Then
                Dim rowOfInterest As Integer = migrid.CurrentCell.RowIndex()
                Dim selectedRows As String() = Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd(vbCr & vbLf.ToCharArray()), vbCr & vbLf)
                If selectedRows Is Nothing OrElse selectedRows.Length = 0 Then
                    Return
                End If
                For Each row As String In selectedRows
                    If rowOfInterest >= migrid.Rows.Count Then
                        Exit For
                    End If
                    Try
                        Dim data As String() = Regex.Split(row, vbTab)
                        Dim col As Integer = migrid.CurrentCell.ColumnIndex
                        For Each ob As String In data
                            If col >= migrid.Columns.Count Then
                                Exit For
                            End If
                            If ob IsNot Nothing Then
                                migrid(col, rowOfInterest).Value = Convert.ChangeType(ob, migrid(col, rowOfInterest).ValueType)
                            End If
                            col += 1
                        Next
                    Catch enterException As Exception
                    End Try
                    rowOfInterest += 1
                Next
            End If
        Catch ex As Exception
            MsgBox("Error al pegar datos. No hay suficientes celdas", vbCritical, "Error")
        End Try
    End Sub
    Private Sub PegarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PegarToolStripMenuItem.Click
        pegar()
    End Sub
    Public Function contar_registros(ByRef grid As DataGridView) As String
        Dim i As String = grid.Rows.Count
        Return "Número de filas=  " & i
    End Function
    Public Sub EliminarRows(ByRef grid As DataGridView)
        Try
            grid.Rows.RemoveAt(grid.CurrentRow.Index)
        Catch ex As Exception
        End Try
    End Sub
    Private Sub migrid_RowsAdded(sender As Object, e As DataGridViewRowsAddedEventArgs) Handles migrid.RowsAdded
        lblnum.Text = (contar_registros(migrid))
        Num_filas_Fijas(migrid)
    End Sub
    Private Sub migrid_RowsRemoved(sender As Object, e As DataGridViewRowsRemovedEventArgs) Handles migrid.RowsRemoved
        lblnum.Text = (contar_registros(migrid))

    End Sub
    Private Sub EliminarFilasToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EliminarFilasToolStripMenuItem.Click
        EliminarRows(migrid)
    End Sub
    Public Sub Num_filas_Fijas(ByRef grid As DataGridView)
        For i As Integer = 0 To grid.Rows.Count - 1
            grid.Rows(i).HeaderCell.Value = (i + 1).ToString
        Next i
    End Sub
End Class










Espero que les sea de utilidad, nos vemos en otro nuevo post.!

Mi proyecto:

https://mega.co.nz/#!0M12CbDK!5ePRw7XEUbBYj9qhOJ8Ic-ZzURzG3yHCR-ri-JnS89w