none
gridview é preenchido somente com a primeira coluna do arquivo. RRS feed

  • Pergunta

  • Estou importando um arquivo de texto para popular um gridview, mas o grid só é preenchido com a primeira coluna.

    só colocar "FMT=Delimited" no extended properties não é suficiente para ele identificar o delimitador ";"?

    Muito obrigado.

    private void btnSelecionarArquivo_Click(object sender, EventArgs e)
            {
                OpenFileDialog vAbreArq = new OpenFileDialog();
                vAbreArq.Filter =
                "Arquivo de Texto (*.txt)|*.txt";
                vAbreArq.RestoreDirectory = true;
                vAbreArq.Title = "Selecione o Arquivo";
                vAbreArq.DefaultExt =
                 "Arquivo de Texto (*.txt)|*.txt";
                if (vAbreArq.ShowDialog() == DialogResult.OK)
                {
                    TBxCaminhoEArquivo.Text = vAbreArq.FileName;
                    DataSet ds = new DataSet();
                    string diretorio = System.IO.Path.GetDirectoryName(vAbreArq.FileName);
                    OleDbConnection conexao = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Text;HDR=NO;FMT=Delimited\"", diretorio));
    
                    try
                    {
                        string teste = System.IO.Path.GetFileName(vAbreArq.FileName);
                        OleDbDataAdapter da = new OleDbDataAdapter("Select * From " + teste, conexao);
                        this.Cursor = Cursors.WaitCursor;
                        da.Fill(ds);
                        DGVParceirosImportados.DataSource = ds.Tables[0];
                        DGVParceirosImportados.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Erro ao acessar os dados: " + ex.Message);
                    }
                    finally
                    {
                        conexao.Close();
                        this.Cursor = Cursors.Default;
                    }
                    BtnImportarWebshare.Enabled = true;
                    LblQuantidadeLinhas.Text = DGVParceirosImportados.RowCount.ToString();
                }

    terça-feira, 12 de março de 2013 18:51

Todas as Respostas

  • Alguém sabe me dizer porque o gridview só mostra a primeira coluna?
    quarta-feira, 13 de março de 2013 13:38
  • porque voce nao usa xml ficheiros?

    A flower cannot blossom without sunshine, and man cannot live without love.

    quarta-feira, 13 de março de 2013 20:37
    Moderador
  • porque o arquivo só é disponibilizado em txt, e eu quero evitar intervenção manual.
    quarta-feira, 13 de março de 2013 22:32
  • Cara,

    Da uma olhada na estrutura que eu criei de um arquivo txt:

    Samuel;Teste;Linha1,
    Samuel;Teste;Linha2,
    Samuel;Teste;Linha3,
    Samuel;Teste;Linha4

    Observe que no final de cada linha eu finalizo com ","

    Agora olha o meu código para carregar no grid:

                OpenFileDialog vAbreArq = new OpenFileDialog();
                vAbreArq.Filter = "Arquivo de Texto (*.txt)|*.txt";
                vAbreArq.RestoreDirectory = true;
                vAbreArq.Title = "Selecione o Arquivo";
                vAbreArq.DefaultExt = "Arquivo de Texto (*.txt)|*.txt";
    
                if (vAbreArq.ShowDialog() == DialogResult.OK)
                {                
                    using (StreamReader strArquivo = new StreamReader(vAbreArq.FileName))
                    {
                        string[] strTeste1 = strArquivo.ReadToEnd().Split(',');                    
    
                        DataTable dt = new DataTable();
                        dt.Columns.Add("Nome");
                        dt.Columns.Add("Descricao");
                        dt.Columns.Add("Linha");
    
                        for (int i = 0; i < strTeste1.Length; i++)
                        {
                            string[] strTeste2 = strTeste1[i].Split(';');
                            dt.Rows.Add(strTeste2);
                        }
    
                        dataGridView1.DataSource = dt;
                    }                
                }

    Não precisa fazer tudo isso que você faz no seu código.



    Atenciosamente, Samuel dos Anjos


    quarta-feira, 13 de março de 2013 23:16
  • O código do Samuel esta correto, vou colocar esse so como opção, pois fica um pouco mais genérico. Nao coloquei o OpenFile, pois essa parte esta ok.

                DataTable dt = new DataTable();
                StreamReader str = new StreamReader("C:\\teste.txt");
                List<string []> List = new List<string[]>();
                int Colunas=0;
                string texto;
                while ((texto = str.ReadLine()) != null) {
                    if(texto.Split(';').Length > Colunas) Colunas = texto.Split(';').Length;
                    List.Add(texto.Split(';'));
                }
                for(int i =0;i<Colunas;i++){
                    dt.Columns.Add("Coluna" + i);
                }
                for (int i = 0; i < List.Count; i++) {
                        dt.Rows.Add(List[i]);
                }
                dataGridView1.DataSource = dt;

    quinta-feira, 14 de março de 2013 00:14