Erro de índice fora do intervalo

04/04/2013

16

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
Responder

Posts

04/04/2013

Joel Rodrigues

Simples, você está tentando acessar uma coluna que não existe.
Responder
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