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.
Código:
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.