SELECT PARA UM ARRAY
Pessoal boa tarde,
Estou com o seguinte problema tenho a instrução SQL dentro da minha CLASS. e criei um formulario de PEDIDOS ,
Entretanto consigo cadastrar , Consultar e blz.. a consulta retorna os itens do pedido no grid.. mais tenho o seguinte problema.. os dados que vao nos campos como ( nome, sobrenome , etc... ) eu nao consigo fazer eles retornarem da classe pelo array e ja irem direto para as textbox.. outra coisa que nao consigo fazer é editar os dados que ele carrega no grid.. quando eu salvo . ele salva novamente os itens no banco de dados .. com os mesmos dados. eu nao consigo modificar e nem incluir nenhum item . se alguem souber por favor ajudem .. gratoo
Estou com o seguinte problema tenho a instrução SQL dentro da minha CLASS. e criei um formulario de PEDIDOS ,
Entretanto consigo cadastrar , Consultar e blz.. a consulta retorna os itens do pedido no grid.. mais tenho o seguinte problema.. os dados que vao nos campos como ( nome, sobrenome , etc... ) eu nao consigo fazer eles retornarem da classe pelo array e ja irem direto para as textbox.. outra coisa que nao consigo fazer é editar os dados que ele carrega no grid.. quando eu salvo . ele salva novamente os itens no banco de dados .. com os mesmos dados. eu nao consigo modificar e nem incluir nenhum item . se alguem souber por favor ajudem .. gratoo
Conhece OOP? Conhece o conceito de List<T> ao invés de array? Seriam as primeiras coisas a entender. Não tenho como afirmar, mas tem grandes chances de você estar usando DataTables para fazer a consulta e passando o retorno direto para o grid. Se usar o conceito de OOP as coisas vão facilitar muito para você. Se usa SQL Server, fiz um gerador de CRUD todo OOP um tempo atrás, seria interessante você dar uma olhadinha nele. Mesmo que não use SQL Server, faça o teste nele e vai ver o que ele gera...
cara ... acho q nao soube explicar..
SEGUINTE :..>
EU FAÇO UM SELECT [...] FROM ITEM_PEDIDO WHERE ID = @ID ;
EM SEGUIDA
OS VALORES DO EU JOGO EM UM DATAGRID...
ESSE DATAGRID EU JOGO OS VALORES DELE DE VOLTA PRO FORM ... ELE CARREGA NA MINHA TELA NORMAL ..
POREM .. QUANDO EU CLICO EM SALVAR. - ELE ALTERA OS REGISTROS QEU ESTAO NA TABELA. ALTERA TUDO DIREITINHO ..
MAIS ELE NAO FAIZ O ROWS.CLEAR()... EU REPAREI QUE AS COLUNAS QUE JA ESTAVAM PRé CARREGADAS ELAS SOMEM E ENTRAM AS NOVAS QUE O SISTEMA TROUXE DO SELECT .. TEM ALGUMA FORMA DE EU TRAZER AS COLUNAS Q EU CRIEI DE VOLTA PRO GRID E LIMPAR O GRID ?
SEGUINTE :..>
EU FAÇO UM SELECT [...] FROM ITEM_PEDIDO WHERE ID = @ID ;
EM SEGUIDA
OS VALORES DO EU JOGO EM UM DATAGRID...
ESSE DATAGRID EU JOGO OS VALORES DELE DE VOLTA PRO FORM ... ELE CARREGA NA MINHA TELA NORMAL ..
POREM .. QUANDO EU CLICO EM SALVAR. - ELE ALTERA OS REGISTROS QEU ESTAO NA TABELA. ALTERA TUDO DIREITINHO ..
MAIS ELE NAO FAIZ O ROWS.CLEAR()... EU REPAREI QUE AS COLUNAS QUE JA ESTAVAM PRé CARREGADAS ELAS SOMEM E ENTRAM AS NOVAS QUE O SISTEMA TROUXE DO SELECT .. TEM ALGUMA FORMA DE EU TRAZER AS COLUNAS Q EU CRIEI DE VOLTA PRO GRID E LIMPAR O GRID ?
Citação:POREM .. QUANDO EU CLICO EM SALVAR. - ELE ALTERA OS REGISTROS QEU ESTAO NA TABELA. ALTERA TUDO DIREITINHO ..
MAIS ELE NAO FAIZ O ROWS.CLEAR()... EU REPAREI QUE AS COLUNAS QUE JA ESTAVAM PRé CARREGADAS ELAS SOMEM E ENTRAM AS NOVAS QUE O SISTEMA TROUXE DO SELECT .. TEM ALGUMA FORMA DE EU TRAZER AS COLUNAS Q EU CRIEI DE VOLTA PRO GRID E LIMPAR O GRID ?
Sim, quando fizer o select, jogue o resultado em uma List<T> de uma classe com as mesmas propriedades da sua tabela. Quando alterar alguma linha no grid, altere o Ãtem equivalente na sua lista. Então, sempre jogue essa lista para o grid.
cara estou com serios problemas pra desenvolver essa list <T> ai procurei por exemplos na net mais nenhum tem mto a ver com oq eu estou fazendo .. se possivel .. tem como vc me dar uma dica para criar essa list ???
meu código na class é o seguinte
public DataTable carrega_pedido(int id)
{
string vsql = [Ô]SELECT id,item,descricao,unidade,quant,valor FROM item_pedido where id_pedido = @idpedido[Ô];
SqlCommand sqlcmd = null;
if (this.conectar())
{
sqlcmd = new SqlCommand(vsql, objcon);
sqlcmd.Parameters.AddWithValue([Ô]idpedido[Ô],id);
SqlDataAdapter ADT = new SqlDataAdapter(sqlcmd);
DataTable dt = new DataTable();
ADT.Fill(dt);
return dt;
}
else
{
return null;
}
}
na hora de colocar pro retorno colocando isso na lista como eu faria ? por favor! - obrigado desde ja
meu código na class é o seguinte
public DataTable carrega_pedido(int id)
{
string vsql = [Ô]SELECT id,item,descricao,unidade,quant,valor FROM item_pedido where id_pedido = @idpedido[Ô];
SqlCommand sqlcmd = null;
if (this.conectar())
{
sqlcmd = new SqlCommand(vsql, objcon);
sqlcmd.Parameters.AddWithValue([Ô]idpedido[Ô],id);
SqlDataAdapter ADT = new SqlDataAdapter(sqlcmd);
DataTable dt = new DataTable();
ADT.Fill(dt);
return dt;
}
else
{
return null;
}
}
na hora de colocar pro retorno colocando isso na lista como eu faria ? por favor! - obrigado desde ja
1 - Crie uma classe sugiro o nome ItemPedido. Nela, coloque as propriedades referentes ao retorno do select, no caso, id,item,descricao,unidade,quant,valor
2 - Para ler os dados, faça:
2 - Para ler os dados, faça:
public DataTable carrega_pedido(int id)
{
string vsql = [Ô]SELECT id,item,descricao,unidade,quant,valor FROM item_pedido where id_pedido = @idpedido[Ô];
SqlCommand sqlcmd = null;
if (this.conectar())
{
sqlcmd = new SqlCommand(vsql, objcon);
sqlcmd.Parameters.AddWithValue([Ô]idpedido[Ô],id);
using (SqlDataReader dr = sqlcmd.ExecuteReader())
{
if (dr.HasRows)
{
List<PedidoItem> pedidos = new List<PedidoItem>();
while (dr.Read())
{
PedidoItem item = new PedidoItem();
item.Id = dr.GetInt32(dr.GetValue([Ô]id[Ô]));
item.Descricao = dr.GetString(dr.GetValue([Ô]descricao[Ô]));
[...]//carregue as outras propriedades, da mesma maneira como acima, usando o método apropriado, para string, use getstring, numérico, use getint32...
pedidos.Add(item);
}
}
}
//Pare o código aqui, e veja o conteúdo da variável pedidos na watch window....
return dt;
}
else
{
return null;
}
}
O truque todo, é não usar os objetos de dados diretamente, sempre crie classes que representem o que o objeto do banco traz, mas com as propriedades e métodos da maneira como você quer
public DataTable carrega_novo_pedido(int id)
{
string vsql = [Ô]SELECT id,item,descricao,unidade,quant,valor FROM item_pedido where id_pedido = @idpedido[Ô];
SqlCommand sqlcmd = null;
if (this.conectar())
{
sqlcmd = new SqlCommand(vsql, objcon);
sqlcmd.Parameters.AddWithValue([Ô]idpedido[Ô], id);
using (SqlDataReader dr = sqlcmd.ExecuteReader())
{
if (dr.HasRows)
{
//id,item,descricao,unidade,quant,valor
List<PedidoItem> pedido = new List<PedidoItem>();
while (dr.Read())
{
PedidoItem item = new PedidoItem();
item.id = dr.GetInt32(dr.GetValue([Ô]id[Ô]));
item.item = dr.GetString(dr.GetValue([Ô]item[Ô]));
item.descricao = dr.GetString(dr.GetValue([Ô]descricao[Ô]));
item.unidade = dr.GetString(dr.GetValue([Ô]unidade[Ô]));
item.quant = dr.GetInt32(dr.GetValue([Ô]quant[Ô]));
item.valor = dr.GetDouble(dr.GetValue([Ô]valor[Ô]));
pedido.Add(item);
}
}
}
fiz essa nova funcao .. e criei a classe com as propriedades publicas
public class PedidoItem
{
//id,item,descricao,unidade,quant,valor
public int id;
public string item;
public string descricao;
public string unidade;
public int quant;
public double valor;
agora fiz tudo direitinho e tal.. para compilar ele apresenta o seguinte erro ..
Cannot convert from [ô]Object [ô] to [ô]int [ô]
{
string vsql = [Ô]SELECT id,item,descricao,unidade,quant,valor FROM item_pedido where id_pedido = @idpedido[Ô];
SqlCommand sqlcmd = null;
if (this.conectar())
{
sqlcmd = new SqlCommand(vsql, objcon);
sqlcmd.Parameters.AddWithValue([Ô]idpedido[Ô], id);
using (SqlDataReader dr = sqlcmd.ExecuteReader())
{
if (dr.HasRows)
{
//id,item,descricao,unidade,quant,valor
List<PedidoItem> pedido = new List<PedidoItem>();
while (dr.Read())
{
PedidoItem item = new PedidoItem();
item.id = dr.GetInt32(dr.GetValue([Ô]id[Ô]));
item.item = dr.GetString(dr.GetValue([Ô]item[Ô]));
item.descricao = dr.GetString(dr.GetValue([Ô]descricao[Ô]));
item.unidade = dr.GetString(dr.GetValue([Ô]unidade[Ô]));
item.quant = dr.GetInt32(dr.GetValue([Ô]quant[Ô]));
item.valor = dr.GetDouble(dr.GetValue([Ô]valor[Ô]));
pedido.Add(item);
}
}
}
fiz essa nova funcao .. e criei a classe com as propriedades publicas
public class PedidoItem
{
//id,item,descricao,unidade,quant,valor
public int id;
public string item;
public string descricao;
public string unidade;
public int quant;
public double valor;
agora fiz tudo direitinho e tal.. para compilar ele apresenta o seguinte erro ..
Cannot convert from [ô]Object [ô] to [ô]int [ô]
é quase certeza que é no campo ID, qual o tipo de dados dele no banco?
int.
mais ele esta dando em todas as outras linhas .. descricao unidade etc.. etc..
sei la pq , eu criei uma classe separada .. outro arquivo chamado pedidoitem como esta la
e agora .. o codigo fico todo certinho .. agora quando fui compila ele apareceu isso ai do objeto
mais ele esta dando em todas as outras linhas .. descricao unidade etc.. etc..
sei la pq , eu criei uma classe separada .. outro arquivo chamado pedidoitem como esta la
e agora .. o codigo fico todo certinho .. agora quando fui compila ele apareceu isso ai do objeto
Caramba, me enganei, não é
[Ô]item.id = dr.GetInt32(dr.[txt-color=#e80000]GetValue[/txt-color]([Ô]id[Ô]));[Ô]
Mas sim:
item.id = dr.GetInt32(dr.[txt-color=#0000f0]GetOrdinal[/txt-color]([Ô]id[Ô]));
O mesmo para os outros, não é GetValue, e sim GetOrdinal. Eu não uso mais assim faz um tempo, uso métodos de extensão pra isso.
[Ô]item.id = dr.GetInt32(dr.[txt-color=#e80000]GetValue[/txt-color]([Ô]id[Ô]));[Ô]
Mas sim:
item.id = dr.GetInt32(dr.[txt-color=#0000f0]GetOrdinal[/txt-color]([Ô]id[Ô]));
O mesmo para os outros, não é GetValue, e sim GetOrdinal. Eu não uso mais assim faz um tempo, uso métodos de extensão pra isso.
Tópico encerrado , respostas não são mais permitidas