MarKteus 1 Denunciar post Postado Agosto 22, 2013 Oi gente To com probleminha chato q talvez vc´s possam me ajudar, criei um datareader e ele é preenchido com 3 registros apenas. Aí faço a leitura dele com o já costumeiro while(drDados.Read()) e jogo os registros para um objeto List<T> + ou - assim while (drDados.Read()) { camposLogE.ID1 = Convert.ToInt32(drDados[0]); camposLogE.DATALOGENT1 = Convert.ToDateTime(drDados[1]); lstCampos.Add(camposLogE); } return lstCampos; depois exibo o resultado em um GridView O problema é que sempre q o laço executa novamente ele preenche no lstCampos com o últimos dados lidos apagando o anterior ou seja, vai para o GridView 3 registros iguais Alguém sabe o por que que isso está acontecendo? Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Agosto 22, 2013 Ele está preenchendo a lista com os dados que já foram lidos anteriormente? Ou os resultados são os mesmos porém em uma query nova? Compartilhar este post Link para o post Compartilhar em outros sites
MarKteus 1 Denunciar post Postado Agosto 22, 2013 Não. Por exemplo Se a query retorna 3 linhas, laço se repete 3 vezes, porém só a última linha recuperada no laço é que é adicionado na lista com o .Add. Ao debugar vi que o retorno do banco está correto, ou seja, o dataReader vem com todos os registros, um diferente do outro conforme a tabela, o problema está mesmo no momento em que é adicionado ao List<T>. Inclusive é criado uma lista com 3 linhas, porém todas as linhas preenchidas com o último registro do dataReader, ou seja, 3 registros repetidos. No momento da adição com .Add, percebi debugando que, é adicionado o primeiro registro, na segunda passada do laço é colocado o segundo registro em cima do 1º e depois adicionado ao final. O mesmo acontece com o 3º, é colocado sobre o 1º e o sobre 2º e adicionado (ele mesmo) no final. Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Agosto 22, 2013 Porque você não está passando nenhum parâmetro de ID para a lista. Por padrão, toda a lista do formato List<T> é uma List<int> que pega valores no formato <int,val>, ou seja, ID e valor. você pode tentar fazer o seguinte: Faça um array com os registros e depois utilize o método AddRange da List para adicionar o array, você pode também buscar por ID's como neste exemplo: http://stackoverflow.com/questions/5613192/c-sharp-fill-generic-list-from-sqldatareader Compartilhar este post Link para o post Compartilhar em outros sites
MarKteus 1 Denunciar post Postado Agosto 23, 2013 Valew Kaos O que você me sugeriu, pelo que vi deve dar certo também, mas consegui resolver. Foi digamos, falta de prática no trato com C#. veja: drLog = dadosTbl.GeraLista(10); List<CAMPOS_SET_GET> lstCamposLogR = new List<CAMPOS_SET_GET>(); while (drLog.Read()) { CAMPOS_SET_GET camposLogR = new CAMPOS_SET_GET(); camposLogR.ID = Convert.ToInt32(drLog[11]); camposLogR.IDENTRADA = Convert.ToInt32(drLog[12]); camposLogR.DATARETORNO = Convert.ToDateTime(drLog[13]); lstCamposLogR.Add(camposLogR); } return lstCamposLogR; A primeira linha do While tinha ficado de fora, por isso dava aquele "erro" passei a linha para dentro do laço acabou o problema. Obrigado mesmo assim :graduated: Compartilhar este post Link para o post Compartilhar em outros sites