SELECT PARA UM ARRAY

LUISCAMPANA12 29/11/2012 11:47:08
#415029
a função precisa de retorno ... eu coloco o retorno dela como datatable mesmo ? ? ?
KERPLUNK 29/11/2012 11:51:59
#415032
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
KERPLUNK 29/11/2012 11:53:15
#415035
O importante é você ENTENDER o que estamos fazendo... Consegue entender o que está acontecendo?
LUISCAMPANA12 29/11/2012 11:54:06
#415036
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);




???????
KERPLUNK 29/11/2012 11:55:12
#415037
Isso mesmo. Mas o importante é: você está entendendo o que estamos fazendo?
LUISCAMPANA12 29/11/2012 12:08:56
#415040
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



KERPLUNK 29/11/2012 14:18:00
#415057
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:

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
LUISCAMPANA12 29/11/2012 14:58:09
#415061
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 ..
KERPLUNK 29/11/2012 17:19:56
#415079
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:

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.
LUISCAMPANA12 29/11/2012 17:36:03
#415082
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?
Página 2 de 3 [22 registro(s)]
Tópico encerrado , respostas não são mais permitidas