Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 28 мар 2024, 14:24

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: 30 июн 2016, 13:35 
Не в сети

Зарегистрирован: 20 мар 2015, 11:57
Сообщений: 7
Данные в TDBGridEh грузятся через TMemTable.
Суть задачи в следующем:
Грузим данные, применяем сортировку и фильтрацию методами DefaultApplySorting и DefaultApplyFilter. Затем скроллируем таблицу на несколько страниц вниз и выделяем какую-нибудь запись. После чего по кнопке открываем на редактирование данную запись в отдельном диалоге. После закрытия диалога переоткрываем рекордсет, применяем сортировку и фильтрацию. И, внимание, вот тут нужно, чтобы грид был проскроллирован точно на ту же позицию, где он был, перед редактированием записи. Т.е. наша запись должна остаться на том же месте, а не внизу, как это получается после ф-ции Locate или присвоением RecNo.
Нашел как получить текущее положение вертикального скролбара: DBGridEh1->VertScrollBar->GetScrollBarParams(...), но как его восстановить не нашел.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 07 июл 2016, 14:46 
Не в сети

Зарегистрирован: 20 мар 2015, 11:57
Сообщений: 7
Нашел подходящую процедуру:
procedure SetParams(APosition, AMin, AMax, APageSize: Integer);
но она зачем-то находится в protected секции :? .

Разработчики, помогите с позиционированием вертикального скролбара. После фильтрации и сортировки команда TMemTableEh -> RecNo позиционирует выделенную запись вниз грида, а нужно иметь возможность спозиционировать выделенную запись в произвольное место видимой части грида.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 июл 2016, 14:04 
Не в сети
Администратор

Зарегистрирован: 19 дек 2011, 17:40
Сообщений: 837
Добрый день.

Попробуйте использовать пару методов TDBGridEh.SaveVertPos TDBGridEh.RestoreVertPos

Код:
  DBGridEh1.SaveVertPos('KeyFieldName');

  MemTableEh1.Close;
  MemTableEh1.Open;

  DBGridEh1.RestoreVertPos('KeyFieldName');

_________________
Best regards
Admin


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 июл 2016, 12:02 
Не в сети

Зарегистрирован: 20 мар 2015, 11:57
Сообщений: 7
Спасибо, помогло!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 05 сен 2016, 22:09 
Не в сети

Зарегистрирован: 29 май 2012, 13:52
Сообщений: 26
А что делать в ситуации с удалением записи? Забодался уже с проблемой. По DBGridEh скроллируют несколько страниц, выбирают нужную позицию, например, 100, удаляют запись. При управлении позицией через DataSet.RecNo мне нужно, чтобы таблица оказалась на той же позиции, пусть и на другой записи. Это происходит. Но долбаная позиция при этом оказывается самой верхней, и никакие попытки вернуть видимое перед удалённой записью количество строк через Toprow не помогают


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 сен 2016, 11:25 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

Цитата:
Но долбаная позиция при этом оказывается самой верхней, и никакие попытки вернуть видимое перед удалённой записью количество строк через Toprow не помогают


Если кроме DataSet.Delete над DataSet'ом никаких операций не выполняется, то позиция DataSet'а должна перейти на следующую за удаленной без всяких дополнительных манипуляций.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 21 фев 2020, 09:21 
Не в сети

Зарегистрирован: 12 июл 2012, 05:30
Сообщений: 56
Прошу прощения за подъём старой темы. Как проскроллировать до заданного ряда вертикальный грид?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 21 фев 2020, 13:46 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

Можно через доступ к protected свойству TopRow
Код:
type
  TDBVertGridEhCrack = class(TDBVertGridEh);

procedure TForm1.Button4Click(Sender: TObject);
begin
  TDBVertGridEhCrack(DBVertGridEh1).TopRow := 4;
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 21 фев 2020, 15:53 
Не в сети

Зарегистрирован: 12 июл 2012, 05:30
Сообщений: 56
Цитата:
Можно через доступ к protected свойству TopRow

Ряд станет верхним, но все предыдущие могут оказаться скрытыми, даже если свободного места достаточно для их отображения. Например, когда ряд последний и/или все ряды умещаются на одном "листе".


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB