Carregar datatable por um array

21/05/2012

0

Tenho um array que recebe valores do BD. Como eu faço para carregar um DT com dados provenientes desse array?
Pjava

Pjava

Responder

Posts

21/05/2012

Joel Rodrigues

Você deve fazer um loop no array e, para cada elemento, criar um DataRow e adicionar à tabela. O DataTable possui uma propriedade Rows que permite a inserção de novas linhas.
Responder

21/05/2012

Pjava

html,body{padding:0;margin:0;font-family:Verdana,Geneva,sans-serif;background:#fff;}html{font-size:100%}body{font-size:.75em;line-height:1.5;padding-top:1px;margin-top:-1px;}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em}h3{font-size:1.16em}h4{font-size:1em}h5{font-size:.83em}h6{font-size:.7em}p{margin:0 0 1em;padding:0 .2em}.t-marker{display:none;}.t-paste-container{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}ul,ol{padding-left:2.5em}a{color:#00a}code, pre{font-size:1.23em}
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();
Responder

21/05/2012

Pjava

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?
Responder

21/05/2012

Pjava

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.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar