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

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

Автор: jicoff
Дата сообщения: 19.09.2006 11:29
X11

((dbg as TcxGridSite). GridView as TcxGridDBTableView).DataController.DataSource.DataSet, например.
Автор: mickolam2004
Дата сообщения: 19.09.2006 11:56
уважаемые коллеги!
никто не натыкался на отрицательное влияние "хитрых" устройств,
типа чтения отпечатков пальцев (секюрити такая как в ноутбуках),
на стабильность работы приложения с девэксами? а то есть предположение,
что прога как-то не адекватно себя ведет...
Автор: X11
Дата сообщения: 19.09.2006 11:57
jicoff
компилятор ругается
[Pascal Error] uApart.pas(1214): E2010 Incompatible types: 'TcxGridDBTableView' and 'TcxGridSite'

procedure TfmApartSearch.ShowApartAdd(dbg:TObject);
Var
ID:integer;
DataSet : TDataSet;
begin

if (dbg is TDBGridEh) then
DataSet := (dbg as TDBGridEh).DataSource.DataSet;

if (dbg is TcxGridSite) then
DataSet := ((dbg as TcxGridSite) as TcxGridDBTableView).DataController.datasource.dataset;
...

Добавлено:
jicoff
уже всё нормально забыл про .gridview

Добавлено:
а так можно?

if (grid is TcxGridSite) then begin
dxComponentPrinter1Link1.Component := ((grid as TcxGridSite).GridView as TcxGrid);
dxComponentPrinter1.Preview(true);
end;
блин, нельзя, а как правильно?? Подскажите, а...

вот так получилось
if (grid is TcxGridSite) then begin
dxComponentPrinter1Link1.Component := ((grid as TcxGridSite).Container as TcxGrid);
dxComponentPrinter1.Preview(true);
end;
Автор: clear2121
Дата сообщения: 19.09.2006 13:17
uranic2
Вообщем разобрался, только проблемка. У меня есть DATA, где имеются разные коды. По ним я потом получаю дополнительные данные. Только на OnFocusedNodeChanged получается их нормально получить. Но вылазят траблы - форма при загрузке не раскрывается на весь экран. сворачиваешь-разворачиваешь - все нормально. Как обойти этот трабл, где еще можно нормально получать данные из DATA при перемещении по таблице?

СПАСИБО!
Автор: uranic2
Дата сообщения: 19.09.2006 13:49
clear2121

Цитата:
Но вылазят траблы - форма при загрузке не раскрывается на весь экран. сворачиваешь-разворачиваешь - все нормально. Как обойти этот трабл, где еще можно нормально получать данные из DATA при перемещении по таблице?

вот здесь я не понял
Автор: clear2121
Дата сообщения: 19.09.2006 14:03
uranic2

Цитата:
вот здесь я не понял

1. У TcxTreeListNode есть свойство DATA, куда можно засунуть все, что угодно. Я засылаю структуру с кодами для работы. Потом мне надо получить эти коды.
2. Форма установлена в МАКСИМИЗЕД, т.е. она должна развернутся на весь экран.

если я в TreenFocusedNodeChanged помещаю код для получения данных из DATA, то форма появляется такая, как в дезайнере. приходится сворачивать и разворачивать. Тогда все работает нормально. Пробовал в TreenSelectionChanged - таже беда. У них в примере они получают DATA в TreenSelectionChanged.

Где еще при перемещении выделения можно корректно получить данные из DATA?
Автор: jicoff
Дата сообщения: 19.09.2006 14:36
clear2121

Мне не понятен один момент, при таком подходе, грузить по мере необходимости, режим использования дерева должен быть bound или provider. Но в этом режиме не рекомендуется использовать свойство DATA. Меня подобный подход тоже интересует, только не решил с чего начать.

Кстати, выше изложенный пост так же остался не понятен.
Автор: uranic2
Дата сообщения: 19.09.2006 15:56
clear2121
Может у тебя какой компонет лежит, который запоминает положение формы? Вот она и не максимизируется...
Я не использовал свойство Data, просто сделал еще невидимые колонки, и в них запихнул нужные данные.
Автор: russko
Дата сообщения: 19.09.2006 16:07
Доброго времени суток.
Появился небольшой вопрос по компоненту ExpressScheduler 2.
А именно: при наступлении времени определенного события высвечивается диалоговое окно (Оповещение), в котором представлен список событий, краткая информация о событии, время события, кнопки: прекратить, отложить (dismiss,dismiss all,snooze). Вопрос, каким образом на эту форму можно разместить кнопу "Open Item", т.е. по нашему "Подробнее..." чтобы можно было прочитать остальную занесенную информацию? На скринах на сайте Devexpress эта кнопа есть... СПасибо.
Автор: jicoff
Дата сообщения: 19.09.2006 19:31
uranic2

Думаю еще лучшим решением является создать свой наследник от TcxTreeListNode с нужным количеством свойств.
Автор: bigsov
Дата сообщения: 20.09.2006 01:49
ArtemiyUO,pitpjp,RedPromo
СПАСИБО ОГРОМНОЕ ВАМ!!! Получилось!!!!! Воспользовался всеми рекомендациями!
Дело оказалось в том, что я когда вычищал старые версии, я искал только файлы cx*.*(а надо было искать еще dx*.*!)
а в папке windows\system32 вкралась dxTheme7! И конечно же она и выдавала глюк!
Спасибо всем огромное!
При этом я еще на всякий случай скопировал все файлы в одну папку - и ЗАРАБОТАЛО! УРА!

Автор: clear2121
Дата сообщения: 20.09.2006 03:55
uranic2

Цитата:
Может у тебя какой компонет лежит, который запоминает положение формы? Вот она и не максимизируется...

Нет, это именно из-за TcxTreeList. На форме он один. Повторюсь

Цитата:
если я в TreenFocusedNodeChanged помещаю код для получения данных из DATA, то форма появляется такая, как в дезайнере.

jicoff
Этот подход я использую давно, еще со времен TreeView. Если юзать DB компоненты, то база со 150 000 записей с MS SQL сервера просасывается ООООООООчень долго. Выход - юзать простые компоненты. Но таблицы связаны по ключу. Можно установить релейшены в таблицах. Но все это очень медленно. Поэтому я делаю так:
1. Получаю главные ветки. Здесь же добавляю DATA (обычно структура с кодами)
2. При движении по дереву из DATA получаю код и делаю запрос на сервер, где из нужных таблиц получаю данные.
3. При открытии поддерева просасываю только нужные данные.

Работает очень быстро. На пне 166 с 32 Мб памяти запрос на 1 000 записей проходит за 2-3 сек.

Я думал о скрытых полях. В некоторых проектах есть такой подход. Но это как то не красиво. ИМХО.
Вообще, здесь есть люди, кто купил официально Девок? Могут они задать вопрос производителям? Или можно самому?
Спасибо за советы!

Добавлено:
jicoffuranic2
Разобрался. Проблема в следующем. У меня в FocusedNodeChanged записано
cxLabel1->Caption = (String)((CodeWork*)AFocusedNode->Data)->ID;
Т.е вывожу код на визуальный компонент для проверки. Стоило написать
tmp = ((CodeWork*)Treen->FocusedNode->Data)->ID;
Все нормально. Значит нельзя выводить на компонент. Только в переменную.

Автор: uranic2
Дата сообщения: 20.09.2006 08:49
clear2121

Цитата:
Если юзать DB компоненты, то база со 150 000 записей с MS SQL сервера просасывается ООООООООчень долго

Понятное дело прокачать 150 000 записей по сети, потом под них выделить память (навряняка программа уйдет в своп) - не быстрое дело
clear2121

Цитата:
Можно установить релейшены в таблицах

Хм. Не понятно как это может увеличить скорость всасывания 150 000 записей.
Дальше рассуждаешь правильно


Цитата:
Я думал о скрытых полях. В некоторых проектах есть такой подход. Но это как то не красиво. ИМХО

Ну может быть не очень красиво, но зато быстро. Немного выше jicoff посоветовал, на мой взгляд, самый правильный способ - наследник от TcxTreeListNode. Советовать devexpress по каждому поводу не станут, твой вопрос из серии какой оператор стоит использовать WHILE или UNTIL REPEAT
Автор: Alex47
Дата сообщения: 20.09.2006 10:20
russko

Цитата:
Вопрос, каким образом на эту форму можно разместить кнопу "Open Item"


Для того, чтобы появился 'Open Item' в диалоге Reminder нужно иметь обработчик:

procedure TfScheduler.SchedulerDBStorageRemindersOpenEvent(
Sender: TcxSchedulerReminders; AEvent: TcxSchedulerControlEvent);
begin
Scheduler.EditEventUsingDialog(AEvent);
end;

Это описано где-то в Help: 'Open event' button is visible when the event is
assigned.
Автор: Sexton
Дата сообщения: 20.09.2006 12:06
clear2121
Цитата:
Если юзать DB компоненты, то база со 150 000 записей с MS SQL сервера просасывается ООООООООчень долго. Выход - юзать простые компоненты.

Выход - не засасывать 150К записей (интересно, а сами программеры пробуют работать с 150К записей одновременно в своих программах?) и использовать в DB-компонентах GridMode.
Автор: X11
Дата сообщения: 20.09.2006 14:32
есть ли у TdxMemData что-то вроде Borow Strucute, как у MemData из пакета Jeddi(JVCL) или из пакета EhLib (MemTeble)???
Автор: jicoff
Дата сообщения: 20.09.2006 15:16
clear2121

А сам то компонент DB или нет? Есть 2 подхода.

1. Использовать DB компонент и DataSet и при раскрытии узлов записи добавлять туда.

2. Не использовать DB компонент и каким-то образом самому заботиться о хранении записей.

Какой предпочтительней?
Автор: zvAndrey
Дата сообщения: 20.09.2006 17:46
X11
в дизайнере кажется нет, в рантайме метод - CreateFieldsFromDataSet
Автор: jicoff
Дата сообщения: 20.09.2006 18:09
X11

А так же CreateFieldsFromStream
Автор: X11
Дата сообщения: 21.09.2006 09:53

Цитата:
X11 в дизайнере кажется нет, в рантайме метод - CreateFieldsFromDataSet

ОЧЕНЬ ПЛОХО
Автор: sunduk4
Дата сообщения: 21.09.2006 10:39
Подскажите, как сетку сделать в DbCardView?
Автор: russko
Дата сообщения: 21.09.2006 10:49
Alex47
Большое спасибо, помогло )
Автор: X11
Дата сообщения: 21.09.2006 12:47
Народ, подскажите, как определить выделенный (сфокусированный) столбец?
в какую сторону рыть?
Автор: xitsmex
Дата сообщения: 21.09.2006 20:21
Итак, есть вопросы по стандартным багам VCL и их решениям. Покопался в инете - не отыскал. Хочется совета: в какой версии devEx пофиксено и пофиксено ли? Вопросы привел к классам VCL, это, конечно, баги VCL, но не саму ж VCL править, а наследников. А это - DevEx.
1. Описание: TScrollBox, контрол внутри него. Некорректное скроллирование при переходе фокуса на внутренний контрол TScrollBox`a.
Детали: Если в TScrollBox есть большой контрол(наследник от cxControl в моем случае, но не принципиально), прокручиваем его куда хотим (фокус на него не ставим, только полосками прокрутки!). Затем ставим фокус на внутренний контрол (кликаем по нему) - ScrollBox прокрутится к самому началу.
Пример: На фому TScrollBox, в него - TStringGrid БЕЗ собственных полос прокрутки, но по размеру больше, чем TScrollBox. Еще на форму TEdit - для масовки. Кликаем в Edit, прокручиваем полосы в ScrollBox в правый нижний угол, кликаем на угловой ячейке - вуаля, ScrollBox прокручивается на (0,0) и выделяет на часть таблицы.
2. Описание: TListView (TcxListView) продолжает процесс выделения, если был exception (messagebox) после события WM_LBUTTON_DOWN.
Детали: Если при нажатии левой кнопкой мыши из-за потери фокуса другим контролом нпоявится message box (например, вследствие exception), то после закрытия messagebox будет наблюдаться выделение в ListView.
Пример: На форму TListView с MultiSelect = true и Edit (снова масовка), у Edit:
procedure TfmDemo.cxTextEdit1PropertiesEditValueChanged(Sender: TObject);
begin
if TcxTextEdit(Sender).EditValue = 'A' then
raise Exception.Create('A');
end;
Вводим в Edit 'A', нажимаем на ListView - exception. Жмем Ok - вуаля, в ListView бегают полосы выделения.
Автор: clear2121
Дата сообщения: 22.09.2006 05:21
Sexton

Цитата:
и использовать в DB-компонентах GridMode.

Что то не получилось. Для построения дерева ему надо всю базу, чтоб знать где есть дочерние, где нет. Пробовал и так и без. Все равно долго.
jicoff

Цитата:
А сам то компонент DB или нет? Есть 2 подхода.     1. Использовать DB компонент и DataSet и при раскрытии узлов записи добавлять туда.   2. Не использовать DB компонент и каким-то образом самому заботиться о хранении записей.   Какой предпочтительней?

Сам компонент - не DB. Я использую второй. Очень быстро получается.


Автор: Alex47
Дата сообщения: 22.09.2006 09:23
X11

Если не путаю, что-то примерно так:

View.Controller.FocusedColumnIndex

View.Controller.FocusedColumn

View.Controller.FocusedItem

TcxGridItemDBDataBinding(TableView.Controller.FocusedColumn.DataBinding).FieldName
Автор: clear2121
Дата сообщения: 22.09.2006 11:01
Подскажите.
В TcxTreeList вставляю пустую строку (qTels->FieldByName("PR")->AsInteger) и хочу всю ее красным сделать. Как?

Не могу получить значение в ячейке. У меня
void __fastcall TForm1::Col5GetDisplayText(TcxTreeListColumn *Sender,
     TcxTreeListNode *ANode, AnsiString &Value)
{
    if ( Value == "0" )
    {
        Value = "да";
    }
    else
    {
        Value = "нет";
    }
}
Это всегда возвращает НЕТ. Как получить?

Спасибо!

Добавлено:
Вставляема строчка TcxTreeListNode *NullData = Node->AddChild();

Добавлено:
И еще. А можно ли в этом компоненте в ячейку еще набор данных воткнуть? Вроде как таблица в ячейке
Автор: X11
Дата сообщения: 22.09.2006 11:51
А позволяет ли сетка DevExpress множественное выделение строк через одну, например.
Т.е. выделить нужно первую, с третей по пятую и восьмую, ну как в EhLib??
заранее спасибо
Автор: dimonadv
Дата сообщения: 22.09.2006 13:04
Может кто уже сталкивался ?
Надо чтобы филда из датасета не отображалась в диалоге фильтрации, в общем списке доступных полей для фильтра.

Пробовал так. Она не отображается в сетке и это нормально, а в диалоге фильтрации есть.

grd1DBTableView1.DataController.CreateAllItems;
CurColumn := grd1DBTableView1.GetColumnByFieldName('RecId');
if Assigned(CurColumn) then
begin
CurColumn.Visible := False;
CurColumn.Hidden := True;
end;

Как убрать ?
Автор: JackOff
Дата сообщения: 22.09.2006 13:29
X11

Можно. Вот кусок из хелпа для грида



Цитата:
Use the MultiSelect property to determine whether multiple rows can be selected within a view. This is implemented by navigating a view with the Ctrl or Shift keys pressed. This applies to keyboard and mouse navigation. The Shift key is used to select a range of rows, and the Ctrl key is used to select non-sequential rows.

Refer to the Selecting Records section for more information.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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