Ir para conteúdo
Fórum Script Brasil
  • 0

gdMultiSelect + btnAdd


DiabloX3

Pergunta

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

if grdImpressos.SelectedRows.Count > 0 then
 begin
 if (gdSelected in state) then  // Se o estado da célula é selecionado
  begin
   .
   .
   .
  end

obs: para (gdSelected in state) [nesse caso] declarei uma var State: TGridDrawState senão conseguia compilar

Alguma sugestão?

abraço

Editado por DiabloX3
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
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

Alguma sugestão?

A sugestão é esta

procedure 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

Link para o comentário
Compartilhar em outros sites

  • 0

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 adicionar

Quando 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 coisa

abraço

Editado por DiabloX3
Link para o comentário
Compartilhar em outros sites

  • 0

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 outra

http://en.wikipedia.org/wiki/Foreign_key

Como que faço pra passar pro próximo item do registro selecionado?

este comando já está fazendo isso

dsCarregamento.Dataset.Bookmark := grdImpressos.SelectedRows[cont];

OBS: A select dentro de um FOR vai monstrar o resultado somente quando chegar ao fim dos registros selecionados

abraço

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...