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

» Использование DevExpress (часть 4)

Автор: X11
Дата сообщения: 09.07.2013 12:26
а где beginUpdate/endUpdate ?
Автор: reenoip
Дата сообщения: 09.07.2013 12:28
А где именно они должны быть?
Автор: X11
Дата сообщения: 09.07.2013 12:31

Цитата:
Какие будут предложения и способен ли вообще cxGrid на подобный подвиг?

способен и миллионами ворочать
Пусть пользователь поставит SSD, значительно больше памяти, и проц типа Core i7 или выше

Добавлено:
До начала операции и после окончания операции

Добавлено:
Deeptown12, отобрази индикаторы.
ты уверен, что правильно заполнены поля типа KeyFields/MasterFields/DetailKey? Непосредственно у самих НД есть ли ключевые поля? Правильно ли они выбираются из базы?
Автор: reenoip
Дата сообщения: 09.07.2013 12:47
Ок, сделал так:


Код: procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
i: integer;
s: string;
begin
cxGrid1DBTableView1.BeginUpdate();
cxGrid1DBTableView1.DataController.Filter.Active:=false;
with cxGrid1DBTableView1.DataController.Filter.Root do
begin
Clear;
BoolOperatorKind:=fboOr;
s:='%' + Edit1.Text + '%';
for i:=0 to cxGrid1DBTableView1.ColumnCount -1 do
AddItem(cxGrid1DBTableView1.Columns[i], foLike, s, s);
end;
cxGrid1DBTableView1.DataController.Filter.Active:=true;
cxGrid1DBTableView1.EndUpdate;
end;
Автор: Deeptown12
Дата сообщения: 09.07.2013 12:56

Цитата:
X11 Deeptown12, отобрази индикаторы.

Отобразил, стало более понятно поведение, но все равно неясн
1.До вставки

2.Вставка

После


Код вставки, SyncMode - True

_FIBDs.Append;
_FIBDs.FN('SI_GROUP_ID').AsInteger := _FIBDs_Level_Master.FN('ID').AsInteger; // ключ мастера
_FIBDs.FN('MARKA').asString := TfrSIEdit(FrameEditing).MARKA.Text; // данные
_FIBDs.FN('TIP').asString := TfrSIEdit(FrameEditing).TIP.Text;
_FIBDs.FN('NUMBER_REESTR').asString := TfrSIEdit(FrameEditing).NUMBER_REESTR.Text;
_FIBDs.Post;

после переоткрытия датасета видим что все нормально


Понятно что беда возникает т.к. курсор у подчиненной таблице стоит не в той группе, хотя курсор мастера стоит верно, вообщем как сделать так что при вставке в пустой подчиненный level запись попадала именно туда, а не туда где стоит курсор (в другой группе)

Ключи и поля выставлены верно, индексы у всех есть


Т.е. проблема появляется при вставке подчиненной записи при раскрытом подчиненном Level-е у которого нет данных, т.к. курсор был в другой группе (видно на рисунке что текущий курсор стоит на идикаторах в группе индикаторов) , а запись добавляется в группу метрштоки (мастер курсор на ней), у которой нет данных, соотв. курсор не может стоять на записи подчиненной этой группе при Sync-true
то при добавлении cxgrid почему то считает текущей группу не метрштоки , а индикаторы и относит запись туда. При переоткрытии все нормализуется. Как побороть, как принудительно появившуюся запись отнести к view-e метрштоков



Автор: X11
Дата сообщения: 09.07.2013 13:02

Цитата:
но совсем уж такого wow-эффекта нет. Что я сделал не так?

тебе уже написали:
Цитата:
Пусть пользователь поставит SSD, значительно больше памяти, и проц типа Core i7 или выше

а ещё можно попробовать использовать последнюю версию DevExpress, там новый алгоритм сортировки и группировки, возможно и фильтрации.

Вообще-то на клиента из базы не принято тащить десятки тысяч и, тем паче, сотни тысяч записей.

Добавлено:
При чём SSD и системную плату с поддержкой SATA III - 6Gbit/sec
Автор: reenoip
Дата сообщения: 09.07.2013 13:08
Т.е. тот алгоритм, который я привёл - имеет наибольший КПД из всех возможных? Я просто хотел убедиться, что использую максимально эффективный способ, и при возможности ускорить его. Но раз алгоритм наиболее оптимальный, и уже упирается в железо - то вопросов больше нет.

Спасибо!
Автор: X11
Дата сообщения: 09.07.2013 13:26

Цитата:
Нужен моментальный поиск/фильтрация по всем колонкам.


Ты путаешь поиск и фильтрацию. В данном случае у тебя только фильтрация. Поиска, как такового нет.
Автор: Deeptown12
Дата сообщения: 10.07.2013 07:14
Проблема решена другим путем

выставил DetaiInSQLMode - True в мастере
в подчиненной таблице в обработчике DetailFirst прописал код выборки с БД


Код:
procedure TfrSVOD.DBTDataControllerDataModeControllerDetailFirst(
Sender: TcxDBDataModeController; ADataSet: TDataSet;
const AMasterDetailKeyFieldNames: string;
const AMasterDetailKeyValues: Variant; var AReopened: Boolean);
begin
with (ADataSet as TpFIBDataSet) do
begin
if ParamByName('SI_GROUP_ID').Value = AMasterDetailKeyValues then
begin
First;
Exit;
end;
DisableControls;
try
Active := False;
ParamByName(AMasterDetailKeyFieldNames).Value := AMasterDetailKeyValues;
Active := True;
finally
EnableControls;
end;
AReopened := True;
end;
end;
Автор: Deeptown12
Дата сообщения: 10.07.2013 14:24
Вопрос?

Как принудительно заставить cxGrid перечитать значения полей. В БД есть cal-поля, нужно что бы cxGrid после пересчета их обновил у себя в сетке. Поля пересчитываются, в обычном Grid сразу новые значения показываются, а как принудительно перерисовать их в cxGrid не пойму.
Советы с LayoutChanged не подошел.
Переоткрывать DataSet что бы грид подхватил изменения не хочется

ps

нашел, вопрос закрыт

DataController.UpdateItems
Автор: AlexCoRu
Дата сообщения: 11.07.2013 09:22
Подскажите, как
в обработчике события TcxDBGridColumn.OnGetDataText переместиться к некоторой записи в DataSet и вернуться обратно к текущей.
Вот так не идёт:

Код: MasterKey := TableView.DataController.GetRecordId(ARecordIndex);
RecID := TableView.DataController.GetRecordId(TableView.DataController.GetFocusedRecordIndex);
TableView.DataController.Locate('ID', AMasterKey, []);
TableView.DataController.LocateByKey(RecID);
Автор: exteris
Дата сообщения: 11.07.2013 10:04
AlexCoRu
Не понятно, как соотносятся MasterTableView и TableView?
Автор: X11
Дата сообщения: 11.07.2013 10:05
Перемещаться обязательно?
1. Получить данные отдельным SQL-запросом.
2. Использовать lookup, он не перемещается по НД.
Автор: AlexCoRu
Дата сообщения: 11.07.2013 10:22
exteris, скопипастил неверно. Везде TableView, поправил.

Вроде, помогло так:
Код: TableView.DataController.BeginFullUpdate;
TableView.DataController.LocateByKey(MasterKey);
...
TableView.DataController.LocateByKey(RecID);
TableView.DataController.EndFullUpdate;
Автор: JohnKar
Дата сообщения: 11.07.2013 13:01
Здравствуйте! Работаю с cxGrid. Используется cxGridDBTableView.
http://s019.radikal.ru/i608/1307/f0/e86174859b83.jpg
Требуется убрать столбцы "тип" и "пространство имен", остальные 2 поля оставить. Оставить также заголовки групп. Эти действия производятся, чтобы избавиться от большого количества повторяющихся значений "Документ", "УЛИСС_ДО" и т.п.

Спасибо за помощь!
Автор: X11
Дата сообщения: 11.07.2013 13:24
Вы вопрос забыли задать.
Автор: JohnKar
Дата сообщения: 11.07.2013 13:30
Требуется убрать столбцы "тип" и "пространство имен", остальные 2 поля оставить.
Автор: X11
Дата сообщения: 11.07.2013 13:47
Требуется - убирайте. Или не знаете как? Ну так и скажите. У столбцов есть свойство Visible.
Автор: BlackVetal
Дата сообщения: 11.07.2013 13:54
JohnKar
в конструкторе илb программно задать столбцам свойство Visible = false, или VisivleIndex=-1
Автор: Marcello_TLT
Дата сообщения: 11.07.2013 19:55
Для экспорта данных из TcxPivotGrid использую cxExportPivotGridToExcel. Несмотря на AUseNativeFormat = true поля с типом TcxCurrencyEditProperties экспортируются как строки, которые в Excel не суммируются. Field.DataBinding.ValueType этих полей также установлен в Currency. Можно ли как-то решить проблему?
Автор: exteris
Дата сообщения: 12.07.2013 09:18
DevEx 12.2.6 + Office 2010 - Нормально экспортируется.
Автор: Marcello_TLT
Дата сообщения: 12.07.2013 13:10
Значит, скорее всего это косяк DevEx 12.1.6
Автор: AlexCoRu
Дата сообщения: 14.07.2013 19:10
Для экспорта данных из грида есть ExportGridToXML. А загрузкой данных из этого же XML ни кто не озадачивался?
Автор: reenoip
Дата сообщения: 15.07.2013 07:31
В cxGrid десятки тысяч записей. Когда скроллишь с помощью мыши или pageup/pagedown - курсор при клике по гриду становится именно туда, куда кликаешь. Но когда скроллишь "бегунком" (допустим, прокрутил до середины или конца таблицы), то при попытке выделить запись мышой - курсор становится на первую запись.
Что сие означает и как это победить?

Добавлено:
Однако, во всём оказалась виновата опция "cxGrid1DBTableView1 > DataController > DataModeController > SyncMode:=True". Выставил в False - записи выделяются как надо.
Автор: exteris
Дата сообщения: 15.07.2013 08:23
reenoip
Не наблюдаю такого поведения.
Автор: reenoip
Дата сообщения: 15.07.2013 11:34
В моём случае данные попадают в грид с помощью Query, который, в свою очередь, собирает сборник сразу из несколько БД через union all - в этом всё дело, поэтому и SyncMode мешает. Но пока до этого дошёл - часик потерял. Возможно, кому-нибудь и сгодится в будущем.
Автор: AlexCoRu
Дата сообщения: 15.07.2013 13:39

Цитата:
собирает сборник сразу из несколько БД через union all
Следовательно, KeyFieldNames не задан или не уникален, а чтоб использовать SyncMode нужен уникальный ключ. Иначе по какому признаку синхронизировать?
Автор: reenoip
Дата сообщения: 15.07.2013 15:00
AlexCoRu
ключевые поля заданы (поле "id"), вся соль в том, что эти БД полностью (абсолютно) идентичны между собой по структуре, и отличаются лишь контентом.
Автор: X11
Дата сообщения: 15.07.2013 15:15
Если значения ключевых полей могут совпадать в разных базах, а так оно и есть скорее всего, то можно добавить ещё одно ключевое поле типа base_id и получится что-то вроде:


Код: select 1 as base_id, id, name, ....

union all
select 2 as base_id, id, name, ....

union all
select 3 as base_id, id, name, ....
Автор: reenoip
Дата сообщения: 16.07.2013 08:56
Понял, спасибо за помощь. Но ведь ничего криминального в том, что я SyncMode отключил - нет? И в каких случаях это может выйти боком?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


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