Hola rotsen26.
A diferencia de los compañeros, yo había interpretado mal lo que estabas buscando, pensé que mostrabas una habitacion por vez.
Si son mostradas todas, podrías usar un procedimiento para actualizar los estados y llamarlo cuando sea necesario:
Código Delphi
[-]
procedure TForm1.ActualizarPaneles(Grid: TDBGrid);
var
i: Integer;
tc: TColor;
BM: Pointer;
begin
i:= 1;
BM := DBGrid1.DataSource.DataSet.GetBookmark;
Grid.DataSource.DataSet.DisableControls;
Grid.DataSource.DataSet.First;
try
while not Grid.DataSource.DataSet.Eof do
begin
case Grid.DataSource.DataSet.FieldByName('ESTADO').AsString[1] of
'D': tc:= clGreen; 'O': tc:= clRed; 'R': tc:= clYellow; end;
TPanel(FindComponent('Panel'+IntToStr(i))).Color := tc;
Grid.DataSource.DataSet.Next;
Inc(i)
end;
finally
Grid.DataSource.DataSet.GotoBookmark(BM);
Grid.DataSource.DataSet.FreeBookmark(BM);
Grid.DataSource.DataSet.EnableControls
end
end;
Un ejemplo de llamada:
Código Delphi
[-]
procedure TForm1.FormShow(Sender: TObject);
begin
ActualizarPaneles(DBGrid1);
end;
Otro:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
begin
ActualizarPaneles(DBGrid1);
end;
Para simplificar, en el procedimiento
ActualizarPaneles, asumo que los paneles se llaman: Panel1, Panel2, Panel3, ... (*)
Saludos.
(*)
Edito, me falto agregar: y el órden de los Paneles se corresponde al órden de las habitaciones en la tabla