Позиция курсора в DBGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Позиция курсора в DBGrid

Сообщение donpadlo » 24.09.2011 08:32:22

Есть некая таблица, отображаемая в DBgrid. Происходит некое действо, ну скажем удаление одной записи из этой таблицы. Делаем Refresh. Нужно вернуть курсор туда где был, с учетом того что позиции на которой он стоял уже может и не быть. Важно! В SQLQuery1 используются фильтры, поэтому SQLQuery1.recno и SQLQuery1.recordcount использовать нельзя.

//некий код
//некий код
//некий код
//здесь както запоминаем позицию
orgtehniks.SQLQuery1.Refresh;
//здесь позицию курсора должны поставить на место. Причем с учетом того что записи на которой он стоял уже может и не быть, поэтому ставить нужно не на конкретную запись, а именно в номер строки

Вопрос как это реализовать...
Аватара пользователя
donpadlo
новенький
 
Сообщения: 58
Зарегистрирован: 18.08.2011 09:14:53

Re: Позиция курсора в DBGrid

Сообщение alexkam » 24.09.2011 10:45:27

Например так:
SQLQuery.Locate('ID', SQLQuery.FieldByName('ID').AsInteger, [loPartialKey]);
alexkam
постоялец
 
Сообщения: 152
Зарегистрирован: 07.09.2009 20:03:59

Re: Позиция курсора в DBGrid

Сообщение donpadlo » 26.09.2011 08:53:24

Дык я и грю, этой записи на которой стояли уже может и не быть
Аватара пользователя
donpadlo
новенький
 
Сообщения: 58
Зарегистрирован: 18.08.2011 09:14:53

Re: Позиция курсора в DBGrid

Сообщение Padre_Mortius » 26.09.2011 09:29:45

Если записи уже нет в выборке, то уже без разницы куда позиционировать курсор, имхо
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Позиция курсора в DBGrid

Сообщение donpadlo » 26.09.2011 10:25:33

Почему без разницы? Нужно к ближайшему от удаленного. Представь пользователь листает DBGrid на несколько страниц... Удалил запись. И все снова листать к тому же месту?
Аватара пользователя
donpadlo
новенький
 
Сообщения: 58
Зарегистрирован: 18.08.2011 09:14:53

Re: Позиция курсора в DBGrid

Сообщение stikriz » 26.09.2011 10:56:51

У датасетов есть у каждой строки номер RecNo. Вот, по нему и надо ориентироваться.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Позиция курсора в DBGrid

Сообщение donpadlo » 26.09.2011 14:47:57

Он верно работает если не используются фильтры в SQLQuery. А если используются, то иногда может возникать ситуация что если удалена текущая запись, то RecNo - уже не под текущим фильтром.
Аватара пользователя
donpadlo
новенький
 
Сообщения: 58
Зарегистрирован: 18.08.2011 09:14:53

Re: Позиция курсора в DBGrid

Сообщение stikriz » 26.09.2011 15:07:37

donpadlo писал(а):иногда может возникать ситуация что если удалена текущая запись, то RecNo - уже не под текущим фильтром.

И что тогда произойдет? Куда встанет курсор?

Добавлено спустя 15 минут 48 секунд:
Вот тут
http://www.stikriz.narod.ru/art/dataset2.htm
Есть исходники датасета, правда, для дельфи.
Если указать несуществующий RecNo, то курсор встанет на ближайшую строчку выше с учетом фильтрации. За это отвечает метод GetRecord.
Если в Ваших датасетах это не так, то это бага. Заметьте, что грида испорльзует RecNo. И когда она удаляет, то точно так же происходит - она пытается встать на тот же RecNo или выше. Ничто не мешает запомнить RecNo, переотрыть датасет и присвоить тот же самый RecNo.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47


Вернуться в Lazarus

Кто сейчас на конференции

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

Рейтинг@Mail.ru