none
Preencher controle Table com um DataTable RRS feed

  • Pergunta

  • Olá :D


    Tenho o seguinte cenário:

    Tenho um BD em que eu tenho as seguintes informações:

    Gostaria de  fazer uma página onde seja mostrado essa informação da seguinte forma:

    Quando o usuário clicar no primeiro botão, ele edita as informações da linha 1 através de uma outra página, se ele clicar no segundo botão, ele exclui a informação da linha 1. Seria assim com todas as linhas de resultado da query.

    Pensei em fazer da seguinte forma:

    - Abro a conexão com o BD;

    - Executo uma query básica do tipo "SELECT* FROM produtos";

    - Coloco essas informações em uma DataTable;

    - Percorro as linhas e colunas da DataTable e as crio no controle Table1.

    Tentei fazer da seguinte forma:

    conexao.Open();
    MySqlCommand comando = conexao.CreateCommand();
    comando.CommandType = CommandType.Text;
    comando.CommandText = "SELECT * FROM produtos";
    comando.ExecuteNonQuery();
    DataTable dt = new DataTable();
    MySqlDataAdapter da = new MySqlDataAdapter(comando);
    da.Fill(dt);
    foreach (DataRow dr in dt.Rows)
    {
         TableRow tr = new TableRow();
         foreach (DataColumn dc in dt.Columns)
         {
              TableCell tc = new TableCell();
              tc.Text = "<font size=2>" + dt.Rows.ToString() + "</font>";
              tr.Cells.Add(tc);
         }
         Table1.Rows.Add(tr);
    
         tr.HorizontalAlign = HorizontalAlign.Center;
    }
    
    conexao.Close();

    Ele me retorna dessa forma:

    Fiquei contente no primeiro momento pois ele preenche com a quantidade certa de informações que esta no BD (5 colunas e 4 linhas), porém como podem notar, ele não preencheu com as informações do BD.

    Explicado o ocorrido, tenho três grandes dúvidas:

    1º Esse é o melhor método para se fazer isso?

    2º Se sim, como eu consigo fazer para a table ser preenchida com os valores do BD?

    3º Tendo a table preenchida com as informações, como eu adiciono uma ou duas colunas com essas informações para edição e/ou exclusão dos registros?

    Caso precisem de uma explicação melhor sobre as minhas dúvidas, me avise que eu ficarei feliz em tentar explicar melhor.

    Agradeço qualquer luz que vocês possam me dar. :)

    quarta-feira, 15 de fevereiro de 2017 00:40

Respostas

  • Seu erro está na linha: 

    tc.Text = "<font size=2>" + dt.Rows.ToString() + "</font>";

    Você deveria usar isto para funcionar:

    tc.Text = "<font size=2>" + dr[dc].ToString() + "</font>";

    Não é que este seja o melhor ou pior modo, mas há outros modos que dão menos trabalho. Uma sugestão para o que está precisando é usar um GridView, que permite associar um DataTable como origem de dados, acrescentar colunas personalizadas, colunas com botões e por aí vai.

    Segue um link para ajuda: https://msdn.microsoft.com/pt-br/library/cc518055.aspx?f=255&MSPPError=-2147217396

    Se mesmo assim optar por seguir com o Table, basicamente o que precisa é criar um TableCell pra cada nova coluna que precisar.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta NouRuem quinta-feira, 16 de fevereiro de 2017 00:12
    quarta-feira, 15 de fevereiro de 2017 10:24

Todas as Respostas

  • Seu erro está na linha: 

    tc.Text = "<font size=2>" + dt.Rows.ToString() + "</font>";

    Você deveria usar isto para funcionar:

    tc.Text = "<font size=2>" + dr[dc].ToString() + "</font>";

    Não é que este seja o melhor ou pior modo, mas há outros modos que dão menos trabalho. Uma sugestão para o que está precisando é usar um GridView, que permite associar um DataTable como origem de dados, acrescentar colunas personalizadas, colunas com botões e por aí vai.

    Segue um link para ajuda: https://msdn.microsoft.com/pt-br/library/cc518055.aspx?f=255&MSPPError=-2147217396

    Se mesmo assim optar por seguir com o Table, basicamente o que precisa é criar um TableCell pra cada nova coluna que precisar.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta NouRuem quinta-feira, 16 de fevereiro de 2017 00:12
    quarta-feira, 15 de fevereiro de 2017 10:24
  • Obrigado.

    Testei dessa forma e ele preencheu com as informações.

    Vou verificar sobre a GridView.

    quinta-feira, 16 de fevereiro de 2017 00:12