Dbgrideh сортировка по столбцу

Dbgrideh сортировка по столбцу

Как сортировать по алфавиту в dbgrideh без sql запроса.?


© ( 2009-03-25 11:36 ) [1]

В любом случае сортируешь датасет, а грид тут не причем, он только отобразит отсортировнный набор данных.


clickmaker © ( 2009-03-25 12:12 ) [2]

DataSet должен уметь индексы. TADODataSet, TClientDataSet, к примеру


MsGuns © ( 2009-03-25 12:31 ) [3]

Для ADO индексы не нужны — он их построит сам по необходимости (для CDS индекс нужно создать в коде)


Андрей Ал. ( 2009-03-27 09:26 ) [4]

Индексы созданы.
Но если я сортирую через sql у меня почему то теряется струтура таблицы, тоесть при добавленни из дбгридех у меня добавляется не та сток которую я выбираю я первая запись в таблице


MsGuns © ( 2009-03-27 10:58 ) [5]

Сам то понял что сказал ?


Palladin © ( 2009-03-27 11:36 ) [6]

:)) вели и могучь руская язык


Труп Васи Доброго © ( 2009-03-27 11:54 ) [7]

О чём это вы тут? Какие индексы. DbGridEh сам всё делать умеет, достаточно по заголовку колонки щёлкуть.
Сначала у нужной колонки в свойствах ставишь DBGridEh1.Columns[1].Title.TitleButton = true, чтобы заголовок нажимался как кнопка. При щелчке по ней он будет сортировать сначала по возрастанию, потом по убыванию (всё как в проводнике Windows). Если надо чтобы сортировка была автоматической при открытии датасета, то ставишь DbGridEh1.OptionsEh.dghAutoSortMarking = true, если нужна автосоритровка по нескольким полям, то там же DbGridEh1.OptionsEh.dghMultiSortMarking = true. Очерёдность сортировки задаётся в свойствах столбцов DBGridEh1.Columns[1].Title.SortIndex = 1 (сначала по этому столбцу), DBGridEh1.Columns[2].Title.SortIndex = 2 (потом по этому столбцу) и т.д.
Направлеие сортировки (возрастание/убывание) задаётся параметром DBGridEh1.Columns[1].Title.SortMarker = smDownEh (по убыванию).
ВАЖНО. Для выполнения сортировки необходимо чтобы в каталоге с исходниками находился нужный файл (в зависимости от используемой БД)
Engine DataSet FileName

BDE TQuery EhLibBDE
ADO TADOQuery EhLibADO
ClientDataSet TClientDataSet EhLibCDS
DBExpress TSQLQuery EhLibDBX
InterBase Express TIBQuery EhLibIBX


Сергей М. © ( 2009-03-27 12:19 ) [8]


> DbGridEh сам всё делать умеет

Мож и умеет, если подцеплен к мизерному НД.

А вот как подцепят его к неиндексированному НД записей эдак на миллионов десяток, так он сразу и обделается)


Труп Васи Доброго © ( 2009-03-27 13:19 ) [9]

Это не программистское понятие "обделается". Он сам особо ничего не делает, он к исходному запросу автоматом добавляет ORDER BY, список выбранных тобой полей и Desc, если нужно, вот и всё. Сортировку делает сервак, а не DBGridEh. Так что если кто и обделается, то сервак, а не грид.
Та кчто под словами "сам умеет всё делать" я как раз и имел в виду, что раз уж человек юзает этот грид, то нафига руками запрос морочить, когда грид это сам делает.


Сергей М. © ( 2009-03-27 13:25 ) [10]


> Труп Васи Доброго © (27.03.09 13:19) [9]

Куда, спрашивается, грид должен впендюрить ORDER BY, если нет никаого запроса ?


clickmaker © ( 2009-03-27 13:33 ) [11]

> он к исходному запросу автоматом добавляет ORDER BY

это только если бдешный TQuery, потому что он по-другому не умеет.
для адо и клиентдатасета возможна локальная сортировка. Но там по-любому индексы, только создаются они "под ковром"


Труп Васи Доброго © ( 2009-03-27 14:18 ) [12]

Блин, эксперимент есть эксперимент. Создал таблицу с миллионом записей (varchar20). DBGridEh отсортировал этот набор за 4 секунды, что для не индексированного поля очень неплохо. База на FB2.1 WinXP на обычном компе Core2Duo с 1 Гб оперы + на нём в это время 2 юзера работали (1 локально и 1 в терминале).
Так что всё нормально работает.


Сергей М. © ( 2009-03-27 14:39 ) [13]


> Труп Васи Доброго © (27.03.09 14:18) [12]

Т.е. через 4 секунды ты успел побывать в конце НД ?

Читайте также:  Как включить вспышку при звонке на honor


Труп Васи Доброго © ( 2009-03-27 14:51 ) [14]

> Т.е. через 4 секунды ты успел побывать в конце НД ?

Я где то сказал что был фетч за 4 секунды. Сортировка была, а не фетч. Это что за идиотизм каждый раз фетчить весь НД на клиента. Нажал сортировка и через 4 секунды "конец НД" оказался сверху, ещё раз нажал и сверху начало, смотри если нравится.
Ты скажи в каком обоснованом случае надо просматривать глазами подряд хотя бы 100 записей, тем более заявленые 10млн., если человек не извращенец? Для поиска есть запросы и фильтры, а если для поиска пользоваться только прокруткой, то тебе и сортировка не особо поможет.


clickmaker © ( 2009-03-27 14:53 ) [15]

> а если для поиска пользоваться только прокруткой, то тебе
> и сортировка не особо поможет

а может, у пользователя глаз, как у орла )


Труп Васи Доброго © ( 2009-03-27 15:09 ) [16]

> а может, у пользователя глаз, как у орла )

ага, и задница, как у бегемота, ибо просмотреть 10млн записей времени займёт до кровавых мозолей на жп.


MsGuns © ( 2009-03-27 15:17 ) [17]


Сергей М. © ( 2009-03-27 15:35 ) [18]


> что за идиотизм каждый раз фетчить весь НД на клиента?

Зачем весь ?
Предположим, курсор НД — на серверной стороне..
Но и при этом условии перемещение в конец НД при таких объемах и при отсутствии подходящих индексов займет далеко не 4 сек


KilkennyCat © ( 2009-03-27 19:21 ) [19]

что такое фетчить ?


Сергей М. © ( 2009-03-27 19:43 ) [20]

"Фетчить" означает грузить что-то откуда-то какой-то ненужной хренью, тратя при этом время, деньги и нервы)


KilkennyCat © ( 2009-03-27 19:48 ) [21]

То есть то, что я делаю целый день. )
Спасибо!


Сергей М. © ( 2009-03-27 19:57 ) [22]


> то, что я делаю целый день

Научиться программировать не так сложно, как кажется. Уроки по принципу от простого к сложному. Исходные тексты программ. Видео уроки.

Страницы

среда, 22 февраля 2012 г.

Урок 30. Поиск и фильтрация

"Давненько я не брал в руки шашек. ", — говорил Гоголевский Ноздрёв.

Давненько я ничего не писал в моем блоге. Не буду приносить никаких извинений и писать оправдательных фраз. Достаточно одного слова: "Работа. " А посему — за дело.

Вряд ли какая-то программа обходится без алгоритма поиска чего либо. А интерфейс, предоставляющий пользователю возможность работы с цифрами, тем более не может обойтись без таких полезных функций как поиск и фильтрация записей. Я утверждаю это со 100% уверенностью как пользователь собственных творений. А причина тому проста: чаще всего оператору не нужен полный набор всех записей. Как правило, его интересует ограниченное количество строк или вообще одна конкретная запись.

Если кто-то из Вас, мои дорогие читатели, работал с подобными программами, то мог сталкиваться с таким удобством: щелкнешь по заголовку какой либо колонки в таблице, и порядок сортировки строк таблицы изменился. Волшебство? Нет, уверяю Вас. Предлагаю снабдить сетку на главной форме подобными функциями. Это возможно, так как grid на форме main из библиотеки EhLib.

Не помню, описывал я ранее или нет, но для удобства пользователя (а об этом в очередной раз призываю не забывать никогда!) нужно установить такой порядок сортировки записей в главной форме при ее старте, чтобы самые свежие строки оказались вверху. Много для этого не нужно, укажите лишь в инспекторе объектов для ADOTableMain имя поля, по которому должна произойти сортировка, не забыв при этом указать обратный порядок (DESC):

Затем нужно обратиться к свойствам сетки:

Web or desctop App Developer

Так уж случилось что сайт простаивает, а в свое время я занимался им активно, идея просто отличная и забросить ее не в коем случае нельзя, поэтому мной было принято решение о продаже этого сайта.
Что получает в итоге покупатель:

  • Весь контент сайта(все содержимое хостинга)
  • Полные права на доменное имя сайта(сделаем трансфер)
  • Копирайт сайта на большом количестве сторонних ресурсов так как сайту уже более 4-х лет
  • Готовый движок форума и все исходные тексты системы управления сайтом
  • Все исходные тексты ПО которое опубликовано на сайте
  • Все почтовые ящики доменного имени
  • Все домены третьего уровня
Читайте также:  Lenovo c200 моноблок драйвера windows 7

Дополнительную информацию о статистике посещения, клиентах, вы можете узнать написав на почту koder@koder.kz

Добавил 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, =1", ">1 AND | != | > | = | 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-файл.
    Ссылка на основную публикацию
    Bq strike power 5000
    Компания BQ Mobile объявила о начале продаж в России нового недорогого смартфона BQ-5059 Strike Power. Ключевой особенностью новинки стал аккумулятор...
    Adblock detector