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

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman
В том то и дело что инсертить буду прямо в дерево, потому, как читаю файло абсолютно не похожее на БД.. И анализировать предков до 5 (?) а то и более уровней вложенности тяжковасто будет.. А при инсерте в дерево использую рекурсивную функцию.. По большому счету это создание модели дерева клиентов.. Потому и интересует как себя ведет смарт-рекорд, вот сегодня уже откомпилю и померяю время как с смарт, так и без него.. И отпишусь о результатах..

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 09:52 27-02-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я вспомнил. Я давно уже включил смартрекод. И у меня далеко не 1000 записей в таблице. Работает нормально.

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

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister Floh
Уточнение понятно. Мое мнение таково, что исходя из механизма работы Smart record loading, при его установке вставка в дерево будет происходить тем дольше чем в большее количество различных веток  будут добавляться новые элементы. Причина - fetch и загрузка записей из БД. При не установленном Smart record loading все записи уже будут загружены при первоначальном построении дерева.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть cxGrid, в нём TcxGridTableView. Т.е. обычный грид без привязки к базе. Какой наиболее правильный и быстрый способ найти там что-нибудь.
Допустим, что там есть текстовая колонка. Нужно найти запись, содержащую заданный текст. Может быстрее будет проверить, есть ли строки у таблицы с таким-то текстом.
Дело в том, DataController не содержит ни locate, ни lookup.
 
А строк может быть в гриде очень много. Бежать пос строкам - это накладно.
 
Добавлено:
Странность какая-то.
Добавляю из текстового файла в грид строки. Нужно пропускать дубли.

Код:
 
Grid1.BeginUpdate;
....
For i :=0 to slFile.count - 1 do begin
 
      if cboxSkipDuplicates.Checked then begin
        iRecIndex := Grid1.DataController.FindRecordIndexByText(0, colText.Index, slFile[i], false, false, true);
        if not VarIsNull(iRecIndex) and (iRecIndex > -1 ) then
          ShowMessage(IntToStr(iRecIndex));
      end;
 
....
 

 
Во время работы процедуры переменная iRecIndex всё время возвращает -1.
 
Но при повторном проходе (когда уже строки таблицы отобразились) - уже всё нормально. Хотя я проверяю, записи в грид добавляются при первом проходе и одинаковые строки точно есть.
 
Добавлено:
Если закоментировать  
//  Grid1.BeginUpdate;
То всё отлично. Как быть? Привязывать грид к MemTable не буду.
 
Добавлено:
Хоть бери, да держи массив строк в дополнение

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 18:02 27-02-2009 | Исправлено: X11, 18:49 27-02-2009
afiget



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

Цитата:
Привязывать грид к MemTable не буду.

Отчего так категорично?
 
Добавлено:
Кстати, а потом с этими данными что делаешь? Если в базу, то какие компоненты используешь? Например, аналог MemTable он AnyDAC умеет делать уникальный ключ по колонке (случай дубликата можно обработать).

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 19:29 27-02-2009
X11



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

Цитата:
Отчего так категорично?  

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

Цитата:
Кстати, а потом с этими данными что делаешь?

Потом пользователь просматривает таблицу, некоторые данные пихает в базу.
 
Добавлено:
Видать, придётся HashedStringList ещё в памяти держать. Вроде умные девки, а такое творят ((
 
Добавлено:
Ну вобщем передал пока что на использование THashedStringList (hsl)
 

Код:
 
      if cboxSkipDuplicates.Checked then begin
        if hsl.Find(slFile[i], iRecIndex) then Continue;
      end;
 
 

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 19:44 27-02-2009
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну и нормально. По крайней мере, памяти меньше будет занимать, чем MemTable. Если данных много, то и скорость должна быть выше.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 22:04 27-02-2009
Meister Floh



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

Цитата:
вот сегодня уже откомпилю и померяю время как с смарт, так и без него..

Так вот господа.. Как и ожидалось со смартом наполнение таблицы работает:

     
  • медленно;
     
  • криво;
     
  • обработка post для таблицы просто утомляет

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

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 13:05 01-03-2009 | Исправлено: Meister Floh, 13:18 01-03-2009
lorents



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
простите за тупой вопрос что такое DevExpress и "с чем его едят"?
если можно ссылку что это, желательно на русском?

Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 13:53 01-03-2009
deadbitch



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Какая же это хрень ComboBox в VerticalGrid, убил час времени на осознание того, что там в принципе нельзя задать текущий item. Спрашивается - за что платятся деньги, за компоненты без самых простых свойств.
 
Сорри накипело. Пришлось юзать ImageComboBox.

Всего записей: 340 | Зарегистр. 13-01-2005 | Отправлено: 14:39 01-03-2009
infomSB



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
Используй для поиска DataController.Search там есть методы и Locate  и LocateNext, т.е. практически все что надо.
 
deadbitch
Все отлично, если вы не разобрались, это не значит что компонент плохой или не работает. Телепатов тут нет, поэтому в чем проблема мы никак не поймем...
Вы так пробовали:  
  <Row>.Properties.Value :=   TcxComboBoxProperties(<Row>.Properties.EditProperties).Items[0];
 
Добавлено:
lorents
Один из самых популярных и крупных пакетов платных компонентов для Delphi и BCB. Здесь в основном обсуждается работа с БД.

Всего записей: 75 | Зарегистр. 17-03-2006 | Отправлено: 16:44 01-03-2009
brookson



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
народ, помогите переложить с одного языка на другой (кажется девки имеют для различных языков разный набор функций и свойств, или я не прав??).
нашёл на сайте поддержки пример почти как у меня:
http://www.devexpress.com/Support/Center/p/Q94859.aspx
разница лишь в том, что у меня есть Total Sum, Total Average, а мне надо вывести процент в третьем Total-e (Custom), базируясь на Total (Sum) и grand total для данной строки этого же столбца.
Вышел из положения с помощью такого вот кода, но мне он не нравится (SUMSERV - это столбец, в для которого всё считается,  а всего есть 2 столбца faData):

Код:
procedure TF_REPORTS.SUMSERVGetDisplayText(Sender: TcxPivotGridField;
  ACell: TcxPivotGridDataCellViewInfo; var AText: string);
var
 a1, a2: double;
begin
begin
if GridZV2F.ViewData.RowCount<2 then exit;
 
if acell.IsTotal then begin
  if acell.SummaryType=stCustom then begin
     if gridZV2F.ViewData.CellsAsText[acell.RowIndex-2,acell.ColumnIndex]='' then
        a1:=0
     else
        a1:=strtofloat(gridZV2F.ViewData.CellsAsText[acell.RowIndex-2,acell.ColumnIndex]);
     if gridZV2F.ViewData.CellsAsText[acell.RowIndex-2,GridZV2F.ViewData.ColumnCount-2]='' then
        a2:=0
     else
        a2:=strtofloat(gridZV2F.ViewData.CellsAsText[acell.RowIndex-2,GridZV2F.ViewData.ColumnCount-2]);
     atext:=floattostr(round(a1*100/a2))+'%';
  end;
end;
 

очень уж не даёт покоя это GetRowGrandTotal. было бы как раз то, что нужно.

Всего записей: 139 | Зарегистр. 06-09-2007 | Отправлено: 17:31 01-03-2009 | Исправлено: brookson, 17:35 01-03-2009
Andrey128

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как сделать перемещение (reorder) закладок мышкой в TcxPageControl (TcxTabControl) покрасивше?
Имеется ввиду, не просто в событии OnDragOver вычислять IndexOfTabAt(X, Y), а чтобы как в Делфи 2007 делается перемещение закладок или перемещение колонок в TcxGrid.
Может кто в этом направлении копал, поделитесь идеями, а?

Всего записей: 408 | Зарегистр. 16-01-2003 | Отправлено: 07:10 04-03-2009
brookson



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
э-эх! что, ни у кого никаких мыслей?

Всего записей: 139 | Зарегистр. 06-09-2007 | Отправлено: 10:44 04-03-2009
vladman

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

Цитата:
Как сделать перемещение (reorder) закладок мышкой в TcxPageControl (TcxTabControl) покрасивше?

По ссылке есть пример.
How to reorder the pages in the ExpressPageControl via drag-and-drop
 
Для  

Цитата:
чтобы как в Делфи 2007 делается перемещение закладок

можно немного подправить метод cxPageControl1DragOver (см. пример dxKB_1056.zip (2253 bytes)) -  
 

Код:
procedure TForm1.cxPageControl1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
var
  Index: Integer;
begin
  with TcxPageControl(Sender) do
  begin
    Index := IndexOfTabAt(X, Y);
    Accept := (Index > - 1);// and (Pages[Index] <> TmyDragObject(Source).Tab);
    if Index > - 1 then TmyDragObject(Source).Tab.PageIndex := Index;
  end;
end;

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 14:37 04-03-2009 | Исправлено: vladman, 14:41 04-03-2009
Andrey128

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman
Спасибо за идею.
Прикрутил, к приведенному вами примеру, TcxDragAndDropArrow и получил то что хотел.

Всего записей: 408 | Зарегистр. 16-01-2003 | Отправлено: 08:22 05-03-2009
deadbitch



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

Цитата:
Все отлично, если вы не разобрались, это не значит что компонент плохой или не работает. Телепатов тут нет, поэтому в чем проблема мы никак не поймем...
Вы так пробовали:  
  <Row>.Properties.Value :=   TcxComboBoxProperties(<Row>.Properties.EditProperties).Items[0];  

 
Мне нужно было при открытии формы указать в одном из EditorRow, который ComboBox, что у него должно быть значение с индексом "таким-то", но такой возможности нет напрямую. Так как ты указал я не пробовал, обошёлся ImageComboBox, где задавая Properties.Value я получаю, что КомбоБокс отображает Item с этим Value (Value получается как индекс айтема).  
 
Вообще говоря до сих пор не понимаю, почему ВертикалГрид такая .. кхм.. странная, она же не полностью вписывается в их унификацию встроенных редакторов. Почему нельзя её реализовать в полной мере - не ясно.

Всего записей: 340 | Зарегистр. 13-01-2005 | Отправлено: 11:26 05-03-2009
sam291074



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

Цитата:
Мне нужно было при открытии формы указать в одном из EditorRow, который ComboBox, что у него должно быть значение с индексом "таким-то", но такой возможности нет напрямую.

А нужно ли напрямую? Если знаешь индекс, значит знаешь и значение записи. Ведь Вы не индекс хотите видеть на экране, а элемент ComboBox. Далее, зная значение можно вызвать IndexOf(Значение) и получите Index. А зная Index полю можно присвоить Value  

Код:
Row->Properties->Value =  ((TcxComboBoxProperties*)(Row->Properties->EditProperties))->Items->Strings[Index];

Помню где-то читал, есть такая концепция: отдельно отображение, отдельно запись, отдельно сохранение (или что-то в этом роде). Похоже здесь что-то подобное.

Всего записей: 113 | Зарегистр. 22-03-2006 | Отправлено: 21:59 05-03-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему AV возникает?
 
Неужели, кроме создания во время исполнения программы самого грида, нужно ещё и создавать вьюху  уровень??

Код:
 
Var
 grid: TcxGrid;
 ds: TDataSource;
begin
.....
      grid := TcxGrid.Create(nil);
      ds   := TDataSource.Create(nil);
      try
        ds.DataSet := ftFIB;
 
 
на этой строке AV
        (grid.ActiveView as TcxGridDBTableView).DataController.datasource := ds;
 
 

 
Добавлено:
Есть ли в cxGrid процедура создания все колонок сразу в рантайме?
 
Добавлено:
Нашёл
AView.DataController.CreateAllItems(False);

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 22:00 05-03-2009
vladman

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

Цитата:
Почему AV возникает? Неужели, ....

 
Ужели. Нужно, даже необходимо
не мы ж такие, жизнь такая
 
Объекты типа TcxGrid - это только контейнер для Views, причем Views могут иметь иерархию(уровни), и также могут быть нескольких типов:  
- Table View (TcxGridTableView and TcxGridDBTableView)
- Banded Table View (TcxGridBandedTableView and TcxGridDBBandedTableView)
- Card View (TcxGridCardView and TcxGridDBCardView)
- Chart View  
 
Создавая эти уровни и необходимые типы View вы и получаете то, что необходимо в каждом конкретном случае.
 
А AV возникает так как объект grid.ActiveView еще не создан.
 

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 01:33 06-03-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