Usuário com melhor resposta
ERRO ACCESSVIOLATIONEXCEPTION AS UNHANDLED .NET

Pergunta
-
Boa noite Pessoal...
Estou com um problema que esta me matando...
Consegui desenvolver um código (com muita pesquisa na internet) para exportar os dados do DataGridView em PDF porem o meu gridview ele inicia com algumas informações e eu tenho combobox como filtros e também um datatimer para filtrar datas, até ai tudo bem...
o problema é que quando eu inicio o form e clico em exportar, ele exporta tudo certinho os dados do datagridview, a unica coisa que não sai corretamente é os números que estão negativos, ele sai como se fosse inteiros...
só que quando eu uso o filtro e ele altera os dados no datagridview ele da o erro System.AccessViolationException was unhandled
alguém ja passou por isso?
abaixo o código que estou usando
Private Function relatorioPDF() As DataTable
Dim dt As New DataTable("Divergencia")
Dim dataColumn_0 As New DataColumn(DgvLancamento.Columns(0).HeaderText.ToString(), GetType(String))
dt.Columns.Add(dataColumn_0)
Dim dataColumn_1 As New DataColumn(DgvLancamento.Columns(1).HeaderText.ToString(), GetType(String))
dt.Columns.Add(dataColumn_1)
Dim dataColumn_2 As New DataColumn(DgvLancamento.Columns(2).HeaderText.ToString(), GetType(String))
dt.Columns.Add(dataColumn_2)
Dim dataColumn_3 As New DataColumn(DgvLancamento.Columns(3).HeaderText.ToString(), GetType(String))
dt.Columns.Add(dataColumn_3)
Dim dataColumn_4 As New DataColumn(DgvLancamento.Columns(4).HeaderText.ToString(), GetType(String))
dt.Columns.Add(dataColumn_4)
Dim dataColumn_5 As New DataColumn(DgvLancamento.Columns(5).HeaderText.ToString(), GetType(String))
dt.Columns.Add(dataColumn_5)
Dim dataColumn_6 As New DataColumn(DgvLancamento.Columns(6).HeaderText.ToString(), GetType(String))
dt.Columns.Add(dataColumn_6)
Dim dataColumn_7 As New DataColumn(DgvLancamento.Columns(7).HeaderText.ToString(), GetType(String))
dt.Columns.Add(dataColumn_7)
Dim dataColumn_8 As New DataColumn(DgvLancamento.Columns(8).HeaderText.ToString(), GetType(String))
dt.Columns.Add(dataColumn_8)
Try
' Adicionando as linhas(rows)
Dim dataRow As DataRow
For i As Integer = 0 To DgvLancamento.Rows.Count - 1
dataRow = dt.NewRow()
dataRow(DgvLancamento.Columns(0).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(0).Value.ToString()
dataRow(DgvLancamento.Columns(1).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(1).Value.ToString()
dataRow(DgvLancamento.Columns(2).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(2).Value.ToString()
dataRow(DgvLancamento.Columns(3).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(3).Value.ToString()
dataRow(DgvLancamento.Columns(4).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(4).Value.ToString()
dataRow(DgvLancamento.Columns(5).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(5).Value.ToString()
dataRow(DgvLancamento.Columns(6).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(6).Value.ToString()
dataRow(DgvLancamento.Columns(7).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(7).Value.ToString()
dataRow(DgvLancamento.Columns(8).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(8).Value.ToString()
dt.Rows.Add(dataRow)
Next
dt.AcceptChanges()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Return dt
End Function
Private Sub criarPDF()
Dim caminho As String
Dim salvarComo As SaveFileDialog = New SaveFileDialog()
caminho = DialogResult.ToString
Dim Arquivo As String
Dim DataHoje As String = CStr(DateTime.Now)
DataHoje = Replace(CStr(DataHoje), "/", "-")
DataHoje = Replace(CStr(DataHoje), ":", "-")
DataHoje = Replace(CStr(DataHoje), " ", "-")
salvarComo.CheckFileExists = False
salvarComo.Title = "Controle de Divergencias"
salvarComo.Filter = "Arquivos Pdf |*.pdf"
salvarComo.FileName = "Controle de Divergencias_" & DataHoje
caminho = salvarComo.ShowDialog.ToString <---- Aqui Ocorre o Erro
Douglas Antunes
- Editado DouglasAntunes sexta-feira, 29 de janeiro de 2016 22:04 Erro Português
Respostas
-
Bom dia Douglas,
Analisei o seu código e ele me parece correto.
Utilize essa outra maneira para exportar do VB para o Excel e me diga se o resultado foi diferente.
Note: Primeiramente adicione a referencia do Office na sua biblioteca.
Private Sub Export_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VIEW_Button.Click Dim xlApp As Microsoft.Office.Interop.Excel.Application Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet Dim misValue As Object = System.Reflection.Missing.Value Dim i As Integer Dim j As Integer xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass xlWorkBook = xlApp.Workbooks.Add(misValue) xlWorkSheet = xlWorkBook.Sheets("sheet1") For i = 0 To DataGridView1.RowCount - 2 For j = 0 To DataGridView1.ColumnCount - 1 For k As Integer = 1 To DataGridView1.Columns.Count xlWorkSheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText xlWorkSheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString() Next Next Next xlWorkSheet.SaveAs("D:\vbexcel.xlsx") xlWorkBook.Close() xlApp.Quit() releaseObject(xlApp) releaseObject(xlWorkBook) releaseObject(xlWorkSheet) MsgBox("You can find the file D:\vbexcel.xlsx") End Sub Private Sub releaseObject(ByVal obj As Object) Try System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) obj = Nothing Catch ex As Exception obj = Nothing Finally GC.Collect() End Try End Sub
Atenciosamente, Roberto Alves
- Marcado como Resposta Marcos SJ quarta-feira, 3 de fevereiro de 2016 13:24
Todas as Respostas
-
Bom dia DouglasAntunes,
Esta é a mensagem completa de erro?
Marcos SJ Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-
-
Olá DouglasAntunes,
tudo bem?
Tendo como base que no que você informou que "System.AccessViolationException was unhandled" foi a única informação que o sistema apresentou em absoluto, seguem alguns links que talvez possam ser úteis:
Marcos SJ Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-
Boa tarde Amigão...
Ainda não consegui resolver..
to querendo mudar o Código de exportação..
lembrando que o erro só ocorre quando eu altero os dados do datagridview, se eu abrir o formulário e ja clicar no botão exportar ele gera a exportação em PDF normalmente, isso que é estranho
será que meu código esta entrando em conflito com o DataGrid?
Valeu amigão!
Douglas Antunes
- Editado DouglasAntunes terça-feira, 2 de fevereiro de 2016 17:35 Erro de Portugues
-
Bom dia Douglas,
Analisei o seu código e ele me parece correto.
Utilize essa outra maneira para exportar do VB para o Excel e me diga se o resultado foi diferente.
Note: Primeiramente adicione a referencia do Office na sua biblioteca.
Private Sub Export_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VIEW_Button.Click Dim xlApp As Microsoft.Office.Interop.Excel.Application Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet Dim misValue As Object = System.Reflection.Missing.Value Dim i As Integer Dim j As Integer xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass xlWorkBook = xlApp.Workbooks.Add(misValue) xlWorkSheet = xlWorkBook.Sheets("sheet1") For i = 0 To DataGridView1.RowCount - 2 For j = 0 To DataGridView1.ColumnCount - 1 For k As Integer = 1 To DataGridView1.Columns.Count xlWorkSheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText xlWorkSheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString() Next Next Next xlWorkSheet.SaveAs("D:\vbexcel.xlsx") xlWorkBook.Close() xlApp.Quit() releaseObject(xlApp) releaseObject(xlWorkBook) releaseObject(xlWorkSheet) MsgBox("You can find the file D:\vbexcel.xlsx") End Sub Private Sub releaseObject(ByVal obj As Object) Try System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) obj = Nothing Catch ex As Exception obj = Nothing Finally GC.Collect() End Try End Sub
Atenciosamente, Roberto Alves
- Marcado como Resposta Marcos SJ quarta-feira, 3 de fevereiro de 2016 13:24