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

Travar celula do grid...


robinhocne

Pergunta

Olá pessoal..estou fazendo o seguinte procedimento no ColExit do DbGrid(DbgGrade)

procedure TFrmNovProdutos.DbgGradeColExit(Sender: TObject);
begin
  for a:=0 to DbgGrade.Columns.count-1 do
     begin

        if DbgGrade.SelectedIndex = 01 then
          begin

            if DbgGrade.Fields[01].AsString = '' then
              begin
                ShowMessage('Código da cor é Obrigatório !');
                exit;
              end;

            ConsultaRegistros('Cores', 'Codigo, Descricao', 'Codigo =' + DbgGrade.Fields[01].AsString);
            if DtmLoja.QryLoja.RecordCount = 0 then
              begin
                DbgGrade.Fields[01].AsString := '';
                ShowMessage('Cor não Cadastrada !');
              end
              else
              begin
                DbgGrade.Fields[01].AsString := StrZero(LeDados('Codigo'), 3);
                DbgGrade.Fields[02].AsString := LeDados('Descricao');
              end;

          end;

     end;

end;

mas eu que assim que quando não for digitado nada nesse campo ele dá a messagem como no procedimento mesmo, mas que volte para a mesma celula sem pular para a proxima celula..como faço isso ?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
quando não for digitado nada nesse campo ele dá a messagem como no procedimento mesmo, mas que volte para a mesma celula sem pular para a proxima celula..como faço isso ?

Veja se assim funciona

procedure TFrmNovProdutos.DbgGradeColExit(Sender: TObject);
begin
  for a:=0 to DbgGrade.Columns.count-1 do
     begin

        if DbgGrade.SelectedIndex = 1 then
          begin

            if DbgGrade.Fields[1].AsString = '' then
              begin
                ShowMessage('Código da cor é Obrigatório !');
                DbgGrade.SelectedIndex := 1; 
                exit;
              end;

            ConsultaRegistros('Cores', 'Codigo, Descricao', 'Codigo =' + DbgGrade.Fields[01].AsString);
            if DtmLoja.QryLoja.RecordCount = 0 then
              begin
                DbgGrade.Fields[1].AsString := '';
                ShowMessage('Cor não Cadastrada !');
                DbgGrade.SelectedIndex := 1; 
              end
              else
              begin
                DbgGrade.Fields[1].AsString := StrZero(LeDados('Codigo'), 3);
                DbgGrade.Fields[2].AsString := LeDados('Descricao');
              end;

          end;

     end;

end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
quando não for digitado nada nesse campo ele dá a messagem como no procedimento mesmo, mas que volte para a mesma celula sem pular para a proxima celula..como faço isso ?

Veja se assim funciona

procedure TFrmNovProdutos.DbgGradeColExit(Sender: TObject);
begin
  for a:=0 to DbgGrade.Columns.count-1 do
     begin

        if DbgGrade.SelectedIndex = 1 then
          begin

            if DbgGrade.Fields[1].AsString = '' then
              begin
                ShowMessage('Código da cor é Obrigatório !');
                DbgGrade.SelectedIndex := 1; 
                exit;
              end;

            ConsultaRegistros('Cores', 'Codigo, Descricao', 'Codigo =' + DbgGrade.Fields[01].AsString);
            if DtmLoja.QryLoja.RecordCount = 0 then
              begin
                DbgGrade.Fields[1].AsString := '';
                ShowMessage('Cor não Cadastrada !');
                DbgGrade.SelectedIndex := 1; 
              end
              else
              begin
                DbgGrade.Fields[1].AsString := StrZero(LeDados('Codigo'), 3);
                DbgGrade.Fields[2].AsString := LeDados('Descricao');
              end;

          end;

     end;

end;

abraço

Hum...não deu certo...ele continua pulando para a próxima celula

Link para o comentário
Compartilhar em outros sites

  • 0

Voce está usando o evento OnColExit ... o certo seria o evento OnKeyPress

exemplo:

Modifique para o seu uso

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
   if (Key = #9) then
      if not (ActiveControl is TDBGrid) then
         begin
            Key := #0;
            Perform(WM_NEXTDLGCTL, 0, 0);
         end
      else if (ActiveControl is TDBGrid) then
         with TDBGrid(ActiveControl) do
         if selectedindex < (fieldcount) then
            begin
               //
               DtmLoja.QryLoja.Edit;

               case selectedindex of
                1 : XGrava := XGrava + 1;
                2 : DtmLoja.QryLojaNIVEL.Value := 'C';
                3 : begin
                        // Sem valor fica na mesma celula
                        if DtmLoja.QryLojaTIPO.Value = '' then
                           selectedindex := 3
                    end;
                end;

            end
         else
            begin
               DtmLoja.QryLoja.Post;
               DtmLoja.QryLoja.Last;
               DtmLoja.QryLoja.Append;
               selectedindex := 0;
            end;

end;

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...