Сайт Koder.kz сайт для Delphi программистов.

koder.kz

Web or desctop App Developer

Написать

Добавил admin | Категория Наши материалы | 27 Марта 2014


    Компонент TDBGridEh обеспечивает полную функциональность TDBGrid и добавляет некоторые новые возможности, такие как:
  • Позволяет выделять записи, столбцы и прямоугольные области.
  • Копировать/вставлять выделенные области в/из буфера обмена.
  • Позволяет выводить специальные заголовки столбцов, которые могут объединяться над несколькими/всеми столбцами.
  • Позволяет выводить нижний колонтитул (footer), для отображения сумм/количеств/др. значений полей.
  • Позволяет автоматически подгонять размеры столбцов, чтобы ширина всего грида равнялась ширине видимой области окна грида.
  • Позволяет изменять высоту строк данных и заголовков.
  • Позволяет автоматически переносить текст и увеличивать высоту заголовке столбца чтобы уместить весь текст заголовка.
  • Заголовок столбца может вести себя как кнопка и, опционально, иметь маркер сортировки.
  • Позволяет автоматически менять маркеры сортировки и сортировать данные в наборе данных (DataSet'е).
  • Позволяет отсекать длинный текст с отображением многоточия.
  • Позволяет в выпадающем Lookup списке отображать несколько полей.
  • Позволяет инкрементный поиск в lookup-полях.
  • Позволяет закреплять для прокрутки несколько первых столбцов сетки (FrozenCols).
  • Позволяет выводить выпадающий календарь (поддерживается для полей типа TDateField и TDateTimeField).
  • Позволяет отображать картинки из TImageList зависящие от значения поля.
  • Позволяет прятать и отслеживать положение вертикальных и горизонтальных полос прокрутки.
  • Позволяет скрывать столбцы.
  • Позволяет отображать 3D-рамку для закрепленных разных типов столбцов (строк).
  • Позволяет отображать memo-поля.
  • Позволяет иметь многострочный редактор по месту.
  • Позволяет выводить пропорциональную полосу прокрутки для dataset'ов не поддерживающих IsSequenced режим.
  • Позволяет автоматическое отображение checkbox'ов для boolean-полей. Позволяет отображать checkbox'ы для других типов полей.
  • Имеет процедуры для сохранения/восстановления свойств (видимые столбцы, порядок следования столбцов, их ширины, порядок сортировки, высоту столбца) в/из реестра или INI-файла.
  • Позволяет отображать подсказки (ToolTips) для текста, не помещающегося в ячейку.
  • Позволяет экспортировать данные в Text, Csv, HTML, RTF, XLS и внутренний форматы.
  • Позволяет импортировать данные из Text и внутреннего форматов.
  • Позволяет выводить под заголовком специальную строку для ввода выражения, применяемое для фильтрации данных.
  • Может сортировать данные в различных dataset'ах.
  • Может фильтровать данные в различных dataset'ах.

TDBGridEh не хранит данные в себе, он только отображает данные набора данных TDataSet через объект TDataLink. Каждый компонент для связи с данными TDataSet'а имеет внутренний объект TDataLink. Вы можете подключить TDBGridEh к dataset'у используя свойство DataSource. Если вы уже использовали компонент TStringGrid, то могли заметить что данные, отображаемые в TStringGrid и в TDBGridEh очень похожи, но механизмы, которые используются для отображения данных в TStringGrid и в TDBGridEh абсолютно разные. В TStringGrid общее количество строк сетки равно количеству в массиве строк данных, тогда как в TDBGridEh (и TDBGrid) число строк всегда не больше чем числа видимых строк. И хотя вертикальный scrollbar может отображать позицию относительно общего числа записей в dataset'е, он берет данные о позиции не из массива ячеек grid'а, а непосредственно из dataset'а (DataSet.RecNo). TDataSet не позволяет нам работать с данными как с массивом данных, напр. мы не можем быстро получить значение поля некой записи. Кроме того, некоторые типы dataset'ов не имеют понятия номера записи (DataSet.RecNo). В таких dataset'ах мы можем только знать, когда мы находимся в начале либо конце dataset'а либо где-то между ними и в этом случае DBGrid показывает вертикальный scrollbar только в 3 позициях (В TDBGridEh для работы с такими датасетами надо активизировать объект SumList). Для получения возможности отображения нескольких записей одновременно, объект TDataLink использует буфер записей (record buffer window) с быстрым доступом только для чтения. DBGrid использует эту возможность datalink'а и устанавливает размер record buffer window равный количеству возможных видимых строк grid'а. DataLink не позволяет определять с какой записи в DataSet'е, заполняется этот буфере. DataLink сам прокручивает содержимое record buffer window когда мы перемещаемся по dataset'у (Next, Prior) таким образом, чтобы активная запись всегда оставалась внутри record buffer window. В этом причина, почему активная запись меняет позицию, когда пользователи изменяют позицию scrollbar'а при помощи мыши.

TDBGridEh и вертикальный scrollbar.

При работе разными типами dataset'ов можно обратить внимание, что для одних типов dataset'ов DBGrid отображает вертикальный scrollbar правильно, а для других имеет только 3 позиции независимо от числа записей в dataset'е. Для согласования scrollbar'а DBGrid использует свойства RecordCount и RecNo компонента DataSet. Некоторые dataset'ы и даже некоторые dataset'ы при определенных условиях возвращают -1 в качестве значения RecordCount и RecNo. Функция DataSet IsSequenced показывает, использует ли таблица базы данных номера записей для отображения порядка записей. Когда IsSequenced возвращает True приложения могут использовать свойство RecNo для перемещения по записям dataset'а и DBGrid использует свойство RecNo для отображения положения ползунка на вертикальном scrollbar'е. Но когда IsSequenced возвращает False, DBGrid не может определить позицию текущей записи и отображает ползунок scrollbar'а в 3-х позициях. Компонент DBGridEh имеет возможность показывать пропорциональный scrollbar даже для неупорядоченных dataset'ов. Для этого нужно активизировать свойство SumList. Установите SumList.Active в True и SumList.VirtualRecords в True. SumList создаст список bookmar'ов записей. Если вы используете технологию клиент-сервер для доступа к базе данных, SumList вынудит dataset вернуть все записи, и эта операция займет некоторое время. Обратите внимание, что VirtualRecords будут работать только с full relationship bookmarks, т.е. DataSet.ComapreBookmark должен возвращать > 0 если bookmark1 > bookmark2 (т.е. запись, на которую указывает bookmark1 идет после записи, на которую указывает bookmark2), = 0 если bookmark1 = bookmark2, < 0 если bookmark1< bookmark2. TBDEDataSet в большинстве случаев поддерживает full relationship bookmarks.

Использование DBGridEh для сортировки и фильтрации данных в DataSet.

DBGridEh не может сортировать или фильтровать данные самостоятельно. Но он может послать команду для сортировки или фильтрации специальному объекту, который сделает это в DataSet'е. Вы можете выбрать 2 типа сортировки (локальная и серверная) используя свойство SortLocal и два типа фильтрации (также локальная и серверная), но реальная возможность применения каждого типа операции зависит от типа DataSet'а. Например TBDEDataSet - не поддерживает локальную сортировку (внутри DataSet'а), так что вы не сможете сортировать данные локально, когда grid присоединен к TQuery или TTable. Библиотека имеет набор специальные объекты для сортировки/фильтрации стандартных типов DataSet'ов постовляемых вместе с Delphi. Ниже вы можете видеть таблицу специальных объектов и DataSet'ов в которых объекты могут сортировать или фильтровать данные.

Unit DataSet Local sorting Server sorting Local filtering Server filtering
EhLibBDE TQuery,TTable N Y Y Y
EhLibADO TADOQuery,TADODataSet Y Y Y Y
EhLibCDS TClientDataSet Y Y Y Y
EhLibDBX TSQLQuery, TSQLDataSet N Y N Y
EhLibIBX TIBQuery, TIBDataSet N Y Y Y

Когда grid настроен для сортировки на Сервере, специальный объект строит SQL-выражение ORDER BY и заменяет строку ORDER BY в свойстве Command или SQL DataSet'а и переоткрывает его. Когда grid настроен для локальной сортировки специальный объект производит сортировку учитывая специфику конкретного типа DataSet'а. Когда grid настроен для Локальной фильтрации, специальный объект строит выражение и присваивает его свойству Filter DataSet'а. Перед этим нужно заранее выставить значение Filtered в True. Когда grid настроен для фильтрации на сервере, специальный объект строит выражение для предложения 'WHERE' SQL-строки DataSet'а. Он пытается найти строку, начинющуюся с ключевого выражения '/*Filter*/' (Вы можете изменять это ключевое выражение используя глобальную переменную SQLFilterMarker) в SQL-выражении и добавляет выражение для фильтрации после ключа в той же строке. Так что, SQL-запрос должен содержать строку, начинающуюся с '/*Filter*/'. Например:


' select * 
from table1
where
/*Filter*/ 1=1 '

Для автоматической фильтрации/сортировки данных в dataset'е требуется добавить один из модулей EhLibXXX (EhLibADO, EhLibBDE, EhLibCDS ... в зависимости от dataset'а, подключенного к grid') в раздел 'uses' любого модуля вашего проекта. Эти EhLibXXX модули содержат код для регистрации класса который наследуется от TDatasetFeaturesEh (специальный объект) и осуществляет фильтрацию/сортировку в DataSet'е. Для DataSet'ов сторонних разработчиков можно написать и зарегестрировать свой собственный класс или написать обработчики событий OnApplyFilter и/или OnSortMarkingChanged для каждого требуемого grid'а. Кроме того можно написать OnApplyFilter и/или OnSortMarkingChanged для глобальной переменной DBGridEhDataService. Эти события имеют тип TNotifyEvent, где в качестве Sender'а выступает TCustomDBGridEh.

Настройка сетки для сортировки данных:

TDBGridEh позволяет отображать специальные sortmarking bitmaps (маленькие треугольники) в правой части заголовков столбцов. Для отображения sortmarking bitmaps добавьте dghAutoSortMarking в свойство OptionsEh. Добавьте также dghMultiSortMarking в OptionsEh для обеспечения одновременной пометки сортировки по нескольким столбцам. Установите Column.Title.TitleButton в True для заголовков, у которых вы хотите изменять sortmarkers в run-time. Вы можете установить свойство сетки ColumnDefValues.Title.TitleButton чтобы позволить метки сортировки для всех столбцов, у которых не менялось свойство Column.Title.TitleButton. В run-time клик на заголовке изменяет порядок сортировки. При нажатом Ctrl можно отметить насколько столбцов одновременно. После клика на заголовке, если событие OnSortMarkingChanged не пусто то оно вызывается, иначе дейсвие передается на выполнение специальному объекту, если тот зарегистрирован. Специальный объект использует свойство Grid.SortLocal для определения типа сортировки данных: локально либо на сервере. Если вы пишете обработчик события OnSortMarkingChanged вы можете использовать свойство TDBGrid.SortMarkedColumns для доступа к сортируемым столбцам и свойство TColumnEh.Title.SortMarker для получения состояния маркера сортировки.

Настройка grid'а для фильтрации данных:

TDBGridEh позволяет отображать специальную строку (под заголовком), где пользователь вводит в ячейки текст для фильтрации записей в dataset'е. (Значения в ячейке могут выглядеть как: "1", ">=1", ">1 AND <=5", "%TestStr%"). Установите STFilter.Visible в True для отображения специальной строки. Во run-time, когда курсор находится в ячейке фильтрации, пользователь может нажать ENTER для применения фильтра. Grid проанализирует выражения в каждой непустой ячейке фильтрации и вызовет метод TDBGridEh.ApplyFilter, далее вызывается событие OnApplyFilter либо осуществляется передача действия специальному объекту, если тот зарегистрирован. Текст выражения в ячейке фильтра должен иметь следующий формат: [Operator1] Operand1 [)] [AND|OR Operator2 Operand2 [)] ] Где OperatorX - один из [ = | <> | != | > | < | >= | <= | ~ | !~ | in ( ] OperandX - число, дата, строковое выражение, либо, для оператора 'IN', - список значений, разделенных запятыми. Например:


'1'
'>=1'
'>1 AND <=5'
'~ TestStr%'
'!~ TestStr_'
'in (1,2,3,4,5,6) and >100'
'in (Str1,Str2,Str3)'

Настройка заголовков grid'а.
Комплексные заголовки.

TDBGridEh позволяет создавать заголововок над несколькими столбцами. See Figure: Для этого надо установить свойство DBGridEh.UseMultiTitle в True и заполнить заголовки полей (TField.DisplayLabel) или заголовки столбцов, используя следующее правило: каждая часть текста в заголовке поля или заголовке столбца должна состоять из нескольких частей разделенных символом "|", где каждая общая часть одинакова для нескольких столбцов. Остальные поля или заголовки должны содержать одинаковый текст в соответствующих частях. Например:


Field1.DisplayLabel := 'Title1|SubTitle1';
Field2.DisplayLabel := 'Title1|SubTitle2';
    or
DBGridEh.Columns[0].Title.Caption := 'Title1|SubTitle1';
DBGridEh.Columns[1].Title.Caption := 'Title1|SubTitle2'; 

Заголовок как кнопка.

Для того, чтобы заголовки работали как кнопки установите свойство Column.Title.TitleButton в True. Напишите обработчик события OnTitleBtnClick для пределения действия на клик пользователя на ячейке заголовка.

Отображение картинок в заголовках.

Для отображения картинок в заголовках вместо текста, нужно использовать свойство TitleImages TDBGridEh'а и свойство ImageIndex TColumnTitleEh'а.

Значения по умолчанию для свойств заголовков.

Для установки значенией по умолчанию для свойств заголовков используйте свойство TDBGridEh.ColumnDefValues.Title. Эти свойсва будут действовать для свойств всех заголовков до момента изменения аналогичного свойства в заголовке Column.Title.

Настройка колонтитулов grid'а.
Колонтитулы и итоговые значения.

TDBGridEh позволяет отображать специальную строку (колонтитул) либо строки в нижней части grid'а. Используйте свойство FooterRowCount для определения числа строк колонтитулов в grid'е и свойства Footer или Footers объекта TColumnEh для назначения информации, которая должна быть отобрадена в ячейках колонтитула. Свойство Footers полезно задействовать когда у вас более одной строки колонтитулов. TColumnEh.Footers - это коллекция объектов TColumnFooterEh, где информация об i-м элементе коллекции будет отображаться в i-ой ячейке стобца колонтитула. В ячейке колонтитула может отображаться сумма по указанному полю, количество записей, значение поля либо статический текст. Используйте свойства Footer.ValueType либо Footers[i].ValueType для определения типа значения, отображаемого в ячейке колонтитула. Если ValueType = fvtStaticText, тогда в свойстве Value нужно задать текст для отображения. Если ValueType = fvtFieldValue, тогда в свойстве FieldName необходимо задать имя поля, значение которого будет отображаться. Для того, чтобы grid подсчитал итоговое значение, нужно активировать SumList (DBGridEh.SumList.Active := True) и установить ValueType Footer'а в fvtSum или fvtCount. Значение fvtSum означает подсчет суммы по полю колонки или указанному в свойстве FieldName Footer'а.

Настройка ячеек данных.
Отображение картинок в ячейках даннных, в зависимости от значений полей.

TDBGridEh позволяет отображать картинки из компонента TImageList, в зависимости от значений полей. Для этого нужно заполнить список значений полей в свойстве Column.KeyList (каждое значение в отдельной строке) и назначить свойству Column.ImageList значеним компоненты типа TImageList, в которой располагаются картинки в порядке номеров строк KeyList'а. Можно также присвоить свойство Column.NotInKeyListIndex индексом картини выводимой в случае если значениt поля не совпадающего ни с одним значением в KeyList (например, вы можете задать индекс картинки для значения Null). В run-time вы не можете менять картинке в ячейке. Использйте клавишу пробел и клик мышки для установки следующего значения из Column.KeyList в поле. Shift-пробел и Shift-клик для установки предыдущего значения из Column.KeyList. Установка Column.DblClickNextval в True позволяет изменять значения двойным-кликом мышки.

Checkbox'ы для boolean и не-boolean полей.

Grid автоматически отображает checkbox'ы для boolean-полей. Для отображения checkbox'ов для не-boolean полей заполните первую строку свойства Column.KeyList, которая соответствует значению 'checked' checkbox'а, вторая строка - значению 'non checked' и установите свойство Column.Checkboxes в True. Cтрока в KeyList может содержать более одного значения, разделенных точкой с запятой.

Высота строк данных.

Используйте свойства RowHeight и RowLines для определения высоты строк данных. Полная высота строки данных в пикселях равна (RowLines * высота одной строки текста) + RowHeight. Установка RowSizingAllowed в True позволяет менять мышкой высоту строк в run-time. Для разбивки длинного текста на несколько строк установите Column.WordWrap в True. Текст будет перенесен, если высота строки (Row) больше высоты одной строки текста.

Отображение memo-полей.

Для отображение memo-полей установите DrawMemoText в True.

Изменение настроек шрифта в ячейке и ее цвета.

Свойства TDBGridEh Font и Color описывают шрифт и цвет, используемый для отображения ячейки grid'а. Свойства Font и Color объекта TColumnEh описывают шрифт и цвет, используемый для отображения ячейки в определенном столбце.

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

Ниже перечислены несколько событий, обработчики которых в можете написать для настройки атрибутов шрифта и цвета ячейки перед тем, как данные в ней будут напечатаны. Вы можете написать обработчик события TDBGridEh.OnDrawColumnCellEvent для настройки отображения текста в ячейках grid'а. Вы можете отрисовывать ячейку, используя методы свойства TDBGrid.Canvas. Но если вам нужно просто изменить атрибуты текста или цвет, то лучше использовать события, указанные ниже. Вы можете написать обработчик события TDBGridEh.OnGetCellParams для выставления свойств щрифта, цвета и других параметров ячейки перед отрисовкой данных в ячейке. Если вы хотите изменить атрибуты ячейки только в определенном столбце, вы можете использовать событие столбца TColumnEh.OnGetCellParams. Перед прорисовкой данных ячейки столбца в этом событии вы можете менять шрифт, цвет, выравнивание, ImageIndex, Text или State для checkbox'а. Перед редактированием данных ячейки столбца вы можете изменить шрифт, цвет фона, текст и управлять состоянием readonly. При вызови этих событий DataSet будет находистя на правильной записи, так что вы можете обращатся к значению полей используя например метод TDataSet.FieldByName(..).Value.

Значения по умолчанию для свойств столбцов.

Для установки значений по умолчанию для свойств столбцов используйте свойство TDBGridEh.ColumnDefValues. Вновь создаваемые столбцы получат свойства из ColumnDefValues и будет хранить их до первого изменения.

Настройка in place редактора ячейки grid'а
Несколько полей в выпадающем lookup-списке.

Для отображнения нескольких полей в выпадающем lookup-списке для lookup-полей установите в Column.LookupDisplayFields список полей. Точки с запятыми должны разделять множество имен полей. Имя Column.Field.LookupResultField должно присутствовать в списке LookupDisplayFields. Lookup-список с несколькими полями может быть назначен только lookup-полям. Это свойство работает только для полей DataSet'а типа Lookup (TField.FieldKind = fkLookup).

Столбец с простыми lookup-значениями.

Вы можете отображать в столбце другой текст, зависящий от значения поля. Используйте свойства KeyList и PickList. KeyList содержит значения, которые сохраняются в поле, а PickList - в соответствующих индексах содержит значения для отображения. Установите Column.NotInKeyListIndex в индекс текста из PickList, который отображается если значение поля не содержится в KeyList (например, вы можете задать индекс текста для Null-значения поля). Установите Column.DblClickNextval в True, чтобы менять значение double-кликом.

Выпадающий календарь.

Для полей TDateField и TDateTimeField редактор отображает dropdown-кнопку для отбражения выпадающего календаря. Установите Column.ButtonStyle в cbsNone для отключения отображения dropdown-кнопки.

Цвет и фонт текстового редактора по месту.

Редактор получает цвет и фонт из цвета и фонта ячейки. Ячейка получает цвет и фонт из столбца и в событии OnGetCellParams. Редактор автоматически устанавливает многострочный режим если высота строки больше высоты одной строки и свойство WordWrap для столбца установлен в True.

Автоматическая подгонка ширины столбцов grid'а под ширину клиентской области grid'а.

Установите AutoFitColWidths в True для автоматического изменения ширины столбцов так что ширина свей сетки будет равна видимой части окна сетки. Свойство MinAutoFitWidth определяет минимальную ширину grid'а при которой происходит изменение ширины.

3D и flat вид grid'а.

Используйте свойство OptionsEh для отображения/скрытия 3D-рамки вокруг фиксированных, закрепленных, колонтитулов и строк данных. Используйте свойство Flat для отображения grid'а в плоском стиле.

Импорт/Экспорт данных TDBGridEh в/из разные форматы.

EhLib имеет набор функций для экспорта данных DataSet'а в Text, Csv, HTML, RTF, XLS и внутренние форматы. Он может записывать данные в поток (объект TStream) либо в файл.
Пример:


Pascal: 
SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,'c:\temp\file1.txt',False);
C++: 
SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsText),DBGridEh1,"c:\\temp\\file1.txt",false);

EhLib имеет набор функций для импорта данных из Text и внутренних форматов в DataSet подключенный к сетке. Он может считывать данные из потока (объект TStream) либо из файла.

Другие возможности.

В lookup-редакторе вы можете очистить (установить в Null) значение LookupKeyField в runtime. Просто выделите весь текст и нажмите Delete.

Закрепленная зона.

Закрепленная зона - это набор столбцов в левой части grid'а, который не прокручивается. В отличие от зафиксированных (fixed) столбцов, закрепленные (frozen) столбцы могут получать фокус ввода. Для определения числа непрокручиваемых столбцов задайте свойство FrozenCols.

Инкрементный поиск

TDBGridEh позволяет пользователям совершать специальный "инкрементный" поиск в столбце grid'а. Когда пользователь входит в режим инкрементного поиска, он может набирать символы и grid будет пытаеться найти набранный текст в текущем столбце. Используйте значения dghIncSearch и dghPreferIncSearch (свойство OptionsEh) для управления инкрементным поиском. В runtime вы можете использовать следующие сочетания клавиш для инкрементного поиска:
Ctrl+F - начало инкрементного поиска.
Ctrl+Enter - поиск следующего совпадения.
Ctrl+Shift+Enter - поиск предыдущего совпадения.
Если dghIncSearch включен в OptionsEh и столбец - только для чтения, тогда grid включает инкрементный поиск автоматически при первом нажатии клавиши и будет возвращен в нормальный режим через 1,5 секунд. Значение dghPreferIncSearch определяет, что grid установит режим инкрементного поиска автоматически при первом нажатии клавиши вместо редактирования.

Горизонтальная и вертикальная полосы прокрутки.

Используйте свойства VertSctollbar и HorzSctollbar для отображения/скрытия вертикальной и горизонтальной полос прокрутки. Множественный выбор. TDBGridEh позволяет выбирать записи, столбцы и прямоугольные области для последующих операций над выделенной областью. Для включения возможности множественного выбора установите следующие свойства:

  • dgMultiSelect в свойстве Options - определяет возможность множественного выбора.
  • dghClearSelection в свойстве OptionsEh - определяет, будет ли снято выделение после того как пользователь переместился к другой ячейке.
  • EditActions - определяет действия, которые пользователь может выполнять с выделенной областью (Copy, Cut, Delete, Paste, SelectAll).
  • AllowedSelections - определяет разрешенные типы выделения которые могут быть (Rows, Columns, Rectangle area, All).
  • Selection - определяет текущее состояние множественного выбора: выбранные записи, столбцы либо прямоугольные области и включает в себя свойства и функции для доступа к ним.

Сохранение и восстановление макета сетки и колонок в/из реестра либо ini-файл.

В TDBGridEh есть набор методов для сохранения и восстановления макета сетки и колонок в/из реестра либо ini-файл:

  • RestoreColumnsLayout - Восстановление порядка следования столбцов, ширины и состояния маркеров сортировки из реестра.
  • RestoreColumnsLayoutIni - Восстановление порядка следования столбцов, ширины и состояния маркеров сортировки из ini-файла.
  • RestoreGridLayout - Восстановление порядка следования столбцов, ширины, видимости, состояния маркеров сортировке, Sortmarked index и/или высоты строк из реестра.
  • RestoreGridLayoutIni - Восстановление порядка следования столбцов, ширины, видимости, состояния маркеров сортировке, Sortmarked index и/или высоты строк из ini-файла.
  • SaveColumnsLayout - Сохранения порядка следования столбцов, ширины и состояния маркеров сортировки в реестр.
  • SaveColumnsLayoutIni - Сохранения порядка следования столбцов, ширины и состояния маркеров сортировки в ini-файл.
  • SaveGridLayout - Сохранение порядка следования столбцов, ширин, видимости, состояния маркеров сортировке, Sortmarked index и/или высоты строк в реестр.
  • SaveGridLayoutIni - Сохранение порядка следования столбцов, ширин, видимости, состояния маркеров сортировке, Sortmarked index и/или высоты строк в ini-файл.