Array
(
)

Erro de índice fora do intervalo

Pjava
   - 04 abr 2013

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

Joel Rodrigues
   - 04 abr 2013

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

Fredericopranto
   - 04 abr 2013

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.

Joel Rodrigues
   - 05 abr 2013

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.

Valter Furtado
   - 05 abr 2013

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

#Código

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);
}

Pjava
   - 10 abr 2013

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

Joel Rodrigues
   - 10 abr 2013

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

Pjava
   - 10 abr 2013

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?