Preencher StringGrid
Bom dia, preciso fazer algo semelhante a esse link,
porém gostaria de exibir todos os horários de 00:00 até 23:30 (30 em 30
minutos), e caso algum horário esteja preenchido exibir um campo
determinado.
No exemplo do tópico, ele exibe apenas os horários preenchidos, eu gostaria de exibir todos (preenchidos e não preenchidos)
Alguem teria alguma idéia de como fazer?
No exemplo do tópico, ele exibe apenas os horários preenchidos, eu gostaria de exibir todos (preenchidos e não preenchidos)
Alguem teria alguma idéia de como fazer?
Fábio Cruz
Curtidas 0
Respostas
Wilson Junior
29/09/2010
Faça uma consulta (SQL) dos seus horários, após faça um loop para incluir os horários (com o intervalo desejado), dentro do loop, para cada intervalo, faça um LOCATE na sua consulta, sendo assim, você irá incluir o horário do intervalo e se existir o registro você o inclui o conteúdo
Exemplo:
Horá Conteúdo
----- --------
00:00
00:30
01:00
01:30 Paciente João { Aqui o LOCATE encontrou }
02:00
02:30
03:00
03:30
04:00 Reunião { Aqui o LOCATE encontrou }
...
Espero ter colaborado.
Exemplo:
Horá Conteúdo
----- --------
00:00
00:30
01:00
01:30 Paciente João { Aqui o LOCATE encontrou }
02:00
02:30
03:00
03:30
04:00 Reunião { Aqui o LOCATE encontrou }
...
Espero ter colaborado.
GOSTEI 0
Fábio Cruz
29/09/2010
então para cada horário teria um locate na tabela?
Algo semelhante a isso?
Obs: Coloquei table para simplificar, mas irei utilizar ClientDataSet
Algo semelhante a isso?
While not Table.Eof do begin for i = 0 to i >= table.RecordCount begin StringGrid1.Cells[0, i] := '0:00'; if (StringGrid1.Cells[0, i] = TableHora.asstring) then StringGrid1.Cells[1, i] := TableAssunto.Asstring; ...
Obs: Coloquei table para simplificar, mas irei utilizar ClientDataSet
GOSTEI 0
Eriley Barbosa
29/09/2010
Acho que é mais ou menos isso que você quer baseado no tópico que passou:
procedure TForm1.FormShow(Sender: TObject);
var
i: Integer;
hora: string;
begin
hora := '23:30';
//Preenche a primeira coluna com os horarios
for i := 1 to 48 do
begin
hora := FormatDateTime('hh:mm',
IncMinute(StrtoDateTime(FormatDateTime('hh:mm',StrToDateTime(hora))), 30));
GradeEspera.Cells[0, i] := hora;
end;
while not qSalaEspera.Eof do
begin
for i := 1 to GradeEspera.RowCount - 1 do
begin
//Se a hora for igual a que esta na coluna lança na grade
if Copy(qSalaEspera.FieldByName('HORA').AsString, 1, 5) = GradeEspera.Cells[0, i] then
begin
GradeEspera.Cells[1, i] := qSalaEspera.FieldByName('CLIENTE').AsString + ' (' +
qSalaEspera.FieldByName('ANIMAL').AsString + ') - ' +
qSalaEspera.FieldByName('SIGLA').AsString +
qSalaEspera.FieldByName('FUNCIONARIO').AsString;
//Abandona o laço
Break;
end;
end;
//Vai para o proximo registro
Next;
end;
}
end;
var
i: Integer;
hora: string;
begin
hora := '23:30';
//Preenche a primeira coluna com os horarios
for i := 1 to 48 do
begin
hora := FormatDateTime('hh:mm',
IncMinute(StrtoDateTime(FormatDateTime('hh:mm',StrToDateTime(hora))), 30));
GradeEspera.Cells[0, i] := hora;
end;
while not qSalaEspera.Eof do
begin
for i := 1 to GradeEspera.RowCount - 1 do
begin
//Se a hora for igual a que esta na coluna lança na grade
if Copy(qSalaEspera.FieldByName('HORA').AsString, 1, 5) = GradeEspera.Cells[0, i] then
begin
GradeEspera.Cells[1, i] := qSalaEspera.FieldByName('CLIENTE').AsString + ' (' +
qSalaEspera.FieldByName('ANIMAL').AsString + ') - ' +
qSalaEspera.FieldByName('SIGLA').AsString +
qSalaEspera.FieldByName('FUNCIONARIO').AsString;
//Abandona o laço
Break;
end;
end;
//Vai para o proximo registro
Next;
end;
}
end;
GOSTEI 0
Wilson Junior
29/09/2010
Seria algo mais ou menos assim
Espero ter colaborado.
Const
INTERVALO = '00:30:00';
var
Hora: TTime;
Linha: integer;
begin
{ Primeira linha para o título e a segunda linha em branco }
StringGrid1.RowCount := 2;
Linha := 1;
Hora := StrToTime( '00:00:00' );
while Hora <= StrToTime( '23:59:59' ) do
begin
StringGrid1.Cells[0, Linha] := TimeToStr( Hora );
if ClientDataSet.Locate( 'CampoHora', Hora, [] ) then
StringGrid1.Cells[1, Linha] := ClientDataSet.FieldByName('CampoConteudo').AsString
;
Hora := Hora + StrToTime( INTERVALO );
Inc( Linha );
StringGrid1.RowCount := Linha;
end;
end;
Espero ter colaborado.
GOSTEI 0
Eriley Barbosa
29/09/2010
Só para constar, no meu exemplo eu coloquei colcount =2 e rowcount = 49.
GOSTEI 0
Fábio Cruz
29/09/2010
Vou verificar e qualquer coisa posto aqui.
Obrigado.
Obrigado.
GOSTEI 0
Fábio Cruz
29/09/2010
Muito obrigado ao Eriley e ao Wilson, ambos códigos chegaram ao resultado.
Muito Obrigado.
Muito Obrigado.
GOSTEI 0