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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
maratea

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman
Прошу прощения, действительно пропустила, ибо обратила внимание только на начало сообщения. Спасибо) тот способ тоже попробую, вдруг получится.
 
Строчка формируется в OnGetDisplayText, но при попытке выставить AUseNativeFormat = False все вообще повисло, а потом вылетело. К тому же, если я правильно понимаю, это немного не то, поскольку экспортируются всё равно именно Values, а этот параметр просто задает формат, в котором они должны быть представлены в Excel.
 
Похоже, надо-таки браться за собственный экспорт. =\ все равно пригодится еще...
 
UPD. первая проблема разрешилась, спасибо огромное!)
правда, это только начало)

Всего записей: 14 | Зарегистр. 17-12-2009 | Отправлено: 11:48 23-12-2009 | Исправлено: maratea, 12:43 23-12-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
может все таки if DataSet1.Locate('ID', i2,[] ) then Continue; тормозит? записей дубликатов много?

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 12:03 23-12-2009
vladman

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

Цитата:
К тому же, если я правильно понимаю, это немного не то, поскольку экспортируются всё равно именно Values, а этот параметр просто задает формат, в котором они должны быть представлены в Excel.

Посмотрите здесь: Export to Excel - Display texts, not actual values

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 14:02 23-12-2009
maratea

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman
хм, там написано именно то, что вы говорили. Значит, буду ловить свою ошибку.
 
UPD. Сработало! Так и не поняла, в чем была проблема) Спасибо огромное!

Всего записей: 14 | Зарегистр. 17-12-2009 | Отправлено: 14:07 23-12-2009 | Исправлено: maratea, 14:15 23-12-2009
vladman

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

Цитата:
Вот код, может я что-то забыл?

Действительно, зачем  if DataSet1.Locate('ID', i2,[] ) then Continue;  
Locate - это крайне медленная операция, если еще взять во внимание, что для DataSet1 может быть определен обработчик AfterScroll. Намного быстрее будет очистить весь DataSet1 и заполнить новыми данными без дополнительных проверок.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 14:10 23-12-2009
X11



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

Цитата:
может все таки if DataSet1.Locate('ID', i2,[] ) then Continue; тормозит? записей дубликатов много?

Записей даже очень мало. До сотни.
Даже на 10 записей заметно медленно работает.
 
Добавлено:

Цитата:
Действительно, зачем  if DataSet1.Locate('ID', i2,[] ) then Continue;  

чтобы второй раз не добавлять в таблицу одни и те же записи
 
Добавлено:

Цитата:
Намного быстрее будет очистить весь DataSet1 и заполнить новыми данными без дополнительных проверок.

Нет, логика отправки во вторую таблицу такова:
Пользователь выполнил поиск записей согласно требуемых параметров, они отобразились в гриде. Он выделил несколько записей и отправил в спец. таблицу, назовём её Таблица отбора. Далее пользователь может выделить ещё отсортировать, отфильтровать грид, затем опять отправить несколько записей в таблицу отбора. Затем указать новые параметры поиска и сделать выборку из базы, не теряя данные в таблице отбора, и опять из новой выборки выделенные записи отправить в таблицу отбора. Чтобы потом с записями в таблице отбора что-то делать: редактировать, печатать, экспортировать и т.д.
Раньше была связка везде MemTable + DBGridEh, а сейчас всё девовское. Работает медленно. Не могу понять в чём дело.
Вот только что проэесперементировал. 10 записей выделил и отправил в таблицу отбора - 7 секунд. А если 100 записей то и думать боюсь. Это при том, что проц двухядерный интел и 2 гига памяти.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 14:27 23-12-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
как я вижу, проверка на уникальность по одному полю, может сделать какой нить TList и туда заносить добавленные записи, а поиск на уникальность делать не по датасету, а по TList... возможно все таки оно спасет от тормозов...

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 14:38 23-12-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UPD
 
ПопробуЮ. А что-то типа индексов нет у dxMemData?
 

Цитата:
может сделать какой нить TList  

Попробую с массивом работать, массив легче и быстрее списка.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 15:07 23-12-2009 | Исправлено: X11, 15:10 23-12-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
возможно есть, но мне особо не надо было никогда...
и я еще одну вещь заметил в коде... почему не делаете DataSet1.DisableControls? он ведь на сколько я понимаю привязан к гриду? если так, то тормоза именно из-за того что при Locate, а также при Append грид пытается перерисовываться...

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 15:11 23-12-2009
vladman

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

Цитата:
DisableControls

Еще лучше использовать <YourcxGridDBTableView>.BeginUpdate/EndUpdate при выполнении "больших" скроллингов/удалений/вставок

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 15:46 23-12-2009
X11



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

Цитата:
почему не делаете DataSet1.DisableControls? он ведь на сколько я понимаю привязан к гриду? если так, то тормоза именно из-за того что при Locate, а также при Append грид пытается перерисовываться...

При отправке данные в таблицу отбора (DataSet1) грид невидим, т.к. два грида лежат на одном и том же PageControl`е, но на разных страничках.
 
В любом случае спасибо за замечание, обязательно попробую и DisableControls и совет vladman`а

Цитата:
<YourcxGridDBTableView>.BeginUpdate/EndUpdate

 


----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 16:36 23-12-2009
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
Из всего что говорили другие все имеет место.
Но мне кажется, что на 10 записях все равно не должно тормозить.
Включены ли скины, они тоже неплохо "помогают".
Настоятельно рекомендую "профайлить" проект, ну например с помощью AutomatedQA AQTime. Потому как неприятность может быть в другом, ну например в образовании нескольких скрытых вложенных циклов, Вы думавете что цикл по 10 записям, а оказывается в каждом  из десяти еще по 9, в котором еще по 8 и т.д.
 
Добавлено:

Цитата:
А что-то типа индексов нет у dxMemData

Да имеется.

Цитата:
Попробую с массивом работать, массив легче и быстрее списка.

Может оказаться, что Вы не правы. List и есть массив, плюс реализация "защиты" от дубликатов. Мне кажется что dxMemData наиболее оптимальный вариант с точки зрения объемов написания собственного кода.

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 16:44 23-12-2009
X11



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

Цитата:
Настоятельно рекомендую "профайлить" проект, ну например с помощью AutomatedQA AQTime.

К моему великому сожалению, я не знаю, что такое "профайлить" и про AutomatedQA AQTime только слышал. За то есть к чему стремиться )))
 

Цитата:
Включены ли скины, они тоже неплохо "помогают".  

Нет, всё в NativeStyle. Приложение ужасно тормозит при использовании скинов для грида.
 

Цитата:
Вы думавете что цикл по 10 записям, а оказывается в каждом  из десяти еще по 9, в котором еще по 8 и т.д.  

Угу, будем смотреть, спасибо за подсказки и замечания.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 16:54 23-12-2009
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И еще, я пропустил, что за движок ДБ Вы используете, может вместо Locate можно что-то типа "select count(Id) where Id = <параметр>".

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 16:56 23-12-2009 | Исправлено: V1s1ter, 17:01 23-12-2009
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Чего то понять не могу.  
Есть девовский грид, есть в нем уровень один, в котором есть DB TableView, есть второй уровень со своим DB TableView. В датасете первого уровня установлен AfterScroll, при котором обновляется датасет для второго TableView. Данные получаются, но почему-то во втором TableView ничего не показывается. В чем собака зарыта?

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 17:00 23-12-2009
V1s1ter



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

Цитата:
сожалению, я не знаю, что такое "профайлить" и про AutomatedQA AQTime только слышал

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

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 17:00 23-12-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cryogen2003
а точно для второго уровня не потеряли DataBinding?
еще возможно что где то используется BeginUpdate/EndUpdate для второго TableView, вроде нельзя так делать (это не точно)

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 17:12 23-12-2009
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
f3ka
BeginUpdate для второго TableView убрал, все равно пусто

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 17:14 23-12-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cryogen2003
то есть хочется сделать Master-Detail средствами cxGrid? тогда наверно не правильно построена логика программы... нет необходимости вручную делать выборку для данных второго уровня...

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 17:22 23-12-2009
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
f3ka
АГА, именно так. Но пока еще не понял, где я дурак.
 
Добавлено:
Объясни, что должен установить для Master и Detail

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 17:23 23-12-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