Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

Визуальная группировка данных   Найти похожие ветки 

 
smu ©   (2004-01-13 13:33) [0]

Уважаемые мастера, столкнулся со следующей задачей: нужно чтобы пользователь отмечал нужные записи в DBGridе, например как в
ВинКоммандере правой кнопкой. Как реализовать сие? Первая мысль добавить поле в таблицу: 0 - запись не отмечена, 1 - отмечена. Может есть другие пути. Кто сталкивался или у кого есть идею какие-нибудь подскажите плиз.


 
Vlad ©   (2004-01-13 13:35) [1]

Колонка с чекбоксами в гриде не устроит ?


 
smu ©   (2004-01-13 13:38) [2]

а с таблицей как? поле добавлять все-таки придется?
лучше по моему вариант цветовой отметки записи, это ведь можно реализовать? там че нить вроде GridOnDrawCell...


 
Vemer ©   (2004-01-13 13:41) [3]

Еще подсветку можно делать.. для визуализации, бледно-зеленую или желтую... тогда можно поле не рисовать, (но его значение менять). Кстати самый простой вариант (кроме булевого) 1 и -1 и умножение на -1 для инвертации (ну нет в IB 6.0 булевых, :))


 
Vlad ©   (2004-01-13 13:42) [4]


> smu © (13.01.04 13:38) [2]

Поле добавить скорее всего придется. Можно не в таблицу, а в DataSet.
Есть продвинутый грид (бесплатный) www.ehlib.com


 
Sandman25 ©   (2004-01-13 13:44) [5]

[4] Vlad © (13.01.04 13:42)

Или можно хранить Id выбранных надписей в чем-то другом. В дин. массиве, например.


 
Sandman25 ©   (2004-01-13 13:44) [6]

В смысле записей, а не надписей.


 
smu ©   (2004-01-13 13:46) [7]


> Есть продвинутый грид (бесплатный) www.ehlib.com

менять влом.. гридов уже много..


> Поле добавить скорее всего придется. Можно не в таблицу,
> а в DataSet.

Использую TDbf. Как я понял Dataset -это этот самый TDbf и будет.
Можно ли добавить в него поле не затрагивая физически файлы таблицы?


 
smu ©   (2004-01-13 13:51) [8]


> Или можно хранить Id выбранных надписей в чем-то другом.
> В дин. массиве, например.

Натолкнул на мысль... Хранить не Id а создаем array of byte размерностью кол-ва записей... ну и по порядку...


 
Vlad ©   (2004-01-13 13:52) [9]

>Sandman25 © (13.01.04 13:44) [6]

Ну да, структуру для хранения можно любую придумать, но ИМХО, если есть возможность хранить в том же НД, то проще сделать так.


> smu © (13.01.04 13:46) [7]

C TDBF не работал, не знаю. Но подозреваю что можно :-)

Если хочешь сделать со стандартным гридом, то вот пару полезных статей на эту тему.
http://www.delphikingdom.com/helloworld/nogrid.htm
http://www.delphikingdom.com/helloworld/dbgridcolor.htm


 
smu ©   (2004-01-13 13:58) [10]


> Vlad ©

Спасиб, довольно интересно. На досуге почитаю...

> Или можно хранить Id выбранных надписей в чем-то другом.
> В дин. массиве, например.

Не.. не подходит ... с перерисовкой кутерня получается...


 
Vlad ©   (2004-01-13 13:59) [11]


> Не.. не подходит ... с перерисовкой кутерня получается...

Это почему ? :-)


 
smu ©   (2004-01-13 14:04) [12]


> Vlad © (13.01.04 13:59) [11]

ну дык каждый раз проверять весь массив, при прорисовке каждой ячейки...


 
Vlad ©   (2004-01-13 14:08) [13]


> smu © (13.01.04 14:04) [12]

Во-первых это операция не такая уж "дорогостоящая".
Во вторых можно использовать не дин. массив, а любую другую структуру, напр. TList, можно хоть просто переменную типа string
В третьих не нужно проверять при перерисовке каждой ячейки, а только ячейки из нужного столбца.


 
smu ©   (2004-01-13 14:08) [14]

а что нужно сделать, чтобы добавить поле не затрагивая файл.
Я так понимаю создаем объект поле, называем его по левому. А что дальше то как в него что-нить записать?


 
vedmed_   (2004-01-13 15:52) [15]

проще всего добавить вычисляемое поле и обрабатывать событие OnCalcFields


 
smu ©   (2004-01-13 16:10) [16]


> проще всего добавить вычисляемое поле и обрабатывать событие
> OnCalcFields

а как будет выглядеть пометка записи?


 
vedmed_   (2004-01-13 17:22) [17]

создаем StringList для хранения ID отмеченных записей
...
marked: TStringList;
...
marked := TStringList.Create;
...
для ускорения поиска говорим что строки должны быть отсортированы
...
marked.Sorted := True;
marked.Duplicates := dupError;
...
добавляем в DataSet вычисляемое (Calculated) поле DataSetMarked типа Boolean.
в обработчике события OnCalcFields пишем

DataSetMarked.Value := marked.IndexOf(IntToStr(DataSetID.Value)) >= 0;

где DataSetID - поле первичного ключа
для изменения отметки текущей записи

i := marked.IndexOf(IntToStr(DataSetID.Value));
if i < 0 then
marked.Delete(i)
else
marked.Add(IntToStr(DataSetID.Value));

затем или DataSet.Refresh или Grid.Invalidate

для отображения Boolean поля в виде CheckBox-ов используем OnDrawColumnCell или grid из библиотеки ElLib

вместо StringList лучше использовать hash-таблицы например из xRTL


 
roottim   (2004-01-13 17:42) [18]

и чего вам всем bookmark-и уже не нравятся...
в гриде
Options->dgMultiSelect
Grid1.SelectedRows как раз и будут указателями на твои выбранные "строчки"


 
Johnmen ©   (2004-01-13 17:45) [19]

>roottim

Душа хочет прекрасного. :)


 
smu ©   (2004-01-14 08:07) [20]


> vedmed_ (13.01.04 17:22) [17]

Спасиб, попробую.


 
Sergey13 ©   (2004-01-14 09:39) [21]

Вроде никто не упомянул таблицы в памяти. RxMemoryData например. Очень удобно. Скопировал туда датасет, добавил поле и работай с ним как хочешь. Можно легко настроить реакцию на редактирование.



Страницы: 1 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
6-16565
nester
2003-11-22 11:45
2004.02.06
Как распаковать PostData в TWebBrowser е


1-16349
Vitalik
2004-01-24 15:59
2004.02.06
Классы


3-16138
Вованчик
2004-01-15 11:03
2004.02.06
и снова SELECT


4-16800
chi
2003-11-25 13:47
2004.02.06
Динамическое создание картинки в памяти


14-16602
Hermit
2004-01-15 13:41
2004.02.06
Казино. Оазис-покер. Стрейт флеш