[Delphi] Ordinare record in una DBGrid.

Oggi parliamo di come ordinare i record contenuti in una taballa di un database e visualizzati in una DBGrid; avviamo quindi un nuovo progetto Delphi, inseriamo i componenti per l’accesso al nostro database, possiamo utilizzare quelle a noi più familiani, esempio dbExpress, ADO, InterBase o altri ancora; per semplicità in questo esempio utilizzerò dei componenti ADO presenti nella palette dbGo di Delphi.
Dopo aver settato i relativi parametri dei su indicati componenti, inseriamo sulla form una DBGrid, selezioniamola, andiamo sull’Object Inspector e nella palette Events troviamo l’evento OnMouseMovie, facciamo doppio click ed inseriamo il seguente codice:

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  cursore: TGridcoord;
begin
  cursore:= DBGrid1.MouseCoord(x, y);
  if cursore.y=0 then
    DBGrid1.Cursor:=crHandPoint
  else
    DBGrid1.Cursor:=crDefault;
end;

Tale codice provvede a far visualizzare il cursore di default se le coordinate Y sono diverse da zero altrimenti il cursore visualizzato sarà quello a forma di manina (appunto crHandPoint).

Il passo successivo è quello di inserire il codice per ordinare, in modo crescente o decrescente, i dati contenuti nella tabella in base all’intestazione della colonna cliccata, inoltre per tener traccia della colonna selezionata, faccio diventare il testo in grassetto, quindi ritorno nella sezione Events della DBGrid, cerco l’evento OnTitleClick, faccio doppio click e digito il seguente codice:

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+}
 const PreviousColumnIndex : integer = -1;
{$J-}
begin
  if DBGrid1.DataSource.DataSet is TCustomADODataSet then
    with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
  begin
    try
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
    except
    end;
      Column.title.Font.Style :=
      Column.title.Font.Style + [fsBold];
      PreviousColumnIndex := Column.Index;
      if (Pos(Column.Field.FieldName, Sort) = 1)
      and (Pos(’ DESC’, Sort)= 0) then
        Sort := Column.Field.FieldName + ‘ DESC’
      else
        Sort := Column.Field.FieldName + ‘ ASC’;
  end;
end;

A questo punto non ci resta che compilare ed avviare l’applicazione, se avete fatto tutto correttamente, vedrete che andando con il cursore del mouse sulle singole intestazioni delle varie colonne, il puntatore cambierà forma, diventando una manina, se cliccate su un’intestazione qualsiasi, otterrete l’ordinamento dei dati contenuti nella tabella in base alla colonna cliccata ed in modo ascendente o discendente oltrechè cambierà anche lo stile del font relativo all’intestazione della colonna cliccata.

Lascia una Risposta

Devi aver fatto il login per inviare un commento