Preenchimento de DataTable vazio causando indexOutOfRangeException
Boa noite. Estou tentando gerar uma tabela dinamicamente a partir de consultas que podem me retornar mais de uma tabela:
*****************************************************************************************
public DataTable montarTabelaPassAuxiliar(String auxiliarNom)
{
DataTable tabAuxiliar = new DataTable();
DataTable tabCooperado = new DataTable();
DataTable tabelaCarros = new DataTable();
DataTable tabAuxiliarCarr = new DataTable();
AuxiliarDAO daoAuxiliar = new AuxiliarDAO();
CooperadoDAO daoCooperado = new CooperadoDAO();
int kx = 0;
int ky = 0;
tabAuxiliar = daoAuxiliar.consultar(auxiliarNom);
if (tabAuxiliar.Rows.Count > 0)
for (int i = 0; i < tabAuxiliar.Rows.Count; i++)
{
tabCooperado = daoCooperado.consultar(int.Parse(tabAuxiliar.Rows[i]["idCooperado"].ToString()));
if (tabCooperado.Rows.Count > 0)
{
tabAuxiliarCarr = this.montarTabelaPassCooperado(tabCooperado.Rows[0]["nome"].ToString());
tabelaCarros = tabAuxiliarCarr.Copy();
for (int j = 0; j < tabAuxiliarCarr.Rows.Count; j++, kx++)
{
if (kx > 0) tabelaCarros.NewRow();
ky = 0;
for(int k = 0; k < tabAuxiliarCarr.Columns.Count; k++, ky++)
{
--->>> tabelaCarros.Rows[kx][ky] = tabAuxiliarCarr.Rows[j][k];
}
}
}
}
return tabelaCarros;
}
}
*****************************************************************************************<
O problema está na linha em que marquei com setas. No array que representa a tabelaCarros, na posição 1, está acusando que não há nada! Claro que não há nada! se é exatamente onde estou tentando colocar!!!! Alguém tem uma sugestão?
demasiado grado
*****************************************************************************************
public DataTable montarTabelaPassAuxiliar(String auxiliarNom)
{
DataTable tabAuxiliar = new DataTable();
DataTable tabCooperado = new DataTable();
DataTable tabelaCarros = new DataTable();
DataTable tabAuxiliarCarr = new DataTable();
AuxiliarDAO daoAuxiliar = new AuxiliarDAO();
CooperadoDAO daoCooperado = new CooperadoDAO();
int kx = 0;
int ky = 0;
tabAuxiliar = daoAuxiliar.consultar(auxiliarNom);
if (tabAuxiliar.Rows.Count > 0)
for (int i = 0; i < tabAuxiliar.Rows.Count; i++)
{
tabCooperado = daoCooperado.consultar(int.Parse(tabAuxiliar.Rows[i]["idCooperado"].ToString()));
if (tabCooperado.Rows.Count > 0)
{
tabAuxiliarCarr = this.montarTabelaPassCooperado(tabCooperado.Rows[0]["nome"].ToString());
tabelaCarros = tabAuxiliarCarr.Copy();
for (int j = 0; j < tabAuxiliarCarr.Rows.Count; j++, kx++)
{
if (kx > 0) tabelaCarros.NewRow();
ky = 0;
for(int k = 0; k < tabAuxiliarCarr.Columns.Count; k++, ky++)
{
--->>> tabelaCarros.Rows[kx][ky] = tabAuxiliarCarr.Rows[j][k];
}
}
}
}
return tabelaCarros;
}
}
*****************************************************************************************<
O problema está na linha em que marquei com setas. No array que representa a tabelaCarros, na posição 1, está acusando que não há nada! Claro que não há nada! se é exatamente onde estou tentando colocar!!!! Alguém tem uma sugestão?
demasiado grado
Tiago
Curtidas 0
Respostas
Netasper
05/01/2010
Amigo,
abre um chamado aqui mesmo, o pessoal responde para vc isto.... tem que responder ate achar a solução... []s
GOSTEI 0
Tiago
05/01/2010
Certo. Mas me parece que isso já é um chamado aberto, não?
grato
grato
GOSTEI 0
Tiago
05/01/2010
Boa noite. Resolvi o problema criando um dataRow com a mesma estrutura da tabela(row = tabAuxiliarCarr.NewRow()), percorrendo os mesmos, populando o row com os dados das colunas da tabela, e, por fim, adicionando o row na tabela a resultante a ser retornada.
GOSTEI 0
Tiago
05/01/2010
Boa noite. Resolvi o problema criando um dataRow com a mesma estrutura da tabela(row = tabAuxiliarCarr.NewRow()), percorrendo os mesmos, populando o row com os dados das colunas da tabela, e, por fim, adicionando o row na tabela a resultante a ser retornada.
GOSTEI 0
Tiago
05/01/2010
O código:
public DataTable montarTabelaPassAuxiliar(String auxiliarNom)
{
DataTable tabAuxiliar = new DataTable();
DataTable tabCooperado = new DataTable();
DataTable tabelaCarros = new DataTable();
DataTable tabAuxiliarCarr = new DataTable();
AuxiliarDAO daoAuxiliar = new AuxiliarDAO();
CooperadoDAO daoCooperado = new CooperadoDAO();
tabAuxiliar = daoAuxiliar.consultar(auxiliarNom);
if (tabAuxiliar.Rows.Count > 0)
for (int i = 0; i < tabAuxiliar.Rows.Count; i++)
{
tabCooperado = daoCooperado.consultar(int.Parse(tabAuxiliar.Rows[i]["idCooperado"].ToString()));
if (tabCooperado.Rows.Count > 0)
{
tabAuxiliarCarr = this.montarTabelaPassCooperado(tabCooperado.Rows[0]["nome"].ToString());
if (tabAuxiliarCarr.Rows.Count > 0)
{
if (tabelaCarros.Rows.Count == 0)
tabelaCarros = tabAuxiliarCarr.Copy();
else
{
DataRow row = tabelaCarros.NewRow();
for (int j = 0; j < tabAuxiliarCarr.Rows.Count; j++)
{
for (int k = 0; k < tabAuxiliarCarr.Columns.Count; k++)
{
row[k] = tabAuxiliarCarr.Rows[j][k];
}
tabelaCarros.Rows.Add(row);
}
}
}
}
}
return tabelaCarros;
}
A propósito, como faço pra fechar o chamado nesse site?
grato.
public DataTable montarTabelaPassAuxiliar(String auxiliarNom)
{
DataTable tabAuxiliar = new DataTable();
DataTable tabCooperado = new DataTable();
DataTable tabelaCarros = new DataTable();
DataTable tabAuxiliarCarr = new DataTable();
AuxiliarDAO daoAuxiliar = new AuxiliarDAO();
CooperadoDAO daoCooperado = new CooperadoDAO();
tabAuxiliar = daoAuxiliar.consultar(auxiliarNom);
if (tabAuxiliar.Rows.Count > 0)
for (int i = 0; i < tabAuxiliar.Rows.Count; i++)
{
tabCooperado = daoCooperado.consultar(int.Parse(tabAuxiliar.Rows[i]["idCooperado"].ToString()));
if (tabCooperado.Rows.Count > 0)
{
tabAuxiliarCarr = this.montarTabelaPassCooperado(tabCooperado.Rows[0]["nome"].ToString());
if (tabAuxiliarCarr.Rows.Count > 0)
{
if (tabelaCarros.Rows.Count == 0)
tabelaCarros = tabAuxiliarCarr.Copy();
else
{
DataRow row = tabelaCarros.NewRow();
for (int j = 0; j < tabAuxiliarCarr.Rows.Count; j++)
{
for (int k = 0; k < tabAuxiliarCarr.Columns.Count; k++)
{
row[k] = tabAuxiliarCarr.Rows[j][k];
}
tabelaCarros.Rows.Add(row);
}
}
}
}
}
return tabelaCarros;
}
A propósito, como faço pra fechar o chamado nesse site?
grato.
GOSTEI 0
Netasper
05/01/2010
Legal que conseguiu!´[]s
GOSTEI 0
Paulo Sena
05/01/2010
A partir do VS2005 vc pode utilizar o linq para otimizar essa sua consulta.
GOSTEI 0
Eleuterio Gonzalez
05/01/2010
parabens ficou legal
GOSTEI 0