SELECT PARA UM ARRAY
a função precisa de retorno ... eu coloco o retorno dela como datatable mesmo ? ? ?
Citação::
a função precisa de retorno ... eu coloco o retorno dela como datatable mesmo ? ? ?
Não, o retorno é List<PedidoItem>, esse retorno pode ser passado para o grid diretamente que vai preencher
O importante é você ENTENDER o que estamos fazendo... Consegue entender o que está acontecendo?
essa funcao eu criei dentro da minha class... vou dar um return list<pedidoitem> pro form ..
aii no form entao eu coloco
DGVDADOS.DATASOURCE = OBJ.CARREGA_NOVO_PEDIDO(ID);
???????
aii no form entao eu coloco
DGVDADOS.DATASOURCE = OBJ.CARREGA_NOVO_PEDIDO(ID);
???????
Isso mesmo. Mas o importante é: você está entendendo o que estamos fazendo?
bom , nao tudo .. entendi algumas partes. cara este sistema estou desenvolvendo ele da estaca zero.. eh um sistema para controle de pedidos . orçamentos .. e cadastro de clientes etc... estou aprendendo muito com vcs.. e com muito estudo ..
essa list que criamos eu vi q ela vai retornar o valor e jogar no meu datagrid .. tudo bem.!!
porém . a minha duvida eh a seguinte ..
VOLTANDO AO FORM
O MEU DATAGRID ESTA ZERADO.. SEM COLUNAS SEM NADA, AI EU VO NO CAMPO PESQUISA DIGITO O CODIGO DO PEDIDO .. ELE VAI PASSAR COMO PARAMETRO E VAI APRESENTAR NA TELA.. EU VOU LA .. EDITO .. SALVO E OK ..!! DPS Q EU SALVAR.. COMO EU IREI CRIAR UM NOVO REGISTRO SENDO QUE O MEU DATAGRID VAI ESTAR LIMPO NOVAMENTE .? ? ?
PQ ASSIM.. QUANDO EU COLOCO UM NOVO ITEM .. TEM 2 CAMPOS .. - ID - CODIGO .. E O BOTAO OK.!!
quando eu clico em ok .. via código eu faço o this.dgvpedido.rows.add([Ô]AKI EU VOU INSERINDO CONFORME AKELAS COLUNAS Q EU JA TINHA CRIADO VIA O EDIT COLUNS ..[Ô]) COMO AGORA EU TENHO Q PADRONIZAR PARA FAZER OS 2 .. ISSO Q TA MEIO COMPLICADO PRA ENTENDER
essa list que criamos eu vi q ela vai retornar o valor e jogar no meu datagrid .. tudo bem.!!
porém . a minha duvida eh a seguinte ..
VOLTANDO AO FORM
O MEU DATAGRID ESTA ZERADO.. SEM COLUNAS SEM NADA, AI EU VO NO CAMPO PESQUISA DIGITO O CODIGO DO PEDIDO .. ELE VAI PASSAR COMO PARAMETRO E VAI APRESENTAR NA TELA.. EU VOU LA .. EDITO .. SALVO E OK ..!! DPS Q EU SALVAR.. COMO EU IREI CRIAR UM NOVO REGISTRO SENDO QUE O MEU DATAGRID VAI ESTAR LIMPO NOVAMENTE .? ? ?
PQ ASSIM.. QUANDO EU COLOCO UM NOVO ITEM .. TEM 2 CAMPOS .. - ID - CODIGO .. E O BOTAO OK.!!
quando eu clico em ok .. via código eu faço o this.dgvpedido.rows.add([Ô]AKI EU VOU INSERINDO CONFORME AKELAS COLUNAS Q EU JA TINHA CRIADO VIA O EDIT COLUNS ..[Ô]) COMO AGORA EU TENHO Q PADRONIZAR PARA FAZER OS 2 .. ISSO Q TA MEIO COMPLICADO PRA ENTENDER
Da mesma maneira que você buscou os dados de um DataReader e colocou em uma List<T>, depois passou essa lista para um grid, você pode buscar novamente essa lista do DataSource do grid:
Digamos então que você queira gravar todos os Ãtens dessa lista, na situação, você buscou dados do banco, colocou no grid e depois editou Ãtens e adicionou novos. Nesse caso, o ideal é ter uma maneira de identificar o Ãtem novo, como por exemplo, não deixar o usuário determinar o ID, esse seria determinado no banco. Assim, identificamos: Ãtens no grid sem ID = Ãtens novos.
Bem, agora, precisamos gravar no banco esses Ãtens, fazendo update nos que já existem e insert nos novos, como proceder?
Levando em conta que Ãtens sem id = Ãtens novos, crie um método na sua classe PedidoItem, mais ou menos assim:
Essa rotina acima, grava a entidade no banco, seja inserção ou update.
No seu form, ainda lembrando da situação acima(inseriu e editou itens no grid), basta fazer algo assim:
E pronto, todos os Ãtens, novos ou alterados, vão ser gravados no banco. E ainda por cima essa mesma rotina, pode ser aproveitada em qualquer outro lugar que se queira fazer a mesma coisa(gravar Ãtens de pedido), como por exemplo, algum tipo de integração...
Além disso, esse conceito, se usado em todo o projeto, torna seu projeto com baixÃssima dependência, podendo ser aproveitado até mesmo em um WebService.
Qualquer dúvida post ae
List<PedidoItem> lista = (List<PedidoItem)MEUGRID,DataSource;
//Assim, a variável lista, vai conter a mesma lista que você passou para o grid e pode ser trabalhada:
PedidoItem novoItem = new PedidoItem();
novoItem.id = 3;
novoitem.Descricao = [Ô]bla bla bla[Ô];
[...]
lista.Add(novoItem);
MEUGRID.DataSource = lista;
Digamos então que você queira gravar todos os Ãtens dessa lista, na situação, você buscou dados do banco, colocou no grid e depois editou Ãtens e adicionou novos. Nesse caso, o ideal é ter uma maneira de identificar o Ãtem novo, como por exemplo, não deixar o usuário determinar o ID, esse seria determinado no banco. Assim, identificamos: Ãtens no grid sem ID = Ãtens novos.
Bem, agora, precisamos gravar no banco esses Ãtens, fazendo update nos que já existem e insert nos novos, como proceder?
Levando em conta que Ãtens sem id = Ãtens novos, crie um método na sua classe PedidoItem, mais ou menos assim:
public void Gravar()
SqlConnection cn = BuscaMinhaConexao(); // O ideal aqui é usar um bloco using, mas para brevidade, vamos deixar assim
if (this.Id = null || this.Id == 0)
{
using (SqlCommand cmd = new SqlCommand([Ô]Insert Into.....[Ô], cn)
{
cmd.Parameters.AddWithValue([Ô]Id[Ô], this.Id); //nesse caso, id pode ser uma subquery, ou uma outra rotina que busca o id automaticamente, de acordo com sua necessidade
cmd.Parameters.AddWithValue([Ô]Descricao[Ô], this.Descricao);
[...]
cmd.ExecuteNonQuery();
}
}
else
{
using (SqlCommand cmd = new SqlCommand([Ô]Update TABELA set descricao = @descricao where id = @id[Ô], cn)
{
cmd.Parameters.AddWithValue([Ô]Id[Ô], this.Id);
cmd.Parameters.AddWithValue([Ô]Descricao[Ô], this.Descricao);
[...]
cmd.ExecuteNonQuery();
}
}
Essa rotina acima, grava a entidade no banco, seja inserção ou update.
No seu form, ainda lembrando da situação acima(inseriu e editou itens no grid), basta fazer algo assim:
foreach (PedidoItem item in ((List<PedidoItem>)MEUGRID.DataSource))
{
item.Gravar();
}
E pronto, todos os Ãtens, novos ou alterados, vão ser gravados no banco. E ainda por cima essa mesma rotina, pode ser aproveitada em qualquer outro lugar que se queira fazer a mesma coisa(gravar Ãtens de pedido), como por exemplo, algum tipo de integração...
Além disso, esse conceito, se usado em todo o projeto, torna seu projeto com baixÃssima dependência, podendo ser aproveitado até mesmo em um WebService.
Qualquer dúvida post ae
cara.. muito bom .. essa explicação .. me ajudou a tirar n duvidas q eu tinha antes..ref .. a n assuntos isso eu posso aplicar para um monte de coisas..
agora.. temos um problema , na minha tela de pedidos nao eh uma coisa assim como está acima .. o ideal seria eu lhe mostrar o meu projeto para vc dar uma olhada e entender minha duvida ref. ao grid..acho q este exemplo em cima eu nao colocaria no grid.. pois ele nao contem nenhum dado.. e logo após eu vou inserindo esse id q eu disse q o usuario vai inserir eh o id do produto.. aii oq ele faz.. o usuario digita o id do produto , em seguida a quantidade .. eu faço o Rows.Add(uma variavel q conta os itens , o id , a descricao , e a quantidade. ) .. todos esses itens eu faço uma pesquisa na classe e soh retorno esse valor.. por exemplo a descricao o usuario nao digita , mais pelo id do item a função retorna a descricao do item e o valor e acrescenta na grid.. VOU TENTAR FAZER O PASSO A PASSO ..
LOGIN - USUARIO E SENHA BLZ...
FRMPRINCIPAL .. BOTAO PEDIDOS.
FORM DE PEDIDOS- NOME . CONTATO . TELEFONE . EMAIL ....... ......
EM BAIXO DENTRO DE UMA GROUP BOX. = ITENS DO PEDIDO -
ITEM | 01 | QTD | 10 | . |OK|
QUANDO CLICAR NO OK .. -> INSERE UMA NOVA LINHA NO DGVPEDIDO .. FICARIA ASSIM
contador | item | descricao | QUANTIDADE | VALOR
todos os valores eu peguei através de funcoes e retornei inserindo na grid.. e faço a soma em uma label no fim do form ..
entretanto... no caso estou usando sempre arrays .... entao para inserir o registro sem problemas.. eu jogo no array faço o foreach e ele insere os dados do grid normal ..
o problema vem no update .. -- quando eu faço o UPDATE ele carrega os outras colunas e substitui akelas que estão pré criadas quando vc abre o form ..
ENTAO NO CASO EM QUE VC ESTÃ ME PASSANDO .. QUANDO O FORM INICIA MEU GRID RECEBE UMA LIST.!
E ENTAO QUANDO EU CLICAR EM OK.. ELE VAI PREENCHENDO A LIST E LOGO APLICANDO AO GRID OS VALORES DA LIST..!
QUANDO EU FIZER O UPDATE ELE INSERE NESSA MESMA LIST . OS VALORES QUE VIERAM DA CLASSE.
EH MUITO CONFUSO PRA MIN AGORA.. DESCULPE MESMOO CARA POR ESTAR TE AMOLANDO DESSA FORMA.
se possivel algum team viewer .. ou sei la algum msn para q eu possa te mostrar melhor o meu projeto tbm seria legal ..
Eh isso ai mais mesmo assim ..MUITO OBRIGADO DESDE JA ..
agora.. temos um problema , na minha tela de pedidos nao eh uma coisa assim como está acima .. o ideal seria eu lhe mostrar o meu projeto para vc dar uma olhada e entender minha duvida ref. ao grid..acho q este exemplo em cima eu nao colocaria no grid.. pois ele nao contem nenhum dado.. e logo após eu vou inserindo esse id q eu disse q o usuario vai inserir eh o id do produto.. aii oq ele faz.. o usuario digita o id do produto , em seguida a quantidade .. eu faço o Rows.Add(uma variavel q conta os itens , o id , a descricao , e a quantidade. ) .. todos esses itens eu faço uma pesquisa na classe e soh retorno esse valor.. por exemplo a descricao o usuario nao digita , mais pelo id do item a função retorna a descricao do item e o valor e acrescenta na grid.. VOU TENTAR FAZER O PASSO A PASSO ..
LOGIN - USUARIO E SENHA BLZ...
FRMPRINCIPAL .. BOTAO PEDIDOS.
FORM DE PEDIDOS- NOME . CONTATO . TELEFONE . EMAIL ....... ......
EM BAIXO DENTRO DE UMA GROUP BOX. = ITENS DO PEDIDO -
ITEM | 01 | QTD | 10 | . |OK|
QUANDO CLICAR NO OK .. -> INSERE UMA NOVA LINHA NO DGVPEDIDO .. FICARIA ASSIM
contador | item | descricao | QUANTIDADE | VALOR
todos os valores eu peguei através de funcoes e retornei inserindo na grid.. e faço a soma em uma label no fim do form ..
entretanto... no caso estou usando sempre arrays .... entao para inserir o registro sem problemas.. eu jogo no array faço o foreach e ele insere os dados do grid normal ..
o problema vem no update .. -- quando eu faço o UPDATE ele carrega os outras colunas e substitui akelas que estão pré criadas quando vc abre o form ..
ENTAO NO CASO EM QUE VC ESTÃ ME PASSANDO .. QUANDO O FORM INICIA MEU GRID RECEBE UMA LIST.!
E ENTAO QUANDO EU CLICAR EM OK.. ELE VAI PREENCHENDO A LIST E LOGO APLICANDO AO GRID OS VALORES DA LIST..!
QUANDO EU FIZER O UPDATE ELE INSERE NESSA MESMA LIST . OS VALORES QUE VIERAM DA CLASSE.
EH MUITO CONFUSO PRA MIN AGORA.. DESCULPE MESMOO CARA POR ESTAR TE AMOLANDO DESSA FORMA.
se possivel algum team viewer .. ou sei la algum msn para q eu possa te mostrar melhor o meu projeto tbm seria legal ..
Eh isso ai mais mesmo assim ..MUITO OBRIGADO DESDE JA ..
Que é isso, imagina! Estou aqui para ajudar! é um prazer!
Se o grid estiver vazio e você precisa inserir Ãtens, é tão simples quanto. Basta criar uma lista VAZIA e adicionar o Ãtem nela, em seguida, passe a lista(já com o novo Ãtem) para o grid da mesma forma:
Agora, você já tem algo no grid. No seu caso, se o usuário preenche o Id, a solução é ao gravar, fazer a procura desse Id ao invés de validar se ele está branco ou null. Faça essa procura(Select count(0) from tabela where Id = @SEUID), se existir algum, faça update se não, faça insert, da mesma maneira.
Quanto à fazer um acesso remoto, talvez hoje à noite eu consiga. Meu tempo anda meio limitado, mas vou ajudando aqui conforme vou podendo.
Se o grid estiver vazio e você precisa inserir Ãtens, é tão simples quanto. Basta criar uma lista VAZIA e adicionar o Ãtem nela, em seguida, passe a lista(já com o novo Ãtem) para o grid da mesma forma:
List<ItemPedido> lista = new List<ItemPedido>();
ItemPedido novoItem = new ItemPedido;
novoItem.Id = txtId.Text;
novoItem.Txt = txtDescricao.Text;
[...]
lista.Add(novoItem);
MEUGRID.DataSource = lista;
Agora, você já tem algo no grid. No seu caso, se o usuário preenche o Id, a solução é ao gravar, fazer a procura desse Id ao invés de validar se ele está branco ou null. Faça essa procura(Select count(0) from tabela where Id = @SEUID), se existir algum, faça update se não, faça insert, da mesma maneira.
Quanto à fazer um acesso remoto, talvez hoje à noite eu consiga. Meu tempo anda meio limitado, mas vou ajudando aqui conforme vou podendo.
blz.. mais e pra min definir as colunas do grid como faria ?
deixa naquele modo de pré carregamento ??
como eu crio as colunas .. os titulos da coluna pra inserir no grid quando ele estiver fazendo um novo registr o?
deixa naquele modo de pré carregamento ??
como eu crio as colunas .. os titulos da coluna pra inserir no grid quando ele estiver fazendo um novo registr o?
Tópico encerrado , respostas não são mais permitidas