Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)

Модерирует : ShIvADeSt

ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

   

golkanavt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DevExpress

Обмен опытом, обсуждение нюансов и решение проблем возникающих при использовании библиотеки компонент Developer Express




 
Сами прирученные компоненты частенько приходят на водопой сюда
 
DLL со скинами из библиотеки dxSkins, автор Ziltoid Подробнее... линк обновлен
Продолжение, Первая часть, вторая часть

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 10:31 07-02-2009 | Исправлено: vladman, 14:36 24-10-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ATAWA
ну вообще то все проверки на существование родителя и получение значения нового ключа делаются непосредственно перед вставкой записи в БД... это может быть реализовано на клиенте или на сервере... если возникают какие то проблемы то пользователя необходимо оповестить об этом, но данные которые он вводил не потерять!
автоматического обновления данных просто так не добиться... в SDAC'e есть компонент для получения сообщений об изменении данных на сервере, но он работает с 2005 сервером... у FIB+ есть возможность отлавливать события сгенерированные в БД FireBird и InterBase... в ADO конечно же всего такого нету...
можно попробовать написать поток который бы мониторил изменения в таблице, по таймеру например... вариантов решения думаю можно еще накопать... тут дело в фантазии просто...

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 10:21 25-06-2009
ATAWA

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f3ka
 
Спасибо.
Я так приблизительно и предполагал.
Ну что-ж, будем фантазировать, копать и писать

Всего записей: 10 | Зарегистр. 21-02-2003 | Отправлено: 10:40 25-06-2009
SlavZa

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
f3ka
вот картинка, может будет понятней -
   

Всего записей: 2 | Зарегистр. 24-06-2009 | Отправлено: 11:10 25-06-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ATAWA

Цитата:
Если с одного клиента добавить запись в дерево и потом с другого клиента без реопена датасета добавлять запись на тот же уровень дерева, возникает ошибка уникальности по первичному ключу (ID+PARENT_ID) в таблице дерева

 
А как это у вас так получается? Как генерируется айдишник? Какая структура таблицы?

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 11:32 25-06-2009
ATAWA

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser

Цитата:
А как это у вас так получается? Как генерируется айдишник? Какая структура таблицы?

 
Так вот в том весь и фикс-пикус, что хотелось обойтись малой кровью используя связку DbTreeView и ADOTable, при этом все операции юзера в дереве DbTreeView САМ транслирует в БД (в том числе и генерацию ID он сам делает).
Но проблема в том что гладко это работает в однопользовательском варианте, а при многопользовательской работе встроенного функционала DbTreeView не хватает, чтобы обработать все коллизии.  
Придется похоже дописывать самостоятельно.
п.с. Структура табицы классическая для дерева: ID, Parent_Id, Name...

Всего записей: 10 | Зарегистр. 21-02-2003 | Отправлено: 12:25 25-06-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ATAWA
 
Если ID генерируется сиквенсом, то вы никак не получите ошибку уникальности ключа ID + PARENT_ID,  
по этому я и спрашиваю как у вас генерируются ID?

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 12:38 25-06-2009
ATAWA

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser
 

Цитата:
Если ID генерируется сиквенсом, то вы никак не получите ошибку уникальности ключа ID + PARENT_ID,  
по этому я и спрашиваю как у вас генерируются ID?

 
Я же говорю, ID и ParentId генерируется встроенными механизмами DbTreeView (у него свойства есть ID и ParentId, на которые назначаются соответствующие поля моей таблицы).
Сиквенсов, триггеров и обработчиков в коде клиентского приложения поидее никаких нинадо, и поэтому я их и не делал изначально.
Я не лазил в код этих механизмов DbTreeView, но они не могут корректно сгенерить ID (NewKeyValue) при многопользовательской работе, возникает ошибка ключа по уникальному полю ID.
Сейчас я эту проблему в принципе уже решил, перехватывая событие  OnCreateNewKeyValue DbTreeView и генерируя ID там самостоятельно.
Наверное помог бы и вариант сиквенс+триггер на серваке.
Просто изначально думалось, что DbTreeView сам справиться в сетевом варианте, как он справляется в локальном ан нет, отсюда и все мои вопросы...

Всего записей: 10 | Зарегистр. 21-02-2003 | Отправлено: 13:26 25-06-2009
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser
 
Вообще-то вопрос резонный, зачем создавать новый стиль: GetCellStyle. Если у айтема не было стиля, то при вызове этого метода он создается. А нужно ли это, вопрос!

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 13:27 25-06-2009
ecix

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пара вопросов для одной задачи:
 
1. Как можно перечислить строки в cxGrid в том порядке, в котором они отсортированы, включая те, которые не открыты (при группировке)? Они, как я понимаю, вообще не существуют пока пользователь не раскрыл соответствующую ветку.
 
2. Как можно отледить события сортировки или группировки колонок? Надо сделать некоторые манипуляции над строками, после того как их порядок изменился. События cxGrid.DataController.OnSortingChanged и OnGroupingChanged не вызываются после соответствующих действий (да и описаний их я нигде не нашел)
 

Всего записей: 3 | Зарегистр. 19-02-2009 | Отправлено: 13:27 25-06-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ATAWA
 
Если посмотришь на код:

Код:
 
function TdxDBTreeView.GetNextMaxKeyValue: Variant;
begin
  Result := DBTreeNodes.MaxKeyFieldValue;
  if Assigned(FCreateNewKeyValue) then
    FCreateNewKeyValue(nil, Result)
  else
    try
      if not VarIsNULL(Result) then
        Result := Result + 1  
      else
        Result := 0;
    except
    end;
end;
 

 
то увидишь, что если не указан обработчик FCreateNewKeyValue, то компонент просто берет максимальное значение ключа + 1, поэтому у тебя возникал конфликт для многопользовательской программы.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 13:37 25-06-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ecix

Цитата:
Как можно отледить события сортировки или группировки колонок? ... События cxGrid.DataController.OnSortingChanged и OnGroupingChanged не вызываются

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

Цитата:
да и описаний их я нигде не нашел

ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_OnGroupingChanged.htm
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_OnSortingChanged.htm

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 14:00 25-06-2009
Roma4ke

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как реализовать на С++ ???  
type  (мой класс)TcxCustomGridTableItemWrapper = class(какойто классTcxCustomGridTableItem);

Всего записей: 21 | Зарегистр. 24-06-2009 | Отправлено: 14:03 25-06-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ecix

Цитата:
Как можно перечислить строки в cxGrid в том порядке...

Посмотреть в сторону TcxCustomDataController.ForEachRow
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_ForEachRow.htm

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 14:05 25-06-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Roma4ke
ну наверно как то так

Код:
 
class TcxCustomGridTableItemWrapper: public TcxCustomGridTableItem

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 14:13 25-06-2009
Roma4ke

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser
 вроде сделал так :создал тип  
typedef   class TcxCustomGridTableItem TcxCustomGridTableItemWrapper;
 
TcxCustomGridTableItemWrapper(tvTestGoPaus).GetCellStyle->Assign(cxButtonEdit1->Style);  -- но все равно GetCellStyle недоступен ((

Всего записей: 21 | Зарегистр. 24-06-2009 | Отправлено: 14:19 25-06-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
jicoff

Цитата:
Вообще-то вопрос резонный, зачем создавать новый стиль: GetCellStyle. Если у айтема не было стиля, то при вызове этого метода он создается. А нужно ли это, вопрос!

 
Где видно что я создаю новый стиль? Я вызываю метод получения текущего стиля. Сам стиль инициализируется намного раньше.
 
Roma4ke
Что это за переменная tvTestGoPaus?
 
Добавлено:
f3ka выше написал как нужно объявить класс.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 14:25 25-06-2009
Roma4ke

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser
tvTestGoPaus - имя TcxGridColumn.
 
 
class TcxCustomGridTableItemWrapper: public TcxCustomGridTableItem {};
выходит ошибка , которая говорит что не может сгенерировать стандартный конструктор, нужно еще как то конструкторы создать ((

Всего записей: 21 | Зарегистр. 24-06-2009 | Отправлено: 14:30 25-06-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
К сожалению с С++ не работаю. Для Delphi пример рабочий, проверял.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 14:35 25-06-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Roma4ke
может тогда поучиться писать сначала какие то более простые вещи? это же основы основ... даже не знаю что еще сказать...  
З.Ы. здесь топик то все таки по Delphi, а не C++

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 14:43 25-06-2009 | Исправлено: f3ka, 14:46 25-06-2009
Roma4ke

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
(( и DevExpress походу все для делфи делали а не для с++ . в хелпе такой функции не нашел даже getcellstyle

Всего записей: 21 | Зарегистр. 24-06-2009 | Отправлено: 14:47 25-06-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)
ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru