none
Importar arquivo texto para datagridview RRS feed

  • Pergunta

  • Boa noite.

    Estou com problemas com a importação de dados de um arquivo texto e passando essas informações em umdatagridview. A mensagem de erro é:

    O CLR não conseguiu fazer a transição do contexto COM 0x1ba2b3a0 para o contexto COM 0x1ba2b5f0 em 60 segundos. O thread que possui o context/apartment de destino está provavelmente fazendo uma espera sem bombeamento ou processando uma operação de execução muito longa sem bombeamento das mensagens do Windows. Geralmente, essa situação tem um impacto negativo no desempenho e pode até mesmo levar à falta de resposta do aplicativo ou ao acúmulo contínuo de uso de memória com o tempo. Para evitar esse problema, todos os threads com um único apartment em thread (STA) devem usar primitivos de espera de bombeamento (como CoWaitForMultipleHandles) e bombear rotineiramente as mensagens durante operações de execução longa.

    Abaixo segue codigo que realizei. O arquivo texto possui 139 linhas, e os dados são adicionados em 13 colunas. Toda a informação de cada coluna é separada por " ; ".

    Private Sub ImportarLista()

            'define as variáveis usadas no projeto
            Dim linhaTexto As String = ""
            Dim arrrayDeLinhas() As String
            Dim ContadorLinhas As Integer
            'Carrega as informacoes existente na lista 

            'cria um novo objeto StreamReader
            Dim objReader As New IO.StreamReader(ArquivoLista)
            'Inicia a busca do link no arquivo texto e preenche a gridLink
            Try
                ContadorLinhas = 0
                Do While objReader.Peek() <> -1
                    If ContadorLinhas > 0 Then gridLink.Rows.Add(ContadorLinhas)
                    linhaTexto = objReader.ReadLine()
                    arrrayDeLinhas = Split(linhaTexto, ";")
                    gridLink(0, ContadorLinhas).Value = arrrayDeLinhas(0).ToString
                    gridLink(1, ContadorLinhas).Value = arrrayDeLinhas(1).ToString
                    gridLink(2, ContadorLinhas).Value = arrrayDeLinhas(2).ToString
                    gridLink(3, ContadorLinhas).Value = arrrayDeLinhas(3).ToString
                    gridLink(4, ContadorLinhas).Value = arrrayDeLinhas(4).ToString
                    gridLink(5, ContadorLinhas).Value = arrrayDeLinhas(5).ToString
                    gridLink(6, ContadorLinhas).Value = arrrayDeLinhas(6).ToString
                    gridLink(7, ContadorLinhas).Value = arrrayDeLinhas(7).ToString
                    gridLink(8, ContadorLinhas).Value = arrrayDeLinhas(8).ToString
                    gridLink(9, ContadorLinhas).Value = arrrayDeLinhas(9).ToString
                    gridLink(10, ContadorLinhas).Value = arrrayDeLinhas(10).ToString
                    gridLink(11, ContadorLinhas).Value = arrrayDeLinhas(11).ToString
                    gridLink(12, ContadorLinhas).Value = arrrayDeLinhas(12).ToString
                    ContadorLinhas = ContadorLinhas + 1
                Loop
                objReader.Close()
                'Apaga as linhas em branco

                ContadorLinhas = 0
                Do While ContadorLinhas < gridLink.Rows.Count
                    If gridLink.Rows.Item(ContadorLinhas).Cells(8).Value = "" Then
                        gridLink.CurrentCell = Nothing
                        gridLink.Rows(ContadorLinhas).Visible = False
                    End If
                    ContadorLinhas = ContadorLinhas + 1
                Loop            

                MsgBox("Importação realizada", vbInformation, "Importacao de Lista")

            Catch ex As Exception
                MsgBox("Não foi possível importar o arquivo texto", vbInformation, "Importacao de Lista")
                GoTo TerminoAcao
            End Try

    TerminoAcao:

        End Sub



    Carlos Falcao

    sábado, 21 de setembro de 2013 01:08

Todas as Respostas

  • um exemplo que uso  para carregar txt delimitado para um datagrid:

     Private Sub Carregardatagrid_Click(sender As Object, e As EventArgs) Handles Carregardatagrid.Click
            Try
                Dim cSeparador As Char
                Dim dt As New DataTable
               
                dt.Columns.Add("Data e Hora")
                dt.Columns.Add("Usuário")
                dt.Columns.Add("Telefone")
                dt.Columns.Add("Nome Titular")
                dt.Columns.Add("Motivo")
                dt.Columns.Add("Descrição do BD")
                dt.Columns.Add("Resolvido?")
                dt.Columns.Add("reserva1")
                dt.Columns.Add("reserva2")
                dt.Columns.Add("reserva3")
                dt.Columns.Add("reserva4")


                Dim srArquivo As New System.IO.StreamReader(historicoUsuario & Environment.UserName & ".txt")
                'Exemplo linhas do arquivo com colunas separadas por tab
                '1  Valor teste1    Valor xx
                '2  Valor teste2    Valor yy
                cSeparador = ";" ' colunas separadas por ;  pode ser qq outro separdor, exemplo ;
                'lendo arquivo e gravando no DataTable
                While srArquivo.Peek() <> -1
                    dt.Rows.Add(srArquivo.ReadLine().Split(cSeparador))
                End While
                DataGridView1.DataSource = dt
                srArquivo.Close()

                MsgBox("Leitura efetuada com sucesso!!!", MsgBoxStyle.Information, "Sucesso")
                btsalvar.Enabled = True
                btexcluir.Enabled = True
                
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub

    quarta-feira, 25 de setembro de 2013 01:47