Сортировка столбцы 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;
Комментарии