none
Preencher um datatable dinamicamente RRS feed

  • Pergunta

  • Pessoal estou precisando de uma ajuda para preencher um datatable de forma dinâmica, por exemplo eu preencho as colunas da seguinte forma:

     //Adiciona as colunas gerando o cabçalho da gridview
            for (int i = 0; i < listacampos.Count; i++)
            {
                dTable.Columns.Add(listacampos[i].DsCampo.ToString());
            }

    Depois de  preencher as a linha conforme cada coluna  por exemplo:

    for (int i = 0; i < nova.Count; i++)
                {
    
                     dTable.Rows.Add(nova[i].DsConteudoCampo.ToString());
                }
    
    
    
                dTable.Rows.Add(dLinha);

    Cabeçalho eu tenho nome e e-mail por exemplo, porém desta forma que esta implementada ao montar a linha esta colocando o resultado nome e e-mail na mesma coluna.

    Eu preciso que preencha toda linha, exemplo nome na coluna nome e e-mail na coluna e-mail.

    Desde já agradeço a ajuda


    sexta-feira, 9 de março de 2012 00:49

Todas as Respostas

  • Josue,

    Você deve informar ao seu DataRow todas as colunas que sua tabela possue, fiz um exemplo para você observar.

    DataTable dTable1 = new DataTable();
            
            // adiciona a coluna
            for (int i = 0; i < 2; i++)
            {
                dTable1.Columns.Add("Campo" + Convert.ToString(i + 1));
            }
     
            // percorre as colunas adicionadas
            for (int i = 0; i < dTable1.Columns.Count; i++)
            {
                for (int j = 0; j < 5; j++ )
                {
                    dTable1.Rows.Add("valorA","valorB");
                }
                
            }
    
            GridView1.DataSource = dTable1;
            GridView1.DataBind();

    Observe essa linha, ela que você precisará alterar

     dTable1.Rows.Add("valorA","valorB");
    

    Se a resposta ajudou a resolver seu problema por favor não esqueça de marcá-la como resposta válida

    Abraços,

    Leandro Rodrigues


    Caso a resposta tenha ajudado, não esqueça de marcar como resposta válida

    sexta-feira, 9 de março de 2012 03:14
  • Leandro

    Desde já agradeço pela sua ajuda, porém há um problema, assim como as colunas, as linhas são preenchidas de forma dinâmica.

    Eu tenho uma tabela no banco com os campos que o gerenciador do formulário cadastra e tenho outra tabela onde o usuário cadastra os dados referentes a este campo, pode ser que seja cadastrado por exemplo os campos nome e e-mail, eu um segundo momento pode ser cadastrado os campos A,B,C,D e o usuário vai cadastrar os dados para estes campos.

    sexta-feira, 9 de março de 2012 13:48
  • Pessoal após alguns dias quebrando a cabeça consegui resolver o problema da seguinte forma:

    /// <summary>
        /// Monta o datatable 
        /// </summary>
        /// <returns></returns>
        public DataTable dtDados()
        {
            //Cria uma lista com todos os campos do formulário
            List<MRelatorioEventos> listacampos = NRelatorioEventos.ListaCamposRelatorio(relatorio);
    
            //Cria uma lista com  todos os ids dos inscritos no evento
            List<MRelatorioEventos> listaidsparticipantes = NRelatorioEventos.ListaIdsParticipantes(relatorio);
    
            //Cria uma lista com todos os dados dos participantes do evento
            List<MRelatorioEventos> listaparticipantes = NRelatorioEventos.ListaParticipantes(relatorio);
    
            //Cria uma lista que irá receber todos dados dos participantes agrupados por IDs 
            List<MRelatorioEventos> dadosParticipante = new List<MRelatorioEventos>();
    
            //Cria um datatable onde é montada a tabela com os dados vindos do banco de dados 
            DataTable dTable = new DataTable();
    
            //Adiciona as colunas gerando o cabeçalho para a tabela 
            for (int i = 0; i < listacampos.Count; i++)
            {
                dTable.Columns.Add(listacampos[i].DsCampo.ToString());
    
            }
    
            //Reune os dados de cada participante
            foreach (var item in listaidsparticipantes)
            {
                //Obtém os dados do participante atual.
                dadosParticipante = listaparticipantes.FindAll(delegate(MRelatorioEventos atual) { return atual.IdParticipante == item.IdParticipante; });
    
                //Adiciona uma nova linha a cada item da lista de participante
                dTable.Rows.Add();
    
                //Percorre cada linha da tabela para preenche-la com os dados dos participantes  
                for (int i = 0; i < dTable.Rows.Count; i++)
                {
                    //Percorre a lista com os dados do participante
                    for (int j = 0; j < dadosParticipante.Count; j++)
                    {
                        //Adiciona os dados do participante sempre na última linha do datatable [dTable.Rows.Count-1]
                        //[j]Representa as colunas do datatable 
                        dTable.Rows[dTable.Rows.Count - 1][j] = dadosParticipante[j].DsConteudoCampo;
                    }
    
                }
            }
    
            return dTable;
        }
    Após montar o dataTable é só adiciona-lo ao datasource da gridview

    • Sugerido como Resposta Augusto.Silva quinta-feira, 15 de março de 2012 11:52
    quarta-feira, 14 de março de 2012 19:52