Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Yaldabaot

#201
Por cierto, si puedo postear este código en la sección de VB?. Disculpen si lo puse en otro lugar, otra duda :P.
#202
Buenas tardes a todos los que me leen,

Soy nuevo en el foro, espero aportarles pronto, deseo aprender mucho de ustedes y posteriormente darles conocimientos a los que no sepan. Bueno a lo que vine, tengo un problema muy particular con un DataGridView.

Básicamente el funcionamiento de mi método es importar los valores de una hoja de excel a un DataGridView, por lo que he visto (corrijanme si estoy equivocado) el DatagridView agarra el primer valor de las celdas que obtuvo y por ende interpreta el tipo de dato que obtuvo, es decir si en mi excel la celda A1 = "NUMERO ENTERO", al parecer para el GridView todos los datos de esa columna son enteros. He ahí donde empieza el problema, la columna código de mi hoja de excel es un híbrido dónde habrán datos enteros o texto.

Entonces el DatagridView comienza a ponerme en blanco las columnas que no son el primer dato obtenido. Por ejemplo si el primer dato que obtuvo la hoja es un entero las celdas de excel que no son enteros son puestos en blanco. El problema es específicamente en la columna llamada "Código_Articulo", todo lo demás funciona a la perfección.


Sub Cargar(ByVal dgView As DataGridView, ByVal SLibro As String)

        'HDR=YES : Con encabezado

        Try

        Dim xlApp As New Excel.Application 'Aplicación de excel
        Dim xlWorkBook As Excel.Workbook ' Libro de excel
        Dim xlWorkSheet As Excel.Worksheet ' Hojas
        Dim name As String

        Dim r As Integer = 0
        Dim cs As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                           "Data Source=" & SLibro & ";" & _
                           "Extended Properties=""Excel 8.0;HDR=YES"""

        xlWorkBook = xlApp.Workbooks.Open(SLibro)


        Dim ws As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1),     Excel.Worksheet)

        ' Obtenemos el nombre de la hoja.
     

        name = ws.Name
        ws = Nothing

        'Agarra el nombre de la primera hoja

        xlWorkSheet = xlWorkBook.Sheets(name)

        ' se conecta con la hoja sheet 1 
        Dim dAdapter As New OleDbDataAdapter("Select Codigo_Articulo,Descripcion,Cantidad,Precio_de_compra,Total_linea  From [" & name & "$]", cs)
        Dim datos As New DataSet
        'Dim talas As DataTable

        ' agrega los datos 
        dAdapter.Fill(datos)

        With GridCarga
            ' llena el DataGridView 
            '.AutoGenerateColumns = False
            '.AutoGenerateColumns = False
            .DataSource = datos.Tables(0)


            ' DefaultCellStyle: formato currency   
            'para los encabezados 1,2 y 3 del DataGrid 

            '.Columns("Codigo_Articulo").DefaultCellStyle.GetType()
            '.Columns("Descripcion").DefaultCellStyle.Format = "Descripcion"
            '.Columns("Cantidad").DefaultCellStyle.Format = "Cantidad"
            '.Columns("Precio_de_Compra").DefaultCellStyle.Format = "Precio_de_compra"
            '.Columns("Total_Linea").DefaultCellStyle.Format = "Total_linea"


            xlApp.Workbooks.Close()
            xlApp.Quit()
            KillAllExcels()


        End With

        'Muestra la cantidad de filas.
        If GridCarga.Rows.Count > 0 Then
            For r = 0 To GridCarga.Rows.Count - 1
                Me.GridCarga.Rows(r).HeaderCell.Value = (r + 1).ToString()

            Next

        End If

     
         Catch
        MsgBox("El formato de la plantilla cargada no ha sido el correcto, por favor verificarlo.")
         GridCarga.DataSource = Nothing
        NombreA.Text = ""
         End Try

    End Sub



Pude solucionar el problema desde el excel usando la función "Texto" para convertirlos y todos; y posteriormente insertarlo a mi base de datos, mi pregunta es ¿Hay alguna forma de castear los valores?, o

Les adjunto mi código, se que no es muy escueto(espero mejorarlo con el tiempo), desde ya por lo menos gracias de antemano al leerme. ;)