none
Carregar um datatable por um array RRS feed

Todas as Respostas

  • Faria dessa forma:

                DataTable dt = new DataTable();
                string[] nomes = { "rodrigo", "fernanda", "marcela"};
    
                DataColumn dc = new DataColumn("Nomes");
                dt.Columns.Add(dc);
    
                for (int i = 0; i < nomes.Length; i++)
                {
                    DataRow dr = dt.NewRow();
                    dr[dc] = nomes[i];
                    dt.Rows.Add(dr);
                }
    
                GridView1.DataSource = dt;
                GridView1.DataBind();

    Obviamente que isso depende muito da informação que você possui no array. Mas basicamente é isso, cria as colunas e uma linha para cada elemento do array.


    Rodrigo Reis Ferreira
    Microsoft Certified

    • Sugerido como Resposta EduardoPiresMVP segunda-feira, 21 de maio de 2012 21:20
    segunda-feira, 21 de maio de 2012 20:35
  • O que passa é que minha lista está vindo vazia. Na construção do gráfico ela é preenchida, mas depois quando vou carregar a tabela com os mesmos valores da construção do gráfico, a lista vem vazia. Abaixo os meus códigos:

    protected void Page_Load(object sender, EventArgs e)
            {
                lblTitulo.Text = "TRANSAÇÕES NEGADAS - CRÉDITO";  

                int codUsuario = 123;

                TransacoesNegadasPorMotivoBL bl = new TransacoesNegadasPorMotivoBL();
                bl.Mes = Request.QueryString["Mes"].ToString(); 
                bl.Execute(codUsuario);

    .................

    //Código que conastroem os gráficos

    ....................

    //E aqui eu faço a chamada a lista. Nesse momento ela vem cheia, com dados

    chartSeries1.SetValues(bl.listaTransacoes.ToArray());
                chartSeries1.PlotArea.XAxis.AddRange(1, bl.listaDescricao.Count, 1);//Aqui minha lista listaDescricao possui valores(Count > 0)

                for (int i = 0; i < bl.listaDescricao.Count; i++)
                {
                    chartSeries1.PlotArea.XAxis[i].TextBlock.Text = bl.listaDescricao[i];
                }

    //Abaixo eu populo a tabela. A lista bl.listaDescricao vem vazia. Nesse ponto ela é chamada pela segunda vez 

    private void RetornoDS()
            {
                bl.Execute(codUsuario);//Método que carrega do BD - Nesse momento eu o chamo pelka segunda vez

                DataTable dt = dsVerDados.Tables.Add("dtVerDados1");
                DataColumn col1 = dt.Columns.Add("Cód.", Type.GetType("System.Int32"));
                col1.Caption = "Cód";
                DataColumn col2 = dt.Columns.Add("Descrição", Type.GetType("System.String"));
                col2.Caption = "Descrição";
                col2.AllowDBNull = true;
                DataColumn col3 = dt.Columns.Add("Qtde", Type.GetType("System.Int32"));
                col3.Caption = "Qtde";
                col3.AllowDBNull = true;
                DataColumn col4 = dt.Columns.Add("%", Type.GetType("System.String"));
                col4.Caption = "%";
                col4.AllowDBNull = true;           

                for (int i = 0; i <= bl.listaDescricao.Count; i++)
                {
                    DataRow dr = dt.NewRow();
                    dr[0] = i;
                    dr[1] = bl.listaDescricao[i];  //"Lorem Ipsum sit est dolor";
                    dr[2] = 1;// bl.listaTransacoes.ToArray();
                    Random rnd = new Random();
                    dr[3] = rnd.Next(0, 100);
                    dt.Rows.Add(dr);
                }
               
                DataRow drTotal = dt.NewRow();
                drTotal[0] = DBNull.Value;
                drTotal[1] = DBNull.Value;
                drTotal[2] = DBNull.Value;
                drTotal[3] = "100%";
                dt.Rows.Add(drTotal);

                dsVerDados.Tables.Clear();
                dsVerDados.Tables.Add(dt);

                DsRetorno = dsVerDados;

            }

    Aqui, minha classe de conexão ao banco. Suprimi o select para não ficar extenso essa thread. O select funciona. A lista é preenchida, mas vai vazia. Isso somente qdo é chamada pela segunda vez. Aqui ela é preenchida, mesmo pela segunda vez, mas não consegui ver onde ela é "esvaziada".

     OracleConnection oracleConexao = new OracleConnection();
                oracleConexao.ConnectionString = ConfigurationManager.ConnectionStrings["ConexaoPortalEC"].ConnectionString;

                this.comando = new OracleCommand(comandoSQL.ToString(), oracleConexao);
                try
                {
                    oracleConexao.Open();
                    comando.ExecuteNonQuery();                OracleDataReader dr = comando.ExecuteReader();               
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            string descricao = dr["LEGENDA"].ToString();
                            double soma_total = Convert.ToDouble(dr["QTD"]);

                            listaTransacoes.Add(soma_total);
                            listaDescricao.Add(descricao);
                        }
                    }

                }
                catch (Exception excecao)
                {
                    Erro = excecao.Message;
                }
                finally
                {
                    oracleConexao.Close();
                }
               
                comando.Dispose();

    segunda-feira, 21 de maio de 2012 21:54
  • Falei uma besteira e estou corrigindo. Na linha(pela segunda vez)comando.ExecuteNonQuery(); ele não vai para a linha seguinte(OracleDataReader dr = comando.ExecuteReader();) Ele pula direto para o catch, o que explica a lista não estar sendo carregada. Agora, porque ele pula para o catch, se na primeira vez(carregando o gráfico) ele faz todo o processo certinho?
    segunda-feira, 21 de maio de 2012 22:13
  • Descobri o erro e agora preciso resolver. Eu tenho uma variável pública chamada mes. No page_load do gráfico, ela é carregada e é passada como parâmetro para a query. Acontece, que na chamada do grid, essa variável não é carregada, fazendo com que a query seja executada, mas com erros o que cai no catch. Bem, eu tenho duas classes que são declaradas como public partial class.... Isso não permite com que eu carregue essa variável, pois não possuo visibilidade, devido a ser uma partial class. Na classe do grá fico eu carrego ela. Ela é alimentada com valores vindos do aspx, dessa forma:

    bl.Mes = Request.QueryString["Mes"].Tostring();]

    Onde bl é a variável que vem da classe da query do banco. Na chamada da tabela, eu preciso carregar esse "Mes" e não estou sabendo como. Como instanciar uma classe partial class? Ou um "Go Horse" bem feito, também vale,rs.

    segunda-feira, 21 de maio de 2012 22:45
  • Me diga uma coisa, qual a exceção que o catch ta capturando? tem como colocar o texto aqui? Não entendi o final quando você diz que precisa carregar esse "Mes" e instanciar uma classe "partial class". :/

    Rodrigo Reis Ferreira
    Microsoft Certified

    terça-feira, 22 de maio de 2012 00:18