Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Использование DevExpress

Автор: vcrank
Дата сообщения: 05.07.2006 13:50
Никак не могу разобраться с TdxDBTreeView =(. Может кто-нибудь, кто работал с этим деревом скинет небольшой примерчик работы с ним.
Буду признателен
Автор: KIRILLKV
Дата сообщения: 05.07.2006 15:05
Бьюсь с начала дня
Подключил detail TableView в cxGrid в режиме DetailInSQLMode, открываются и показываются правильно(вроде правильно поставил ключи Master, Detail). Но при перемещении стрелками по записям(сначала мастер, потом детайл, снова мастер вниз) затем при перемещении наверх не хочет входить в детайл, а потом AV. Кто-нибудь встречался с этим?

Добавлено:
vcrank
Там есть демки, но я сам перешёл на TreeList
Автор: vcrank
Дата сообщения: 05.07.2006 16:21
KIRILLKV
Качал девы у китайцав. В архиве были демки, но по работе с TdxDBTreeView - нет =(
Автор: jicoff
Дата сообщения: 05.07.2006 16:42
vcrank

У меня есть демки от версии 1.3.2
Автор: vcrank
Дата сообщения: 05.07.2006 16:47
jicoff
Можно тогда демку для DBTreeView на vic87mailru
Автор: jicoff
Дата сообщения: 05.07.2006 16:55
KIRILLKV

С такой проблемой встречался, но это было более 2-х лет назад. Детайлы почти в на каждой форме, но таких проблем уже нет. Вообще грид плохо работает, если не задан KeyFieldNames. Надо задать это свойство и у MasterView, и у DetailView. У DetailView - DetailKeyFieldNames и MasterKeyFieldNames. Еще определяю события DataController.DataModeController.OnDetailFirst и DataController.DataModeController.OnDetailIsCurrentQuery. Все работает.

Добавлено:
vcrank

Забыл уточнить, демки у меня под Билдер. Возможно есть под Делфи, не берусь утверждать, надо в закромах порыться. Если устроит под Билдер вышлю.
Автор: vcrank
Дата сообщения: 05.07.2006 17:31
jicoff
Лучше под Delphi ...
Автор: xokc
Дата сообщения: 05.07.2006 20:26
KIRILLKV
KeyFieldNames для Master/Detail жизненно необходимы. Без них получишь то, что уже собственно и получил.
Автор: korobovmax
Дата сообщения: 05.07.2006 20:32

Цитата:
Еще определяю события DataController.DataModeController.OnDetailFirst и DataController.DataModeController.OnDetailIsCurrentQuery. Все работает.


jicoff, а это откуда вывелось, после каких экспериментов теперь стабильно делаешь?
Автор: hobest
Дата сообщения: 06.07.2006 00:07
korobovmax

Все зависит от того, с какими компонентами ты работаешь. Для ADO, BDE и IBX уже реализована связка мастер-детейл, с учетом того, что в детейл компонентах параметры соответствуют MasterKeyFieldNames, т.е. поля из мастера DataSet, перечисленные в свойстве MasterKeyFieldNames, соответствуют параметрам для детейл DataSet. Если это условие не выполняется, тогда надо определить события: DataController.DataModeController.OnDetailFirst и DataController.DataModeController.OnDetailIsCurrentQuery.
Автор: vcrank
Дата сообщения: 06.07.2006 06:50
Нашёл на сайте www.devexpress.com демку для дерева (http://www.devexpress.com/Downloads/VCL/ExDBTree/files/etreedemo.zip) правда без исходников. Похоже я неправильно понял назаначение этого компонента. Я думал, что он умеет отображать в виде дерева связанные таблицы, т.е. в корне дерева список всех значений ключевого поля таблицы, а при их выборе отображаются записи из другой таблицы... А компонент работает только с одной таблицей...
Видимо придётся ручками дерево строить, вот только потом надо придумать как обработать навигацию по тому дереву
Автор: KIRILLKV
Дата сообщения: 06.07.2006 08:45
xokc
Key конечно проставлены (иначе, вообще, работать не будет)
Так вот, результаты танцев с бубном.
Key detail-a получался при помощи ф-ции NewID() MSSQL (генерит GUID), заменил на генерацию int. Обнаружил, что Grid при перемещении между детайлами пытается подстроится под значение Key из предыдущего детейла. Отключил синронизацию у TableView детайла - заработало как надо(и с ключом по GUID тоже).
А как програмно в Master-e вызвать механизм перечитывания своего уже открытого detail-a после POST?(ключевое поле не меняется, в detail - история по master-у)

Добавлено:
Получилось так:
Попробовал после POST вызывать DoDetailFirst DataModeControllera предварительно изменяя параметр DataSet-a detaila. Заработало
Потом просто закрыл DataSet-a detaila, изменил пар-р на NULL(так у меня ничего не возвращает) и открыл detail, cxGrid сам входит в проверку валидности своего detail-a и всё работает
Автор: jicoff
Дата сообщения: 06.07.2006 11:48
KIRILLKV

А на какое событие ты синхронизацию делаешь?
Автор: mad0max
Дата сообщения: 06.07.2006 11:55
vcrank

А чем тебя в этом плане cxGrid не устраивает? Он замечательно работает с таблицами master-detail


Автор: vcrank
Дата сообщения: 06.07.2006 13:08

Цитата:
А чем тебя в этом плане cxGrid не устраивает? Он замечательно работает с таблицами master-detail

Да я уже подумываю использовать сетку...
Автор: KIRILLKV
Дата сообщения: 06.07.2006 13:54
jicoff
У меня используется свой компонент, кот объединяет клиентский датасет и провайдер, редакция построчная, после записи провайдером в БД, генерю своему компоненту событие OK или ОШИБКА. Вот при получении OK и перечитываю detail. При варианте построчного сохранения на обычном компоненте это будет, наверное, AfterPost.

Добавлено:
Кстати, никто не может поделиться bat файлами компиляции DevExpress ???
(Постов не хватает, чтобы брать из обменника, а июньские девки скачал у кит. по полной)
Автор: jicoff
Дата сообщения: 06.07.2006 14:22
KIRILLKV

Не понял, у тебя для каждой master записи свой detail DataSet?
Автор: KIRILLKV
Дата сообщения: 06.07.2006 15:58
jicoff
Конечно нет, но detail стоит в режиме DetailInSQLMode, при котором вызывается получение данных из DataSet(у меня ADOStoredProc) для нужной записи master-a(пар-ры процедуры - ключ мастера).

При редакции даты в гриде при открытии редактора(календарика) попал на EconvertError ('0.0' is not valid timestamp). Это проблемы константы NullDate в cxDateUtils, которая здесь обсуждалась? Редактор не DB прекрасно работает.


Проблема с '0.0' is not valid timestamp оказалась никак не связана с DevExpress
Ошибка происходила на DataSet.FieldByName('DB').OldValue=Null, когда она действительно Null
Автор: jicoff
Дата сообщения: 06.07.2006 16:46
KIRILLKV

Тогда странно, что у тебя проблемы с синхронизацией. У меня, как правило, больше параметров в detail DataSet, чем необходимых полей в master'е, поэтому использую упоминавшиеся выше события DataController.DataModeController. Да и компонент использую, для которого Борланд не реализовывал связку мастер-детейл.

Кстати, перечитываю текущий детей связкой DataSet.DisableControls/DataSet.EnableControls, а между ними какой нибудь параметр сбрасываю в 0 или NULL.
Автор: VAbramyak
Дата сообщения: 07.07.2006 00:33
Всем привет!
Есть sqlquery c параметрами. Хотел сделать ввод параметров через VerticalGrid
Но как в делфи его заполнить не понял! Нужно для каждого параметра вставить строку в ней вписать название параметра и выставить EditProperties соответственно типу параметра! Всем спасибо кто поможет!
Автор: makz
Дата сообщения: 07.07.2006 01:42
VAbramyak
procedure TRekvForm.FormCreate(Sender: TObject);
var MyRow:TcxCustomRow;
begin
MyRow:=cxVerticalGrid1.Add(TcxEditorRow);
with MyRow as TcxEditorRow do begin
Properties.EditPropertiesClass:=TcxMRUEditProperties;
Properties.Caption:='MyPar';
end;
end;
Автор: mad0max
Дата сообщения: 07.07.2006 04:39
vcrank

Дак а что думать? бери пользуй... это намного проще (именно для твоей задачи), чем иметь гемморой с TreeList
Автор: vcrank
Дата сообщения: 07.07.2006 06:00
mad0max
Просто TreeView привычнее выглядит...
Автор: jicoff
Дата сообщения: 07.07.2006 11:19
vcrank

Дело не только в том, что TreeView привычнее выглядит, но в гриде больше 2-х уровней смысла делать не имеет. Пользователи начинают путаться и отказываются работать в таком варианте. Правда вопрос стоял о TdxDBTreeView, предлагаю пользоваться TcxDBTreeList.
Автор: SerjP75
Дата сообщения: 07.07.2006 12:02
Пытаюсь в связке Master-Detail (cxGrid), вносить данные через буфер обмена(выбранная колонка - несколько записей). В Master TableView вносится нормально (через MasterView.Controller.FocusedColumn.EditValue := S1)
А как вносить в Detail? (аналогичный способ не сробатывает)
Автор: jicoff
Дата сообщения: 07.07.2006 12:20
SerjP75

Это, наверное, потому что ты пытаешься вставить данные не в конкретный DetailView, а в "pattern" view. "Pattern" view нужен только как прототип для создания клонов DetailView, которые ты реально и видишь на экране, т.е. каждой мастер записи соответствует свой клон. Если cxGrid.FocusedView = DetailView (клон), то проблем не должно быть. Если = MasterView, то MasterView.Controller.FocusedRecord надо преобразовать к TcxGridMasterDataRow, а у него есть свойство ActiveDetailGridView, что тебе и нужно
Автор: vcrank
Дата сообщения: 07.07.2006 13:33

Цитата:
Правда вопрос стоял о TdxDBTreeView, предлагаю пользоваться TcxDBTreeList.

А разве он умеет отображать связи 2-х и более таблиц?
Автор: jicoff
Дата сообщения: 07.07.2006 14:11
vcrank

Нет, работает с одним DataSet.
Автор: makz
Дата сообщения: 10.07.2006 10:47
vcrank

Цитата:
А разве он умеет отображать связи 2-х и более таблиц?

DBFlyTreeViewPro вроде умеет.
Автор: vcrank
Дата сообщения: 11.07.2006 06:13

Цитата:
DBFlyTreeViewPro вроде умеет.

Если я правильно понял, то компонент платный =(. За поиском "бесплатной версии" обязательно надо обращаться в другой топик (http://forum.ru-board.com/topic.cgi?forum=35&topic=30992)?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Kylix


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.