Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перейти к записи при раскрытии нода cxGrid 
V
    Опции темы
former
Дата 3.9.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Имеется связка MasterDetail (два DataSet). Для отображения данных используется cxGrid (DevExpress). 
При раскрытии нода уровня Master приходится выделять строку, что бы появились данные уровня Detail.
Хочу сделать, что бы при раскрытии нода остальные ноды сворачивались и автоматические подгружались данные Detail.
Сворачивание всех нодов (кроме выбранного) делаю так:
Код

procedure TForm1.CourseViewDataControllerDetailExpanding(
  ADataController: TcxCustomDataController; ARecordIndex: Integer;
  var AAllow: Boolean);
begin
  CourseView.DataController.CollapseDetails;
end;

Для полного счастья не хватает перехода к записи на уровне Master, нод которой раскрыли, что бы появились данные уровня Detail. Как это можно сделать?

Почему я так хочу сделать. При выделении одной записи в Master, у других записей в уровне Detail пропадают данные и появляется надпись (нет данных). 

Может я что-то вообще не так делаю?
Документацию читал. Примеры в ней смотрел.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 3.9.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Что-то я наверное туплю, не понял, что нужно. Можно с рисунками?
PM MAIL   Вверх
former
Дата 3.9.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Скорее всего это я запутанно объяснил.
Данные получаю из DataSet-ов, связанных Master-Detail.
user posted image
На картинке фокус установлен на первую запись Master-уровня, для которого выведен Detail.
На других записях Master-уровня Detail пуст. Появляется при переходе на соответствующие записи. 
Что бы скрыть "отсутствие данных", как я писал в первом посте, сворачиваю все ноды кроме текущего.
Если открывать нод без выделения соответствующей строки (записи) в Master-уровне, то данные Detail не появляются.
user posted image
Говоря еще проще, необходимо, что бы при открытии нода Master-уровня осуществлялся переход к соответствующей записи, что бы появились данные Detail-уровня.

Akellaты вроде бы уже давно работаешь с DevExpress, должен знать. Это я только начал с ними разбираться.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 3.9.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Я с master-detail очень мало работал. Посмотрю попозже.
PM MAIL   Вверх
former
Дата 3.9.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Да тут Master-detail не причем. Даже, если присутствует группировка средствами грида, то при раскрытии нода происходит тоже самое.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 3.9.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Там свойств дофига, ты, видать, включил какое-то, которое показывает записи только у выделенной записи. Поищи его.

Добавлено через 47 секунд
Или сделай на новом, чистом, гриде. И не балуйся со свойствами, они как нож - можешь невзначай оттяпать себе кое-чего  smile 
PM MAIL   Вверх
former
Дата 3.9.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



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


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 3.9.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



У тебя правильно заполнены ключевые поля?

Добавлено через 30 секунд
Ты сами датасеты не связывал с помощью Datasource?
PM MAIL   Вверх
former
Дата 4.9.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Akella @  3.9.2009,  19:49 Найти цитируемый пост)
Ты сами датасеты не связывал с помощью Datasource? 

Связывал.
Запрос Master DataSet:
Код

SELECT
    C.COURSEID,
    C.COURSENAME,
    C.HOURS,
    C.DEPARTMENTID,
    D.SDEPNAME,
    C.CSACTUALITY
FROM COURSES  AS C
    INNER JOIN DEPARTMENTS AS D
    ON D.DEPARTMENTID = C.DEPARTMENTID

Запрос Detail DataSet:
Код

SELECT
    C.COURSEWORKID,
    C.COURSEID,
    EW.EWORKID,
    EW.EWORKNAME
FROM COURSEWORKS  AS C
    INNER JOIN EWORKS AS EW
      ON EW.EWORKID = C.EWORKID
WHERE C.COURSEID = :COURSEID

У Detail Datasource = Master Datasource.
А в гриде view Detail-уровня имеет следующие настройки:
user posted image

Это сообщение отредактировал(а) former - 4.9.2009, 00:33


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
  Дата 4.9.2009, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(former @  4.9.2009,  00:32 Найти цитируемый пост)
Связывал.

Вооот! А зачем связывать два раза. Вот этим ты себе и оттяпал остальные записи!
Сам подумай, что в детальном НД ты всегда будешь видеть только те записи, которые связаны с ВЫДЕЛЕННОЙ МАСТЕР-ЗАПИСЬЮ, потому что остальных записей в детальном НД просто не будет. Догадываешься?

Добавлено через 47 секунд
Надо всегда давать более полную информацию, уже давно бы решили твою проблему smile
PM MAIL   Вверх
former
Дата 4.9.2009, 14:09 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Так я пробовал еще до создания темы. Как я заметил, косяк заключается в том, что при наличии соединения (JOIN) отображается только одна строка во всех Detail. Если из запроса убрать соединение, то все нормально. Но мне без соединения никак.

При всех достоинствах DevExpress они имеют кучу недостатков, к моему сожалению/

Это сообщение отредактировал(а) former - 4.9.2009, 14:10


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 4.9.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Ты так ничего и не понял.

Добавлено через 53 секунды
Цитата(former @  4.9.2009,  14:09 Найти цитируемый пост)
они имеют кучу недостатков

Приведи _хотябы_ 25 из всей кучи smile

Добавлено через 1 минуту и 45 секунд
Цитата(former @  4.9.2009,  14:09 Найти цитируемый пост)
Но мне без соединения никак.

ТАК ОТКУДА ТЕБЕ ДЕТАЛЬНЫЙ ГРИД ВЫСОСЕТ ДАННЫЕ, ЕСЛИ ИХ НЕТ
PM MAIL   Вверх
former
Дата 4.9.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Akella @  4.9.2009,  15:59 Найти цитируемый пост)
Приведи _хотябы_ 25 из всей кучи

Ну 25 не наберу, пока. smile 
Цитата(Akella @  4.9.2009,  15:59 Найти цитируемый пост)
ТАК ОТКУДА ТЕБЕ ДЕТАЛЬНЫЙ ГРИД ВЫСОСЕТ ДАННЫЕ, ЕСЛИ ИХ НЕТ 

Откуда, откуда... Из DataSet-а, из которого он данные берет. Там ведь JOIN присутствует.
Думаю, что мы говорим немного о разном. Я сделаю пример и выложу.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 4.9.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(former @  4.9.2009,  16:14 Найти цитируемый пост)
Откуда, откуда... Из DataSet-а, из которого он данные берет. Там ведь JOIN присутствует.

Как ты не понимаешь. Детальный грид должен видеть в своём датасете (к которому подключен) ВСЕ записи. ВСЕ!. Грид сам будет тебе показывать то, что ты хочешь.

Сделай 2 датасета. Никаких привязок и соединений между собой. К первому датасету прикрути мастер-грид, ко второму детальный грид. В гриде укажи ключевые поля.
PM MAIL   Вверх
former
Дата 4.9.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Akella @  4.9.2009,  16:18 Найти цитируемый пост)
Как ты не понимаешь. Детальный грид должен видеть в своём датасете (к которому подключен) ВСЕ записи. ВСЕ!. Грид сам будет тебе показывать то, что ты хочешь.

Сделай 2 датасета. Никаких привязок и соединений между собой. К первому датасету прикрути мастер-грид, ко второму детальный грид. В гриде укажи ключевые поля. 


Akella, не горячись. Я делал именно то, о чем ты говоришь. Думаю, что бы избежать разногласий я набросаю пример того, что делал.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 4.9.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(former @  4.9.2009,  16:37 Найти цитируемый пост)
Akella, не горячись. Я делал именно то, о чем ты говоришь. Думаю, что бы избежать разногласий я набросаю пример того, что делал. 

желательно с dxMemTable, чтобы без лишних телодвижений

Добавлено @ 16:49
Цитата(former @  4.9.2009,  16:37 Найти цитируемый пост)
Akella, не горячись. 

 smile гаразд.  smile 
Я просто однажды так же как и ты попался. Связал 2 датасета по ключевому полю и не мог понять, почему в детальном гриде записи не все видны.

Это сообщение отредактировал(а) Akella - 4.9.2009, 16:50
PM MAIL   Вверх
former
Дата 4.9.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Akella @  4.9.2009,  16:48 Найти цитируемый пост)
желательно с dxMemTable, чтобы без лишних телодвижений

dxMemTable, говоришь...   smile Вот в нем все и дело, а точнее в его отсутствии. smile +
Как же я сразу не догадался. В примерах с BDE ее нет.
Вопрос решен.

ОФФ: ржунимагу

Это сообщение отредактировал(а) former - 4.9.2009, 17:31


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 6.9.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(former @  4.9.2009,  17:28 Найти цитируемый пост)
Вопрос решен.

А подробнее ,что сделал-то хоть?


Цитата(former @  4.9.2009,  17:28 Найти цитируемый пост)
ОФФ: ржунимагу

почему?
PM MAIL   Вверх
former
Дата 7.9.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Akella @  6.9.2009,  17:47 Найти цитируемый пост)
А подробнее ,что сделал-то хоть?

dxMemTable добавил. Вот и все. Остальное в мануале достаточно хорошо описано.
Вот только не понятно, почему данные в dxMemTable  не подгружаются автоматически, и каким образом добавлять и обновлять записи через dxMemTable?
Цитата(Akella @  6.9.2009,  17:47 Найти цитируемый пост)
почему? 

Над собой. smile 


Это сообщение отредактировал(а) former - 7.9.2009, 00:32


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 7.9.2009, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(former @  7.9.2009,  00:30 Найти цитируемый пост)
Вот только не понятно, почему данные в dxMemTable  не подгружаются автоматически, 

1. А откуда они должны подгружаться?
2. Я dxMemTable тебе советовал только для создания примера.
3. Какие компоненты доступа и какую СУБД ты использовал до этого?

Добавлено через 1 минуту и 18 секунд
Цитата(former @  7.9.2009,  00:30 Найти цитируемый пост)
и каким образом добавлять и обновлять записи через dxMemTable

Работай также, как и с обычным НД.
PM MAIL   Вверх
former
Дата 7.9.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Akella @  7.9.2009,  08:24 Найти цитируемый пост)
1. А откуда они должны подгружаться?
2. Я dxMemTable тебе советовал только для создания примера.
3. Какие компоненты доступа и какую СУБД ты использовал до этого?

1. Из DataSet-та.
2. Правильно советовал. Их Demo-примеры построены на BDE, для которых MemTabel не требуется, сам понимаешь.
3. СУБД FB 2.5. До этого пользовался ЕhLib, в которой, кстати, достаточно связать DataSet с MemTable и все, данные подгружаются при активации.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
  Дата 7.9.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(former @  7.9.2009,  10:29 Найти цитируемый пост)
До этого пользовался ЕhLib, в которой, кстати, достаточно связать DataSet с MemTable и все, данные подгружаются при активации. 

Это не значит, что разработчики DevExpress должны брать за стандарт MemTable из ЕhLib.
Кстати у MemTable из ЕhLib вначале было другое предназначение. Грид из ЕhLib сам не мог нормально фильтровать и строить древовидные структуры а-ля группирование в cxGrid, т.е. грид нужно бюло подключать к другому набору данных через ж MemTable. Мало того, MemTable из ЕhLib был очень глючный, не знаю, как щас.

Это сообщение отредактировал(а) Akella - 7.9.2009, 12:47
PM MAIL   Вверх
former
Дата 7.9.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Akella @  7.9.2009,  12:41 Найти цитируемый пост)
Это не значит, что разработчики DevExpress должны брать за стандарт MemTable из ЕhLib.

Я об этом и не говорю.
Просто пытаюсь разобраться, как с MemTable работать в DevExpress.
Кинул я а форму dxMemTable. Выполнил Assign Data From (DataSet). Все вроде бы нормально, Detail в Desigtime и Runtime отображаются. Однако, если другой пользователь редактировал данные в БД, то Memtable они не попадают при перезапуске программы, т.е. нужно каким-то образом загружать данные при старте программы и, соответственно, очищать. Вот это и не понятно.

Добавлено через 3 минуты и 11 секунд
Цитата(Akella @  7.9.2009,  12:41 Найти цитируемый пост)
Грид из ЕhLib сам не мог нормально фильтровать и строить древовидные структуры а-ля группирование в cxGrid, т.е. грид нужно бюло подключать к другому набору данных через ж MemTable.

А в cxGrid для Detail тоже используется MemTable, не смотря на то, что группировка осуществляется самим гридом. Есть подозрение, что для группировки грид тоже использует MemTabel, только скрытую от пользователя. 


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 7.9.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(former @  7.9.2009,  13:19 Найти цитируемый пост)
Просто пытаюсь разобраться, как с MemTable работать в DevExpress.

Как с обычным TDataSet + некоторые свои методы и нюансы. У "девок" это как бы самостоятельный НД. Но там есть методы загрузки структуры и данных с других НД.
1. Правой кнопкой щёлкни, там будет меню AssignData. По-моему в этом случае он будет сам "следить" за данными родительского НД. Точно не знаю.


2. Во время исполнения программы можно использовать его родные методы... обрати внимание на те, которые начинаются на Create, Load и Save

Это сообщение отредактировал(а) Akella - 7.9.2009, 14:02
PM MAIL   Вверх
former
Дата 7.9.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Akella @  7.9.2009,  14:02 Найти цитируемый пост)
1. Правой кнопкой щёлкни, там будет меню AssignData. По-моему в этом случае он будет сам "следить" за данными родительского НД. Точно не знаю.

Я в предыдущем посте именно про это и написал, что  AssignData - это разовая загрузка данных.
Цитата(Akella @  7.9.2009,  14:02 Найти цитируемый пост)
2. Во время исполнения программы можно использовать его родные методы... обрати внимание на те, которые начинаются на Create, Load и Save

Именно этим сейчас и занимаюсь.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1356 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.