Buenas tardes, los últimos dos días he estado peleando con un código en VB .net 2010. Hice un programa para mandar el resultado de una consulta SQL a un datagridview usando un botón y que, pulsando otro botón la información del datagridview pasará al excel. Logré el primer cometido y luego de buscar código en internet también exporta a excel, solo que exporta una hoja de cálculo vacía.
Aquí el código:
Esta parte está en un módulo.
'Mostrar datagrid (dgv1)
Public Sub Grid(ByVal dgv1, ByVal a, ByVal b)
Dim ds As New DataSet
Dim dt As New DataTable
Dim ins As String = "SELECT CUADRANTE, COUNT(NROTRANSAC) AS NROPEDIDOS FROM DELIVERYCAB WHERE HPEDIDO BETWEEN '" + a + "' AND '" & b + "' AND ESTADO='PEDIDO ENTREGADO' GROUP BY CUADRANTE"
Dim adp As New SqlDataAdapter(ins, cn)
Try
ds.Tables.Add("DELIVERYCAB")
adp.Fill(ds.Tables("DELIVERYCAB"))
dgv1.DataSource = ds.Tables("DELIVERYCAB")
cn.Close()
Catch ex As Exception
MsgBox("Error:" + ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Y esto en un formulario
Public Class PedidosxCuad
Dim f3, f4 As String
Dim dgv As DataGridView = New DataGridView //Aquí creo que está el problema
'Codigo del boton mostrar DataGridView Grid en PedidosxCuad.vb
Private Sub btnMostrar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnMostrar.Click
f3 = txtDesde.Text
f4 = txtHasta.Text
'Funcion que muestra la tabla en el DataGridView dgv
'Funcion esta ubicada en Module1.vb
Grid(dgv1, f3, f4)
'Habilitar boton exportar
btnExportar.Enabled = True
End Sub
'Botón para exportar
Private Sub btnExportar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportar.Click
Dim app As Microsoft.Office.Interop.Excel.Application
Dim wb As Microsoft.Office.Interop.Excel.Workbook
Dim ws As Microsoft.Office.Interop.Excel.Worksheet
Dim vl As Object = System.Reflection.Missing.Value
Dim i As Integer
Dim j As Integer
app = New Microsoft.Office.Interop.Excel.Application
wb = app.Workbooks.Add(vl)
ws = wb.Sheets("Hoja1")
For i = 0 To dgv.RowCount - 1
For j = 0 To dgv.ColumnCount - 1
For k As Integer = 0 To dgv.Columns.Count
ws.Cells(1, k) = dgv.Columns(k - 1).HeaderText
ws.Cells(i + 2, j + 1) = dgv(j, i).Value.ToString()
Next
Next
Next
ws.SaveAs("D:\Reporte.xlsx")
wb.Close()
app.Quit()
releaseObject(app) //Esta función también está en el módulo solo que no es relevante aquí en el thread
releaseObject(wb)
releaseObject(ws)
Dim res As MsgBoxResult
res = MsgBox("Proceso completado, ¿Le gustaria abrir el archivo?", MsgBoxStyle.YesNo, "Exito")
If (res = MsgBoxResult.Yes) Then
Process.Start("D:\Reporte.xlsx")
End If
End Sub
End Class
Lo que creo es que por mucho que llame a una función mediante el botón mostrar, cuando pulse el de exportar tomará la línea resaltada (es decir, tomará al datagridview vacío). Y bueno, no sé me ha ocurrido nada para que coja el datagridview con los datos en él.
Esperando por un poco de sabiduría mediavidera.
Saludos.