Esse componente está associado a um arquivo XML e possui os seguintes Fields:
Em nosso formulário principal adicionaremos dois componentes importantes para a ligação do LiveBindings:
· TDataSource:
Ø Name: DSAGENDA;
Ø Dataset: DM.CDSAGENDA; (Declare em Uses: uDM).
· TBindScopeDB:
Ø Name: BSDBAGENDA;
Ø Data Source: DSAGENDA;
Agora, vamos montar nosso Grid em base de nosso banco de dados. Adicione um componente da classe TStringGrid e altere as seguintes propriedades:
Ø Name: SGAGENDA;
Ø Align: alBottom;
Ø Height: 180;
Ø LiveBindings > Link to DBDataSource: BSDBAGENDA;
Ø DisableFocusEffect: False;
Ø MouseTracking: True;
Ø ShowSelectedCell: False;
Dê um duplo clique na propriedade Columns e no editor clique com o botão direito e Add All Fields:
Todos os Fields serão adicionados:
Selecione o Field IDAGENDA e o apague.
Obs.: Apenas colocar a propriedade Visible: False criará uma confusão no Grid, pois este Field não deixará de ser visível.
Sua StringGrid ficará com a seguinte aparência:
Diferente da VCL, a TStringGrid do Firemonkey ainda necessita de vários códigos para que possa ser organizada e para que fique de forma apresentável.
Sendo assim, para que possamos fazer o alinhamento de cada Header (Título) teremos de programar a seguinte procedure. Declare no campo private do formulário:
procedure Alinhamento_dos_Cabecalhos;
Clique na linha declarada acima e aperte em seu teclado Ctrl + Shift + C:
procedure TFmkPrincipal.Alinhamento_dos_Cabecalhos;
var
i: Integer;
header: THeader;
headeritem: THeaderItem;
begin
header := THeader(SGAGENDA.FindStyleResource('header'));
for i := 0 to header.ChildrenCount - 1 do
begin
headeritem := THeaderItem(header.Children[i]);
headeritem.TextAlign := TTextAlign(0);
headeritem.Font.Style := [TFontStyle.fsBold];
end;
end;
Assim, em tempo de execução a SGAGENDA estará com os títulos centralizados e em negrito.
Para que possamos realizar a configuração das células da SGAGENDA iremos criar a seguinte procedure no campo private do FmkPrincipal:
procedure GridCellApplyStyleLookup( Sender: TObject );
Clique na linha declarada acima e aperte em seu teclado Ctrl + Shift + C:
procedure TFmkPrincipal.GridCellApplyStyleLookup( Sender: TObject );
var
TC: TTextCell;
begin
if ( Sender <> nil ) and ( Sender is TTextCell ) then
begin
TC := TTextCell( Sender );
TC.FontFill.Color := claBlack;
TC.Font.Family := 'Times New Roman';
//TC.Font.Style := [ TFontStyle.fsBold];
TC.Font.Size := 12;
TC.TextAlign := TTextAlign(0);
end;
end;
Desta forma nós determinamos as características das células, indicando a fonte e o alinhamento.
Agora, vamos implantar a procedure que chamará à execução as características das células. No campo Public do FmkPrincipal:
procedure Mudando_as_Células;
Clique na linha declarada acima e aperte em seu teclado Ctrl + Shift + C:
Obs.: Podemos notar um pequeno detalhe que é novidade no Delphi. A possibilidade de se colocar acentos e cedilhas nos nomes de procedures e functions. Ex: procedure Mudando_as_Células;
procedure TFmkPrincipal.Mudando_as_Células;
var
Col, Row: Integer;
CellCtrl: TStyledControl;
begin
for Col := 0 to SGAGENDA.ColumnCount - 1 do
begin
for Row := 0 to SGAGENDA.RowCount - 1 do
begin
CellCtrl := SGAGENDA.Columns[ Col ].CellControlByRow( Row );
if ( CellCtrl <> nil ) and ( CellCtrl is TTextCell ) then
begin
TTextCell( CellCtrl ).OnApplyStyleLookup :=
GridCellApplyStyleLookup;
end;
end;
end;
end;
Esta procedure tem por objetivo passar nossas determinações para cada célula do SGAGENDA.
Agora, para que em tempo de execução a StringGrid adquira as características, vamos chamar no evento OnCreate do FmkPrincipal o seguinte comando:
procedure TFmkPrincipal.FormCreate(Sender: TObject);
begin
SGAGENDA.ReadOnly := True;
Mudando_as_Células;
Alinhamento_dos_Cabecalhos;
end;
Como meu objetivo na StringGrid SGAGENDA é somente de fornecer leitura dos dados, eu passei o comando de que SGAGENDA.ReadOnly := True (Verificar Evento OnCreate do formulário).
Obs1: Ao acessar o Object Inspector da SGAGENDA perceberemos que existe a propriedade ReadOnly e que ela está marcada como True, entretanto, ao compilar os dados o Delphi XE2 pode não reconhecer esse código e a StringGrid continuará em modo de edição.
Obs2: Após o evento AfterInsert do CDSAGENDA (TClientDataSet) é preciso adicionar a linha de comando chamando a procedure Mudando_as_Células. Isso deve ser feito para que toda a organização realizada na Grid seja mantida. Caso Contrário, a Grid ficaria assim ao inserir um novo registro: