Utilizar o FOR em um dbGrid

Delphi

10/12/2014

Boa tarde a todos!!!

estou como seguinte problema, tenho um dbgrid que mostra todos os horários da minha agenda, oque estou querendo fazer é o seguinte, selecionar dois horários ao mesmo tempo pra fazer o agendamento, no primeiro horário gravo os dados do agendamento e o segundo horário quero tornar inativo pra que ninguém marque nada nele. Fiz o seguinte :
  with DBGrid1.DataSource.DataSet do
    showmessage(inttostr(DBGrid1.SelectedRows.Count));
    for i := 0 to DBGrid1.SelectedRows.Count-1 do
      begin
        if DBGrid1.SelectedRows.Count = 1 then
          begin
            XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
          end
        else
          begin
            xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
          end;
      end;
  end;


oque eu quero é identificar a primeira linha pra fazer uma determinada ação e depois que ele vá pra próxima linha pra fazer as outras ações que eu definir.

Desde já agradeço a atenção de todos...

Junior
Lindolfo Junior

Lindolfo Junior

Curtidas 0

Melhor post

Douglas

Douglas

10/12/2014

Olá Lindolfo, tudo bem?

Vamos lá! Entendi sua situação. A primeira coisa a fazer é, configure o seu dbgrid para selecionar múltiplas linhas na tabela. Vá até as propriedades do seu dbgrid, no Object Inspector localize a opção options e clique sobre o sinal de "+" para abrir um leque de opções, e por fim mude a propriedade dgMultiSelect para true.

Agora, vamos implementar o código abaixo:

  with DBGrid1.DataSource do
  begin
    for I := 0 to DBGrid1.SelectedRows.Count - 1 do
    begin
        DataSet.GotoBookmark(Pointer(DBGrid1.SelectedRows[I]));
        if DBGrid1.SelectedRows.IndexOf(DBGrid1.SelectedRows[I]) = 0 then // Identifica a primeira linha selecionada.
        begin
          ShowMessage(DataSet.FieldByName('horario').AsString);
        end
        else// Identifica as demais linhas selecionadas.
        begin
          ShowMessage('Inativar Segundo Horario');
        end;

    end;
  end;


Bem, neste momento é só você adaptar o código acima para a sua necessidade. Espero que tenha ficado claro e Bons Códigos!
GOSTEI 1

Mais Respostas

Lindolfo Junior

Lindolfo Junior

10/12/2014

Olá Lindolfo, tudo bem?

Vamos lá! Entendi sua situação. A primeira coisa a fazer é, configure o seu dbgrid para selecionar múltiplas linhas na tabela. Vá até as propriedades do seu dbgrid, no Object Inspector localize a opção options e clique sobre o sinal de "+" para abrir um leque de opções, e por fim mude a propriedade dgMultiSelect para true.

Agora, vamos implementar o código abaixo:

  with DBGrid1.DataSource do
  begin
    for I := 0 to DBGrid1.SelectedRows.Count - 1 do
    begin
        DataSet.GotoBookmark(Pointer(DBGrid1.SelectedRows[I]));
        if DBGrid1.SelectedRows.IndexOf(DBGrid1.SelectedRows[I]) = 0 then // Identifica a primeira linha selecionada.
        begin
          ShowMessage(DataSet.FieldByName('horario').AsString);
        end
        else// Identifica as demais linhas selecionadas.
        begin
          ShowMessage('Inativar Segundo Horario');
        end;

    end;
  end;


Bem, neste momento é só você adaptar o código acima para a sua necessidade. Espero que tenha ficado claro e Bons Códigos!


Douglas funcionou perfeito, a única coisa foi que deu um erro nessa linha : DataSet.GotoBookmark(Pointer(DBGrid1.SelectedRows[I])); e corrigi pra : dbGrid1.DataSource.DataSet.GotoBookmark(Pointer(DBGrid1.SelectedRows[I])); e pronto, funcionou exatamente como eu queria...

Muito obrigado pela ajuda

JR
GOSTEI 0
Lindolfo Junior

Lindolfo Junior

10/12/2014

Douglas voltei!!! na verdade deu certo quando é selecionado dois horários, mas quando eu seleciono somente um, não esta funcionando...heheheh sabe me dizer porque?
GOSTEI 0
Lindolfo Junior

Lindolfo Junior

10/12/2014

desculpa, mas já consegui resolver... vlw!!!!
GOSTEI 0
Douglas

Douglas

10/12/2014

Olá Lindolfo, legal que funcionou. Bons códigos!
GOSTEI 0
POSTAR