Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > DBGrid и TreeView |
Автор: MyNick 13.10.2005, 09:47 |
подскажите плиз каким образом монжно связать DBGrid и TreeView, использую mssql, так же компоненты ADOConnection, DataSource и ADOQuery. |
Автор: offline 13.10.2005, 10:07 |
А что ты хочешь получить таким образом? ![]() |
Автор: MyNick 13.10.2005, 12:02 |
хочу представить базу данных таким способом TreeView для выбора пункта, а DBGrid для отображения данных... |
Автор: offline 13.10.2005, 13:16 |
ну установи себе EHLib и наслождайся http://tinypic.com/ej8x29.jpg или почитай здесь http://www.delphikingdom.com/asp/viewitem.asp?UrlItem=/helloworld/dbtreeview.htm |
Автор: MyNick 13.10.2005, 14:11 |
EHLib то я ставил тока со свойствами DBGridEh не получилось разобраться, а документацию по нему на русском найти не удалось... |
Автор: offline 13.10.2005, 14:13 |
документация есть на русском и стоит кажись 500 р. ![]() |
Автор: MyNick 13.10.2005, 14:14 |
а конкретнее как с помощь его реализовать древовидную структуру... Добавлено @ 14:14 так вот то то и оно..) |
Автор: MyNick 13.10.2005, 14:29 |
подскажите плиз как хоть установить взаимосвязь компонентов и подключить к базе... ![]() |
Автор: offline 13.10.2005, 14:44 |
TreeView к базе не подключишь. в ADOConnection устанавливаешь связь с базой. в ADOTable ставишь источник данныу ADOConnection и задаешь таблицу в DBGrid связываешь с ADOTable через DataSource а как создать DBTreeView читай здесь www.delphikingdom.ru/helloworld/dbtreeview.htm |
Автор: MyNick 13.10.2005, 14:57 |
как к самой базе подключить то понятно именно не получается связать все это в кучу... может причина в том что голова сеня уже соображать никак не хочет) спасибо за помощь, если чего еще обращусь) |
Автор: Vet 13.10.2005, 16:54 |
MyNick, если у тебя есть EHLib, то для начала надо было посмотреть Demos'ы и посмотреть, как там реализовано дерево в DBGridEh'e. По-моему, там даже что-то было на русском написано ![]() |
Автор: MyNick 13.10.2005, 17:10 |
первым делом в Demos'ы и полез) нашел там то что хотелось бы реализовать у себя, но к сожалению по русски там ниче нет а с ковырянием вот проблемы возникли.... |
Автор: offline 13.10.2005, 17:26 | ||
посмотри здесь ...\EhLib\AdvTech\MemTableEh\readme_rus.rtf
|
Автор: Vet 13.10.2005, 17:27 |
В каталоге MemTableEh файл readme_rus.rtf, правда толку от него мало. Если инфы по-русски нет, то только ковыряние и поможет ![]() |
Автор: offline 13.10.2005, 17:32 | ||
Vet
А яего не ковырял, а немного посмотрел ![]() |
Автор: Vet 13.10.2005, 20:33 | ||
Это же легко проверить. Создаем тестовую таблицу с 3-мя полями: ID, PARENT_ID, VALUE. Если изменять в гриде, изменения сохраняются для поля VALUE. PARENT_ID же не изменяется |
Автор: offline 13.10.2005, 20:54 |
Создать то можно, просто возиться не охота ![]() ![]() |
Автор: MyNick 14.10.2005, 08:56 |
EhLib\AdvTech\MemTableEh\readme_rus.rtf у меня почему то нет...если не сложно вышлине на мыло.. как я понял TMemTableEh тока формирует данные в табличном виде, а каким образом он связывается с DBGrigEh и отображает их? |
Автор: MyNick 14.10.2005, 09:25 |
если все у вас просто получается то объясните мне какие компоненты кидать на форму, какие свойства у кого как выставить, что б они наконец то связались все в кучу... ![]() |
Автор: offline 14.10.2005, 09:58 |
Давай мыло |
Автор: MyNick 14.10.2005, 10:04 |
[email protected] |
Автор: offline 14.10.2005, 10:18 | ||
берешь ADOConnection1 и подключаешься к базе в которой должны бать три обязательных поля. Названия полей не важны, например: ID - Числовое поле ID_PARENT - Числовое поле Name - строковое поле затем ADOTable1 и подключаешься к базе и выбираешь таблицу. затем DataSetDriverEh1 в KeyFilds имя ключевого поля указываешь ID ProviderDataSet = ADOTable1 Затем MemTableEh1 в DataDriver = DataSetDriverEh1 забыл еще ![]() DataSource1 в DataSet = MemTableEh1 DBGridEh1 в DataSource = DataSource1 и в
при создании ветви в ID заносишь ее номер, а в ID_PARENT заносишь номер ветви родителя, если родителя нет, то ставишь 0 И самое главное, что бы сохранить изменения в таблице используй MemTableEh1.ApplyUpdates, а то все изменения теряются, когда программа закрывается, т.к. они хранятся в таблице памяти. |
Автор: MyNick 14.10.2005, 12:48 |
спасибо большое буду разбераться сделал все как написал никаких проблем не возникло... теперь надо DBGrid осваивать) |
Автор: Vet 15.10.2005, 11:41 |
По-моему, древовидная структура в гриде не очень-то и нужна ![]() |
Автор: offline 15.10.2005, 15:44 |
ну кому как, но я тоже не приветствую ![]() |
Автор: MyNick 17.10.2005, 06:49 |
а где она приветствуется?) |
Автор: Vet 17.10.2005, 11:45 |
В дереве ![]() |
Автор: offline 17.10.2005, 11:53 |
но дерево к гриду замучаешься клеить ![]() |
Автор: MyNick 18.10.2005, 11:35 |
эх... поставил еще Quantum Grid но вот с связкой блин никак разобраться не могу... покажите плиз наконец то как Grid связывается с таблицей и как же все таки отобразить данные в виде дерева... ![]() |
Автор: offline 18.10.2005, 17:15 |
А что с EhLib не получилось? |
Автор: Vet 18.10.2005, 17:21 | ||
MyNick, Ehlib не понравился ![]()
Кидаешь на форму компоненты: DataSource, DataSet которого = ADOTable1 и cxDBTreeList, разворачиваешь свойство DataController, указываешь свой DataSource, выбираешь KeyField и ParentField. Дальше открываешь редактор Bands/Columns cxDBTreeList'a, добавляешь поля TcxDBTreeListColumn. У каждого TcxDBTreeListColumn'а в свойстве DataBinding.FieldName выбираешь имя поля таблицы ADOTable1 |
Автор: MyNick 19.10.2005, 08:27 |
а что за компонент cxDBTreeList? |
Автор: MyNick 19.10.2005, 09:19 |
кстати хотел выразить благодарность за собранный материал в DRKB ver. 2.3, много полезной информации там нашел ![]() |
Автор: Vet 19.10.2005, 11:53 |
Из ExpressQuantumTreeList, а у тебя что - ExpressQuantumGrid? |
Автор: MyNick 19.10.2005, 13:18 |
ага понятно получилось а с помощью чего можно редактировать количество и содержимое столбцов в запущенной программе и естественно что б данный сохранялись в базу и еще как связать лист с гридом что бы он отображал содержимое соотвествующей строки в листе.... ![]() ![]() |
Автор: MyNick 19.10.2005, 14:35 |
при чем насколько понимаю данные должны выбираться с другой таблица и выводится в гриде, получается надо кинуть еще одну table и один DataSource и насторить на них grid , а вот как связать list с grid связать пока не понял... |
Автор: Vet 19.10.2005, 17:13 | ||
А что получилось? Компонент-то какой у тебя - cxDBTreeList? Вопросы задавай поконкретнее ![]() |
Автор: Guest 19.10.2005, 17:46 |
да компонент именно cxDBTreeList, просто не нашел у него свойства DataController , по смыслу понял потом что это DataSource) а вопросы пока остаются прежними.Необходимо что бы одна таблица была связана с cxDBTreeList а другая с Grid и установить их взаимосвязь (при выборе в листе отображаются данные с другой таблице в гриде) |
Автор: Vet 19.10.2005, 21:41 |
Я так понял, в cxDBTreeList у тебя отображаются данные главной таблицы, в "Grid" - подчиненной. Значит, надо в Grid.DataSource.DataSet указать MasterSource = cxDBTreeList.DataController.DataSource.DataSet ![]() ![]() |
Автор: MyNick 20.10.2005, 13:25 |
таблица взаимосвязать получилось теперь вопрос заключается в следующем почему не получается редактировать данные в treelist и как разделить столбцы grid -а на подстолбцы?) |
Автор: Vet 21.10.2005, 22:20 | ||||
Сложна сказать, все должно редактироваться, тем более если отображаются данные из таблицы, а не запрос какой-нибудь. Попробуй все удалить и сделать все сначала ![]() ![]()
|
Автор: offline 22.10.2005, 15:07 | ||||
Он говорит о том, как двум столбцам сделать один заголовок, т.е. как это DBGridEh делает. |
Автор: Vet 22.10.2005, 20:23 |
А,так надо заглянуть в свойство Position нужных столбцов, свойство BandIndex. После двойного щелчка на компоненте ты попадаешь в редактор, в котором 2 вкладки - Bands и Columns. Каждый столбец находится в определенной Band'e. Вот и создай столько Band, сколько нужно и для каждого столбца задай Position.BandIndex |
Автор: FRAGNATIC 30.10.2005, 23:10 |
у меня древовидноя БД с неогрониченым уровнем вложености тоесть у раздела может быть куча подразделов а у подразделов тоже могут быть подразделы и так далее всё это отоброжается в тривиеве (вопрос не в отоброжении ) типа раздел1 -- раздел2 ---- раздел3 -- раздел4 раздел5 хранится это всё в таблице Tree структура её такая Name-имя раздела ID - ключивое поле ParentID - ID родителя тоесть головнова раздела) и вот возник вопрос как удалять раздел так чтобы и все его подразделы и подразделы подразделов удалились ведь их может быть бесчётное кол-вл или одним даже SQL запросм типа DELETE FROM Tree WHERE ID in (SELECT ID FROM Tree WHERE ParentID in (здесь ещё чё-то)) ни каких постороних компонентов прошу не предлогать =) |
Автор: NatikB 5.1.2006, 19:25 |
http://forum.vingrad.ru/html/emoticons/inlove.gif![]() |
Автор: AKN 18.9.2006, 15:18 |
FRAGNATIC, почитай на http://gsbelarus.com/gs/modules.php?name=News&file=print&sid=314 все вроде нормально описано |
Автор: Akella 22.9.2006, 14:06 |
делай всё напрямую, через MemTable-это всё равно что кушать черер попу вот форма Добавлено @ 14:07 главное - это заполнить дерево для этого нужно 2 поля ID и Parent_ID принцип такой - заполняй сначала самый первый уровень, а при раскрытии уровня подгружай его "детей" |