Erro de índice fora do intervalo

04/04/2013

0

Fiz esse código e dá o erro de índice fora do intervalo

SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
tbl_Triagem ramo = new tbl_Triagem();
ramo.id_recurso = Int16.Parse(reader[0].ToString());
ramo.dt_cadastro = Convert.ToDateTime(reader[1].ToString());
ramo.cpf_autor = reader[2].ToString();
ramo.nm_autor = reader[3].ToString();
ramo.num_doc = reader[4].ToString();
sequencia.Add(ramo);
}
grid.Columns[0].HeaderText = "ID Recurso";==>> Erro dá aqui(no começo da lista)
grid.Columns[1].HeaderText = "Data de Triagem";
grid.Columns[2].HeaderText = "CPF/CNPJ Autor";
grid.Columns[3].HeaderText = "Nome do Autor";
grid.Columns[4].HeaderText = "Num. Documento";
grid.DataSource = sequencia;
grid.DataBind();

O índice estava fora do intervalo. Ele deve ser não-negativo e menor que o tamanho da coleção.
Nome do parâmetro: index
Pjava

Pjava

Responder

Posts

04/04/2013

Joel Rodrigues

Simples, você está tentando acessar uma coluna que não existe.
Responder

04/04/2013

Frederico Filho

Quando vc estiver deguando..coloque um breakpoint na primeira linha onde vc usa a variavel reader.
Inspecione no Watch e vj quantos itens vc tem no reader...

Tenha a certeza de acessar o indice que contenha registro..

Qlq coisa..se os dados variarem de consulta pra consulta..vc pode fazer um if..pra consultar se tem item no indice em questao antes de acessar o dado.
Responder

05/04/2013

Joel Rodrigues

Vou até arriscar um palpite. Esse gridview não tem colunas e você esta tentando cria-las dinamicamente. Se for isso, acompanhe seu outro tópico sobre o erro no método add.
Responder

05/04/2013

Valter Furtado

Simples... tá dando ToString() num campo NULL... checa antes ...

tbl_Triagem ramo = null;
while (reader.Read())
{
ramo = new tbl_Triagem();
ramo.id_recurso = reader[0] != DbNull.Value ? Int16.Parse(reader[0].ToString()) : 0;
ramo.dt_cadastro = reader[1] != DbNull.Value ? Convert.ToDateTime(reader[1].ToString()) : DateTime.Today;
ramo.cpf_autor = reader[2] != DbNull.Value ? reader[2].ToString() : "";
ramo.nm_autor = reader[3] != DbNull.Value ? reader[3].ToString() : "";
ramo.num_doc = reader[4] != DbNull.Value ? reader[4].ToString() : "";
sequencia.Add(ramo);
}
Responder

10/04/2013

Pjava

Dados existe, mas não consigo renomear as colunas. Tem como fazer isso em Design Time?
Responder

10/04/2013

Joel Rodrigues

Cara, olhando melhor seu código... experimenta renomear as colunas depois do DataBind, pois aí as colunas já terão sido geradas.
Responder

10/04/2013

Pjava

Quando postei esse tópico eu fiz dessa forma, mas agora está depois do DataBind(). Peguei uma ajuda sua q deu a um colega, mas não me lembro o link e cheguei a conclusão abaixo. Lá vc fala para trazer no select os nomes corretos, mas em caso de tabela muito grande isso é improdutivo e sujeito a erros. Abaixo minha nova dúvida:

Bem, achei melhor criar em Design Time os nomes da coluna. Então fui em Edit Column do grid e autogeratecolumn eu coloquei em false e acrescentei alguns BoundField. Bem agora eu preciso atribuir cada coluna criada a um campo da tabela que no meu caso eu tenho uma lista vinda do BD, já que uso Linq para isso. Como eu atribuo cada coluna dessa criada a um item da lista?
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