DiabloX3 Postado Maio 18, 2009 Denunciar Share Postado Maio 18, 2009 (editado) Pessoal, procurei por multiselect no fórum mas os tópicos não tratam exatamente do que preciso.Necessito do seguinte: o cliente seleciona as linhas que deseja no DBGrid segurando o ctrl. Até aí tudo bem, é só deixar gdMultiSelect = TrueAgora eu tenho um botão Add pra pegar os registros selecionados pelo usuário e inserir em uma outra DBGrid ao lado.Pensei em aproveitar o código do evento OnDrawColumnCell mas não tive êxitoif grdImpressos.SelectedRows.Count > 0 then begin if (gdSelected in state) then // Se o estado da célula é selecionado begin . . . endobs: para (gdSelected in state) [nesse caso] declarei uma var State: TGridDrawState senão conseguia compilarAlguma sugestão?abraço Editado Maio 18, 2009 por DiabloX3 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 18, 2009 Denunciar Share Postado Maio 18, 2009 Agora eu tenho um botão Add pra pegar os registros selecionados pelo usuário e inserir em uma outra DBGrid ao lado.Pensei em aproveitar o código do evento OnDrawColumnCell mas não tive êxitoAlguma sugestão?A sugestão é estaprocedure TForm1.Button1Click(Sender: TObject); var cont : integer; begin With Dbgrid1 do Begin for cont:= 0 to Pred(SelectedRows.Count) do Begin Datasource.Dataset.Bookmark:= SelectedRows[cont]; . . . end; end; end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DiabloX3 Postado Maio 19, 2009 Autor Denunciar Share Postado Maio 19, 2009 (editado) Jhonas, tentei de todas as formas aqui, mas é um pouco mais complicado. Explico.Tenho uma DBGrid chamada grdImpressos e logo abaixo uma outra chamada grdCarregamento e no meio um botão adicionarQuando clicado, ele deve selecionar o registro da grdImpressos que contém vários itens por de trás. OK, agora preciso passar da tabela de ITENS_PEDIDO para ITENS_CARREGAMENTO. Se fosse do modo "seleciona 1 e adiciona" dava pra fazer tranquilo. O problema é os registros múltiplos.A cada clique no Adicionar então eu devo pegar a linha selecionada (Pedido) e os itens que a ele fizer parte (itens_pedido)if grdImpressos.SelectedRows.Count > 0 then begin for cont := 0 to Pred(grdImpressos.SelectedRows.Count) do begin // aqui eu tive que dar um select na query referente ao dsCarregamento porque senão quando saía // da linha de baixo ele dava operation on a closed dataset. dsCarregamento.Dataset.Bookmark := grdImpressos.SelectedRows[cont]; sql := '(VEN_PED_COD = '+IntToStr(qryImpressosVEN_PED_COD.AsInteger)+')'; qryItensPedido.Close; qryItensPedido.SQL.Clear; qryItensPedido.SQL.Add('SELECT * FROM ITENS_PEDIDO_VENDAS WHERE' +sql); qryItensPedido.Open; Aqui eu selecionei o pedido com os itens que pertencem a ele. Preciso agora passar item a item para a tabela de ITENS_CARREGAMENTO O meu problema é que dando Next ou não, colocando while not "datasource".Eof ou "qry".Eof, independente do que usei está dando erro de FOREIGN KEY na tabela de ITENS_CARREGAMENTO, pois não deve estar passando para o próximo registro. //INSERI OS ITENS DO CARREGAMENTO qryItensCarrega.Close; qryItensCarrega.ParamByName('P_CAR_COD').AsInteger := StrToInt(lblCod.Caption); qryItensCarrega.ParamByName('P_PED_COD').AsInteger := qryItensPedido.FieldByName('VEN_PED_COD').AsInteger; qryItensCarrega.ParamByName('P_PRO_CODIGO').AsInteger := qryItensPedido.FieldByName('PRO_CODIGO').AsInteger; qryItensCarrega.ParamByName('P_QTD').AsFloat := qryItensPedido.FieldByName('ITE_QTD').AsFloat; qryItensCarrega.ParamByName('P_UNIT').AsFloat := qryItensPedido.FieldByName('ITE_VALOR_UNIT').AsFloat; qryItensCarrega.ParamByName('P_TIPO').AsString := qryItensPedido.FieldByName('ITE_TIPO').AsString; qryItensCarrega.ExecSQL; end;Como que faço pra passar pro próximo item do registro selecionado? Daí após isso deve selecionar o próximo Pedido (que selecionei com o ctrl) e os itens dele e fazer a mesma coisaabraço Editado Maio 19, 2009 por DiabloX3 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 19, 2009 Denunciar Share Postado Maio 19, 2009 O meu problema é que dando Next ou não, colocando while not "datasource".Eof ou "qry".Eof, independente do que usei está dando erro de FOREIGN KEY na tabela de ITENS_CARREGAMENTO,FOREIGN KEY é usado para fazer referênca a 2 tabelas, o campo de uma tabela tambem deve existir na outrahttp://en.wikipedia.org/wiki/Foreign_keyComo que faço pra passar pro próximo item do registro selecionado?este comando já está fazendo issodsCarregamento.Dataset.Bookmark := grdImpressos.SelectedRows[cont];OBS: A select dentro de um FOR vai monstrar o resultado somente quando chegar ao fim dos registros selecionadosabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
DiabloX3
Pessoal, procurei por multiselect no fórum mas os tópicos não tratam exatamente do que preciso.
Necessito do seguinte: o cliente seleciona as linhas que deseja no DBGrid segurando o ctrl. Até aí tudo bem, é só deixar gdMultiSelect = True
Agora eu tenho um botão Add pra pegar os registros selecionados pelo usuário e inserir em uma outra DBGrid ao lado.
Pensei em aproveitar o código do evento OnDrawColumnCell mas não tive êxito
obs: para (gdSelected in state) [nesse caso] declarei uma var State: TGridDrawState senão conseguia compilar
Alguma sugestão?
abraço
Editado por DiabloX3Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.