Карта сайтаСсылкиКонтакты

Как сортировать столбцы DBGrid, создание/удаление

PDF Печать
Статьи

Вы отображаете данные в столбцах DBGrid и позволяете сортировать их, щелкая по заголовку столбца.

Вам нужны эти объекты:

  • TForm - Form1
  • TTable - Table1, соединенная с Вашей таблицей
  • TDataSource - DataSource1
  • TDBGrid - DBGrid1

Создайте вторичные индексы для требуемых столбцов.

В конце программы Вы должны уничтожить эти индексы.

Сортировать столбцы DBGrid, нажимая на заголовке столбца.

Title-Text-FontStyle сортируемого столбца установлен в fsBold


// Здесь создаем вторичные индексы 
// только для требуемой таблицы: 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
  // поместите здесь один вызов для 
  // каждого вторичного Index 
  CreateSX(Table1, 'FirstName'); 
  CreateSX(Table1, 'SecondName'); 
  CreateSX(Table1, 'Phone'); 
  CreateSX(Table1, 'BirthDate'); 
  // ... и так далее 
  Table1.Open; 
end; 

// Здесь удалите все вторичные индексы 
// при выходе из приложения: 

procedure TForm1.FormCloseQuery(
    Sender: TObject; var CanClose: Boolean); 
begin 
  Table1.Close; 
  DeleteSX(Table1); 
end; 

// В этой процедуле создаем вторичные индексы: 

procedure TForm1.CreateSX(TableX: TTable; cFieldname: string); 
begin 
  with TableX do begin 
    // таблица должна быть открыта с эксклюзивным доступом
    Active := False; 
    Exclusive := True; 
    IndexDefs.Update; 
    Active := True; 
    // если имя поля не существует, создаем новый вторичный индекс
    if IndexDefs.IndexOf(cFieldName) = -1 then begin 
      AddIndex(cFieldname, cFieldname, []); 
    end; 
    // закроем таблицу 
    Active := false; 
    Exclusive := False; 
  end; 
end; 

// Эта процедура удаляет вторичные индексы:

procedure TForm1.DeleteSX(TableX: TTable); 
var 
  I: Integer; 
begin 
  TableX.Active := False; 
  TableX.IndexDefs.Update; 
  // Цикл по всем индексам 
  for I := TableX.IndexDefs.Count - 1 downto 0 do begin 
    // игнорируем первичные индексы 
    if (TableX.IndexDefs.Items[I].Options * 
           [ixPrimary]) <> ([ixPrimary]) then 
      // Это вторичный индекс. Удаляем его.
      TableX.DeleteIndex(TableX.IndexDefs.Items[I].fields); 
  end; 
end; 

// Эта процедура сортирует столбцы DBGrid:

procedure TForm1.DBGrid1TitleClick(Column: TColumn); 
var 
  I: Integer; 
begin 
  Table1.IndexDefs.Update; 
  // если индекс существует для этого столбца, тогда изменяем его
  if Table1.IndexDefs.IndexOf(Column.FieldName) > -1 then begin 
    Table1.IndexFieldNames := Column.FieldName; 
    with TDBGrid(Column.Grid) do begin 
      for I := 0 to Columns.Count - 1 do begin 
        // изменяем также стиль шрифта
        if Columns[I] = Column then 
          Columns[I].Title.Font.Style := 
              Columns[I].Title.Font.Style + [fsBold] 
        else 
          Columns[I].Title.Font.Style := 
              Columns[I].Title.Font.Style - [fsBold]; 
      end; 
    end; 
  end; 
end; 

По материалам http://delphi.3000.com


 

Добавить комментарий


Защитный код
Обновить