![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить позицию первой выводимой записи в DBGrid-е [D6]
diwww © (2005-10-27 15:10:00)В DBGrid выводятся данные из Table
Пользователь прокручивает данные в DBGrid-е
Потом периодически пользователь выполняет действие, приводящее к Table.Refresh
При этом данные в DBGrid-е отображаются с самого начала
Надо чтобы MSTable3.Refresh в DBGrid записи отображались с той, с которой и перед Refresh-ем
Как это сделать?
ЮЮ (2005-10-28 03:25:00) [1]Посмотри как грид рисует все строки, начиная с "первой видимой":
OldActive := FDataLink.ActiveRecord;
try
DataLink.ActiveRecord := ARow;
if Assigned(DrawColumn.Field) then
Value := DrawColumn.Field.DisplayText;
т.е здесь фактически меняется текущая запись НД
...
finally
DataLink.ActiveRecord := OldActive;
end;
Как достучаться до protected св-ва TDBGrid.DataLink, надеюсь знаешь.
А вот как ты собираешься позиционировать НД так, чтобы первая запись в гриде опять стала первой, а не произвольной, как в случае с текущей записью, это ещё вопрос!!!
Desdechado (2005-10-27 17:22:00) [2]1. у тебя есть высота грида
2. у тебя есть высота строки
3. у тебя есть текущая строка и ее координаты в гриде
4. применяем простейшие арифметические операции
Johnmen (2005-10-27 17:18:00) [3]>Как определить первую ОТОБРАЖАЕМУЮ запись в DBGrid?
Ну определишь, а что это тебе даст?
diwww (2005-10-27 17:05:00) [4]Как определить первую ОТОБРАЖАЕМУЮ запись в DBGrid?
up
msguns (2005-10-27 16:13:00) [5]>isasa © (27.10.05 16:07) [10]
>Конкретного запрета или ограничения на то, что она действительна до Refresh - нет.
Конкретного запрета ходить на голове нет, однако ж не ходит никто ;)
isasa (2005-10-27 16:07:00) [6]Bookmark НЕЛЬЗЯ использовать в переоткрытом датасете
Конкретного запрета или ограничения на то, что она действительна до Refresh - нет.
diwww (2005-10-27 15:52:00) [7]> isasa © (27.10.05 15:37) [7]
Попробовал... не совсем то :((
SavePlace := Table.GetBookmark;
Table.Refresh;
Table.GotoBookmark(SavePlace);
Table.FreeBookmark(SavePlace);
приводит к тому что по центру DBGrid-а выравнивается запись, которая перед Refresh-ем была в фокусе
Т.е. привязка к фокусу, что не нужно
Нужно определить первую ОТОБРАЖАЕМУЮ запись в DBGrid
Desdechado (2005-10-27 15:48:00) [8]2 isasa
Bookmark НЕЛЬЗЯ использовать в переоткрытом датасете, т.к. этот адрес действителен только в пределах конкретного открытия данных
isasa (2005-10-27 15:37:00) [9]Уже отменили!
property Bookmark: TBookmarkStr; //Specifies the current bookmark in the dataset.
diwww (2005-10-27 15:35:00) [10]> Ega23 © (27.10.05 15:27) [4]
Попробовал...
DBGid.DataSource.DataSet.First устанавливает фокус на вообще первой записи в DBGrid-е, а не на первой видимой записи :(
>Можно ещё круче изгольнуться, TDataLink создать.
поясните немного, пожалуйста. Не пользовался раньше TDataLink
>Тока оно тебе надо?
к сожалению надо :(
чтобы было красиво
>Desdechado © (27.10.05 15:32) [5]
>первой видимой в данный момент?
да
Desdechado (2005-10-27 15:32:00) [11]первой видимой в данный момент?
посчитать от текущей выделенной :)
Имхо, проще запоминать текущую
Ega23 (2005-10-27 15:27:00) [12]
> Независимо от того установлен на ней фокус или нет
Ну-у-у-у... Можно DBGid.DataSource.DataSet.First сделать. Ну курсор тогда передвинется.
Можно ещё круче изгольнуться, TDataLink создать.
Тока оно тебе надо?
diwww (2005-10-27 15:20:00) [13]...
Независимо от того установлен на ней фокус или нет
diwww (2005-10-27 15:19:00) [14]> Ega23 © (27.10.05 15:16) [1]
А как получить значение ключевого поля первой выводимой записи в DBGrid-е?
Ega23 (2005-10-27 15:16:00) [15]Сохранять значение ключевого поля в локальной переменной, потом
dataSet.DisableControls;
Refresh;
DataSet.Locate(Ключевое_поле, сохранённое_значение, [])
dataSet.EnableControls;