а где beginUpdate/endUpdate ?
» Использование DevExpress (часть 4)
А где именно они должны быть?
Цитата:
Какие будут предложения и способен ли вообще cxGrid на подобный подвиг?
способен и миллионами ворочать
Пусть пользователь поставит SSD, значительно больше памяти, и проц типа Core i7 или выше
Добавлено:
До начала операции и после окончания операции
Добавлено:
Deeptown12, отобрази индикаторы.
ты уверен, что правильно заполнены поля типа KeyFields/MasterFields/DetailKey? Непосредственно у самих НД есть ли ключевые поля? Правильно ли они выбираются из базы?
Ок, сделал так:
Код: 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;
Код: 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;
Цитата:
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 метрштоков
Цитата:
но совсем уж такого wow-эффекта нет. Что я сделал не так?
тебе уже написали:
Цитата:
Пусть пользователь поставит SSD, значительно больше памяти, и проц типа Core i7 или выше
а ещё можно попробовать использовать последнюю версию DevExpress, там новый алгоритм сортировки и группировки, возможно и фильтрации.
Вообще-то на клиента из базы не принято тащить десятки тысяч и, тем паче, сотни тысяч записей.
Добавлено:
При чём SSD и системную плату с поддержкой SATA III - 6Gbit/sec
Т.е. тот алгоритм, который я привёл - имеет наибольший КПД из всех возможных? Я просто хотел убедиться, что использую максимально эффективный способ, и при возможности ускорить его. Но раз алгоритм наиболее оптимальный, и уже упирается в железо - то вопросов больше нет.
Спасибо!
Спасибо!
Цитата:
Нужен моментальный поиск/фильтрация по всем колонкам.
Ты путаешь поиск и фильтрацию. В данном случае у тебя только фильтрация. Поиска, как такового нет.
Проблема решена другим путем
выставил 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;
выставил 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;
Вопрос?
Как принудительно заставить cxGrid перечитать значения полей. В БД есть cal-поля, нужно что бы cxGrid после пересчета их обновил у себя в сетке. Поля пересчитываются, в обычном Grid сразу новые значения показываются, а как принудительно перерисовать их в cxGrid не пойму.
Советы с LayoutChanged не подошел.
Переоткрывать DataSet что бы грид подхватил изменения не хочется
ps
нашел, вопрос закрыт
DataController.UpdateItems
Как принудительно заставить cxGrid перечитать значения полей. В БД есть cal-поля, нужно что бы cxGrid после пересчета их обновил у себя в сетке. Поля пересчитываются, в обычном Grid сразу новые значения показываются, а как принудительно перерисовать их в cxGrid не пойму.
Советы с LayoutChanged не подошел.
Переоткрывать DataSet что бы грид подхватил изменения не хочется
ps
нашел, вопрос закрыт
DataController.UpdateItems
Подскажите, как
в обработчике события TcxDBGridColumn.OnGetDataText переместиться к некоторой записи в DataSet и вернуться обратно к текущей.
Вот так не идёт:
Код: MasterKey := TableView.DataController.GetRecordId(ARecordIndex);
RecID := TableView.DataController.GetRecordId(TableView.DataController.GetFocusedRecordIndex);
TableView.DataController.Locate('ID', AMasterKey, []);
TableView.DataController.LocateByKey(RecID);
в обработчике события TcxDBGridColumn.OnGetDataText переместиться к некоторой записи в DataSet и вернуться обратно к текущей.
Вот так не идёт:
Код: MasterKey := TableView.DataController.GetRecordId(ARecordIndex);
RecID := TableView.DataController.GetRecordId(TableView.DataController.GetFocusedRecordIndex);
TableView.DataController.Locate('ID', AMasterKey, []);
TableView.DataController.LocateByKey(RecID);
AlexCoRu
Не понятно, как соотносятся MasterTableView и TableView?
Не понятно, как соотносятся MasterTableView и TableView?
Перемещаться обязательно?
1. Получить данные отдельным SQL-запросом.
2. Использовать lookup, он не перемещается по НД.
1. Получить данные отдельным SQL-запросом.
2. Использовать lookup, он не перемещается по НД.
exteris, скопипастил неверно. Везде TableView, поправил.
Вроде, помогло так:
Код: TableView.DataController.BeginFullUpdate;
TableView.DataController.LocateByKey(MasterKey);
...
TableView.DataController.LocateByKey(RecID);
TableView.DataController.EndFullUpdate;
Вроде, помогло так:
Код: TableView.DataController.BeginFullUpdate;
TableView.DataController.LocateByKey(MasterKey);
...
TableView.DataController.LocateByKey(RecID);
TableView.DataController.EndFullUpdate;
Здравствуйте! Работаю с cxGrid. Используется cxGridDBTableView.
http://s019.radikal.ru/i608/1307/f0/e86174859b83.jpg
Требуется убрать столбцы "тип" и "пространство имен", остальные 2 поля оставить. Оставить также заголовки групп. Эти действия производятся, чтобы избавиться от большого количества повторяющихся значений "Документ", "УЛИСС_ДО" и т.п.
Спасибо за помощь!
http://s019.radikal.ru/i608/1307/f0/e86174859b83.jpg
Требуется убрать столбцы "тип" и "пространство имен", остальные 2 поля оставить. Оставить также заголовки групп. Эти действия производятся, чтобы избавиться от большого количества повторяющихся значений "Документ", "УЛИСС_ДО" и т.п.
Спасибо за помощь!
Вы вопрос забыли задать.
Требуется убрать столбцы "тип" и "пространство имен", остальные 2 поля оставить.
Требуется - убирайте. Или не знаете как? Ну так и скажите. У столбцов есть свойство Visible.
JohnKar
в конструкторе илb программно задать столбцам свойство Visible = false, или VisivleIndex=-1
в конструкторе илb программно задать столбцам свойство Visible = false, или VisivleIndex=-1
Для экспорта данных из TcxPivotGrid использую cxExportPivotGridToExcel. Несмотря на AUseNativeFormat = true поля с типом TcxCurrencyEditProperties экспортируются как строки, которые в Excel не суммируются. Field.DataBinding.ValueType этих полей также установлен в Currency. Можно ли как-то решить проблему?
DevEx 12.2.6 + Office 2010 - Нормально экспортируется.
Значит, скорее всего это косяк DevEx 12.1.6
Для экспорта данных из грида есть ExportGridToXML. А загрузкой данных из этого же XML ни кто не озадачивался?
В cxGrid десятки тысяч записей. Когда скроллишь с помощью мыши или pageup/pagedown - курсор при клике по гриду становится именно туда, куда кликаешь. Но когда скроллишь "бегунком" (допустим, прокрутил до середины или конца таблицы), то при попытке выделить запись мышой - курсор становится на первую запись.
Что сие означает и как это победить?
Добавлено:
Однако, во всём оказалась виновата опция "cxGrid1DBTableView1 > DataController > DataModeController > SyncMode:=True". Выставил в False - записи выделяются как надо.
Что сие означает и как это победить?
Добавлено:
Однако, во всём оказалась виновата опция "cxGrid1DBTableView1 > DataController > DataModeController > SyncMode:=True". Выставил в False - записи выделяются как надо.
reenoip
Не наблюдаю такого поведения.
Не наблюдаю такого поведения.
В моём случае данные попадают в грид с помощью Query, который, в свою очередь, собирает сборник сразу из несколько БД через union all - в этом всё дело, поэтому и SyncMode мешает. Но пока до этого дошёл - часик потерял. Возможно, кому-нибудь и сгодится в будущем.
Цитата:
собирает сборник сразу из несколько БД через union allСледовательно, KeyFieldNames не задан или не уникален, а чтоб использовать SyncMode нужен уникальный ключ. Иначе по какому признаку синхронизировать?
AlexCoRu
ключевые поля заданы (поле "id"), вся соль в том, что эти БД полностью (абсолютно) идентичны между собой по структуре, и отличаются лишь контентом.
ключевые поля заданы (поле "id"), вся соль в том, что эти БД полностью (абсолютно) идентичны между собой по структуре, и отличаются лишь контентом.
Если значения ключевых полей могут совпадать в разных базах, а так оно и есть скорее всего, то можно добавить ещё одно ключевое поле типа 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, ....
Код: 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, ....
Понял, спасибо за помощь. Но ведь ничего криминального в том, что я SyncMode отключил - нет? И в каких случаях это может выйти боком?
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.