sábado, 8 de noviembre de 2014

Control de Evento de un DataGridView en VB

Si te ha pasado que quieres controlar los evento de un Tipo de Columna del DataGridView tales como un Button, CheckBox, ComboBox, etc. aqui tienes una ayuda.
Es una aplicacion que controla eventos personalizados lo unico que se necesita es usarlos aqui les dejo el Codigo de la aplicacion que utiliza estos eventos que menciono para que sepan como usarlos.


este es el Diseño y aqui el Codigo Documentado 

Imports DatagridView_Events
Imports System.IO

Public Class Form1
    'Declaramos Las Variables Necessarias
    Dim dt As New DataTable
    Dim obj As DatagridView_Events.DatagridView_Events
    Dim myExtension As String = String.Empty
    Dim DescExtenxion As String = String.Empty
    Dim Ruta As String = String.Empty
    Sub New()
        'Llamada necesaria para el diseñador.
        InitializeComponent()
        'CREAMOS UNA INSTANCIA PASANDO COMO PARAMETRO EL DATAGRIDVIEW
        obj = New DatagridView_Events.DatagridView_Events(Me.dgvFiles)
        ' Agregue cualquier inicialización después de la llamada a InitializeComponent().
        'Enlazamos los Eventos que utilizaremos en mi caso utilizare los 3 eventos
        'Que nos provee la DLL
        'Cada Vez que se Dispare el Evento el metodo se ejecutara
        'Sintaxis para enlazar Eventos: AddHandler <EVENTO>, AddressOf <METODO>
        'NOTA: Estos eventos son del DatagridView que se paso como Parametro
        'Si se tiene mas de 1 Datagridview Crear otro objeto o 
        'Puede Utilizar el Metodo <Inicialisar_Events> para eliminarr la instancia anterior
        'y agregar una nueva con el DataGridView que se pase como Parametro
        AddHandler obj.Click_Button_Datagridview, AddressOf AbrirArchivo
        AddHandler obj.ComboBox_SelectedValue_DatagridView, AddressOf ObtenerExtencion
        AddHandler obj.CheckBox_CheckedChanged_Datagridview, AddressOf VisualizarRuta
        AddHandler obj.Link_Click_DatagridView, AddressOf Abrir_Archivo
        AddHandler obj.ComboBox_SelectedIndex_DatagridView, AddressOf SelectedINdex
        AddHandler obj.Click_Image_DatagridView, AddressOf EstablecerImagen
        AddHandler obj.TextBox_KeyPress_DataGridView, AddressOf KeyPressTextbox
    End Sub
    'metodo que controlara el evento KeyPress del DatagridViewTextBox
    Sub KeyPressTextbox(ByVal sender As Object, ByVal e As KeyPressEventArgs)

        If e.KeyChar = Chr(13) Then
            'Confirmamos los cambios al presionar enter
            dgvFiles.EndEdit()

        End If
    End Sub
    'metodo que controlara el evento click del Image_DatagridView
    Sub EstablecerImagen(ByVal sender As Object)
        'Establecemos el Filtro para las imagenes
        Dim cel As DataGridViewImageCell = TryCast(sender, DataGridViewImageCell)
        Dim openFileDialog1 As New OpenFileDialog()
        openFileDialog1.InitialDirectory = "c:\"
        openFileDialog1.Filter = "(Image files)|" & "*.jpg;*.png;*.bmp" '& "|All files (*.*)|*.*"
        openFileDialog1.FilterIndex = 2
        openFileDialog1.RestoreDirectory = True

        If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            Try
                If String.IsNullOrEmpty(openFileDialog1.FileName) = False Then
                    'Si el archivo seleccionado es valido lo asignamos al valor de la celda
                    cel.Value = Image.FromFile(openFileDialog1.FileName)

                End If
            Catch Ex As Exception
                MessageBox.Show("Cannot read file from disk. Original error: " & Ex.Message)
            Finally
            End Try
        End If
    End Sub
    'Metodo que Control el eventoCheckedChanged del CheckBox
    'Se visualiza la ruta en el LinK si el valor del CheckBox es true de lo contrario no
    Sub VisualizarRuta(ByVal celda As DataGridViewCheckBoxCell, ByVal column As DataGridViewCheckBoxColumn, Optional ByRef r As String = "")
        If celda.Value = True Then
            If String.IsNullOrEmpty(Ruta) Then
                MsgBox("No Se ah Seleccionado el Archivo", MsgBoxStyle.Information, "Ruta...")
                Exit Sub
            End If
            dgvFiles.Rows(celda.RowIndex).Cells(0).Value = Ruta

        ElseIf celda.Value = False Then
            dgvFiles.Rows(celda.RowIndex).Cells(0).Value = "*******************"
        End If

    End Sub
    'Este metodo Controla el Evento SelectedIndex del Combo
    'Pero como no lo necesito lo dejo en blanco a manera de ejemplo 
    'ustedes podrian agragar codigo si lo consideran necesario
    Sub SelectedINdex(ByVal sender As Object, ByVal e As EventArgs)


    End Sub
    'metodo que controla el SelectedValue del ComboBox 
    Sub ObtenerExtencion(ByVal sender As Object, ByVal e As EventArgs)
        Dim comb = TryCast(sender, DataGridViewComboBoxEditingControl)

        DescExtenxion = comb.Text
        myExtension = comb.SelectedValue
    End Sub
    'metodo que controla el evento Click del Button_DataGridView
    Sub AbrirArchivo(ByVal cell As DataGridViewButtonCell, ByVal col As DataGridViewButtonColumn)
        'Establecemos el filtro segun el tipo de archivo que se seleccione en el ComboBox
        Dim openFileDialog1 As New OpenFileDialog()
        openFileDialog1.InitialDirectory = "c:\"
        openFileDialog1.Filter = DescExtenxion & " files (*" & myExtension & ")|*" & myExtension '& "|All files (*.*)|*.*"
        openFileDialog1.FilterIndex = 2
        openFileDialog1.RestoreDirectory = True
        If String.IsNullOrEmpty(myExtension) Or String.IsNullOrEmpty(DescExtenxion) Then
            MsgBox("Seleccione el Tipo de Archivo en El Combo...")
            Exit Sub
        End If
        If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            Try
                If String.IsNullOrEmpty(openFileDialog1.FileName) = False Then
                    Ruta = openFileDialog1.FileName 'Guardamos la ruta del archivo
                End If
            Catch Ex As Exception
                MessageBox.Show("Cannot read file from disk. Original error: " & Ex.Message)
            Finally
            End Try
        End If
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Armamos el DataTable Con los tipos de Archivos que estaran disponibles
        dt.Columns.Add("Codigo")
        dt.Columns.Add("Valor")
        Dim dr As DataRow = dt.NewRow
        dr("Codigo") = ".txt" 'Extension del archivo
        dr("Valor") = "Archivo TXT" 'Descripcion del archivo
        dt.Rows.Add(dr)
        dr = dt.NewRow
        dr("Codigo") = ".xlsx"
        dr("Valor") = "Archivo Excel"
        dt.Rows.Add(dr) 'Agregamos al DataTable
        Dim comboCol = TryCast(Me.dgvFiles.Columns(3), DataGridViewComboBoxColumn)
        'Asignamos el DataTable a la Columna del ComboBox
        If TypeOf comboCol Is DataGridViewComboBoxColumn Then
            comboCol.DataSource = dt
            comboCol.ValueMember = "Codigo"
            comboCol.DisplayMember = "Valor"
        End If

    End Sub
    Private Sub btnRemover_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemover.Click
        'Remueve lso Eventos que se esten utilizando por el Objeto
        'Los eventos del Checked, ComboBox, Button del DatagridView no estaran disponibles
        'para volver a usarlos tendra que utilizar el metodo <Inicialisar_Events(<DATAGRIDVIEW>)
        obj.Finalizar_Events()
    End Sub

    Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click
        'para volver a usarlos tendra que utilizar el metodo <Inicialisar_Events(<DATAGRIDVIEW>)
        obj.Inicialisar_Events(Me.dgvFiles)
    End Sub
    Private Sub dgvFiles_RowEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvFiles.RowEnter
        'Limpiamos los valores al pasar a otra fila
        DescExtenxion = String.Empty
        myExtension = String.Empty
        Ruta = String.Empty
    End Sub
    'metodo que controla el evento Link_Click_DatagridView del lINK 
    Sub Abrir_Archivo(ByVal Sender As Object)
        'Obtenemos el valor y abrimos el archivo
        Dim cel As DataGridViewLinkCell = TryCast(Sender, DataGridViewLinkCell)
        Process.Start(cel.Value.ToString)
    End Sub


End Class


Aqui el Proyecto entero fue realizado en VS2012 no lo explico por partes por que ya ise un Post sobre esto asi que si aun no lo haz Visto te recomiendo que te des una vuelta por Este Post. 
Claro que el que este post esta mas actualizado con mas evento pero el uso es el mismo.
Cualquier duda escribanme a mi correo o dejen sus comentarios.

No hay comentarios:

Publicar un comentario