вертикальный скроллинг cxgrid только вручную

evgen29
Дата: 17.12.2019 00:53:24
Здравствуйте! Есть у меня cxgrid, отображающий данные из dxmemdata, каждая строчка в которых отображает ftp одного клиента. Я наполняю dxmemdata в отдельном потоке, но если строк больше, чем высота отображения таблицы cxgrid, то появляется вертикальная полоса прокрутки. При первом запуске я забиваю dxmemdata данными о всех фтп, далее копирую dxmemdata в dxmemdatatemp. Затем для каждой строки в dxmemdatatemp считаю кол-во входящих и исходящих файлов в соответствующих для данной строки папках фтп. Затем ищу в dxmemdata по ключу, который соответствует текущему ключу в dxmemdatatemp, строку и обновляю в ней изменившиеся поля из dxmemdatatemp.

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

Вопрос: возможно ли отвязать движение вертикальной полосы прокрутки от курсора датасета, чтобы не было дерганий при очередном обновлении строки. Т.е. строки сами по себе обновляются в потоке, а навигация по таблице предоставлена пользователю путем движения вертикальной полосы прокрутки.
DimaBr
Дата: 17.12.2019 01:11:13
BeginUpdate/EndUpdate
DimaBr
Дата: 17.12.2019 01:12:43
Можно вообще отказаться от dxMemData и постить значение в cxTableView (не DB)

Картинка с другого сайта.
vavan
Дата: 17.12.2019 10:48:57
evgen29
возможно ли отвязать движение вертикальной полосы прокрутки от курсора датасета, чтобы не было дерганий при очередном обновлении строки
могли бы быть клоны, но наверное dxmemdata в них не умеет так что пожалуй не вариант
evgen29
Дата: 17.12.2019 10:51:29
DimaBr,
а можно поподробнее по beginupdate\endupdate?
я сделал через них, данные обновляются, но курсор двигается вниз. Если я держу курсор мышкой, то не двигается и данные обновляются. А если отпускаю двигается. Хотелось бы как на вашем гифе, только через cxGrid.
DimaBr
Дата: 17.12.2019 12:14:17
Так в GIF и есть cxGrid, просто отвязанный от датасета.
Если вы упорствуете на применение dxMemData, то
dxMemData.DisableControl;
KeyId := dxMemData['KeyId'];
dxMemData.Locate();
dxMemData.Edit;
dxMemData['Value'] := NewValue;
dxMemData.Locate(KeyId);
dxMemData.EnabledControl;


эти телодвижение вместо всего одно сточки
cxTableView.DataController.Values[RecId,ColumnId] := Value;
evgen29
Дата: 17.12.2019 12:55:21
DimaBr,
без привязки к датасету к столбцам можно обратиться только по имени. Такой код потом неудобно поддерживать будет.
DimaBr
Дата: 17.12.2019 13:05:48
evgen29

без привязки к датасету к столбцам можно обратиться только по имени. Такой код потом неудобно поддерживать будет.

Дайте правильно имя столбцу и жить станет проще.
А обратиться можно не только по имени, но и по индексу.
У вас в программе огромное количество компонент, к которым вы обращаетесь по имени. Вас это не смущает ?