-
dbGrid отражает информацию tIbQuery необходимо обновить информацию делаю:
key:=quKey.asInteger; qu.close; qu.open; qu.locate('key',variant(key),[]); (или BookMark)
все работает, но информация в гриде смещается. Можо ли сделать, сохранить одновременно позицию первой строки грида и текущей записи?
-
Как-то все непонятно. Скорее всего отсортировать нд по ид деск
-
наверное Вы не поняли. на примере: 1.в гриде отражается 20 записей 2.в нд - 100 записей 3.сейчас грид показывает записи с 51й по 70ю, курсор на 5й строке грида (запись 55) 4.закрываю-открываю нд 5.позиционирую курсор на 55ю запись (locate) 6.грид показывает с 55й по 74ю. курсор на первой строке грида (запись 55) 7.необходимо чтобы в п.6 грид отражался также, как и в п.3
-
См. дедушку грида TCustomGrid
-
> Евгений Р. (19.07.08 17:16) [2]
Забей. Ибо существующая реализация того не стОит.
-
> MsGuns ©
речь ведете о дедушкином protected TopRow?
-
> Евгений Р. (19.07.08 19:28) [5]
Если внятно скажешь что надо - будут ответы. А так...
-
открыть дбГрид таким образом, чтобы в первой строке (topRow) была 51я запись НД, а выделенной была 55я строка НД (row=5).
-
> открыть дбГрид таким образом, чтобы в первой строке (topRow) > была 51я запись НД
Если в НД всего 50, то можно 49?
-
в [7] разжован [2]. (в НД 100 записей)
-
>Евгений Р. (19.07.08 19:28) [5] >речь ведете о дедушкином protected TopRow?
Да, о нем. Но есть вероятность при перечитке получить не то кол-во записей, которое было до нее (см. [8]). В этом случае есть веротность, что "картинку" физически нельзя будет восстановить. Во всяком случае надо городить целый огород. А стОит ли оно того ?
-
> turbouser © (19.07.08 19:48) [6] > > > > Евгений Р. (19.07.08 19:28) [5] > > Если внятно скажешь что надо - будут ответы. А так... >
<telepator> Автор хочет чтоб "не моргало" при обновлении. </telepator>
-
> MsGuns © (19.07.08 21:30) [10]
согласен, но это решается через пару ифов. но указанные свойства - протектед неужели в таких случаях обязательно городить наследника?
-
> неужели в таких случаях обязательно городить наследника? > >
Не обязательно "городить". Но я пока не получил сведений, что это "тот" случай.
-
> Германн © (20.07.08 01:21) [11]
типа того. Но это не "моргание", а полная смена картинки. ([2] п.6)
-
> qu.locate('key',variant(key),[]); (или BookMark)
выделенное - глупость букмарки имеют смысл только в рамках одного набора данных переоткрытие дает много шансов смены адресов, что либо (в хорошем случае) позиционирует на неверную запись, либо (в плохом случае) бросит на AV
-
> Евгений Р. (19.07.08 15:30)
Если я всё правильно понял, то на
....
grdInfo: TRxDBGrid;
....
type
TMyDBGrid = class(TrxDBGrid)
end;
...
procedure TfrmOwnerList.ScrollActiveToRow(AGrid: TDBGrid; ARow: Integer);
var
FTitleOffset, SDistance : Integer;
NewRect : TRect;
NewRow : Integer;
begin
with TMyDBGrid(AGrid) do
begin
NewRow:= Row;
FTitleOffset:= 0;
if dgTitles in Options then inc(FTitleOffset);
if ARow = NewRow then Exit;
with DataLink, DataSet do
try
BeginUpdate;
Scroll(NewRow - ARow);
if (NewRow - ARow) < 0 then
ActiveRecord:= 0
else
ActiveRecord:= VisibleRowCount - 1;
SDistance:= MoveBy(NewRow - ARow);
NewRow:= NewRow - SDistance;
MoveBy(ARow - ActiveRecord - FTitleOffset);
NewRect:= BoxRect(0, FTitleOffset, ColCount - 1, 1000);
ScrollWindowEx(Handle, 0,0, @NewRect, @NewRect, 0, nil, SW_Invalidate);
MoveColRow(Col, NewRow, False, False);
finally
EndUpdate;
end;
end;
end;
procedure TfrmOwnerList.DBRefresh;
var
save_Cur: TCursor;
save_LCol: Integer;
oldRow: Integer;
oldKey: Variant;
bRestore: Boolean;
begin
oldRow := 0;
save_Cur := Screen.Cursor;
if Active and CanRefresh then
try
Screen.Cursor := crSQLWait;
bRestore := (not cdsInfo.IsEmpty) and (IndexField <> '');
save_LCol := grdInfo.LeftCol;
if bRestore then
begin
oldRow := grdInfo.Row;
oldKey := cdsInfo.FieldByName(IndexField).Value;
end;
try
cdsInfo.Active := false;
qryInfo.Active := false;
qryInfo.Active := true;
cdsInfo.Active := true;
if bRestore then
begin
if cdsInfo.Locate(IndexField, oldKey, [loCaseInsensitive]) then
ScrollActiveToRow(grdInfo, oldRow);
end;
finally
grdInfo.LeftCol := save_LCol;
end;
finally
Screen.Cursor := save_Cur;
end;
end;
думаю разберёшься.
-
>Плохиш © (20.07.08 23:32) [16] >Если я всё правильно понял, то на >type TMyDBGrid = class(TrxDBGrid)
Замечательный совет ;)
ЗЫ Вот зачем давать заведомо неработающий код ?
-
> MsGuns © (21.07.08 15:13) [17] > ЗЫ Вот зачем давать заведомо неработающий код ?
А я и не говорил, что этот код для копи-паста. Да и не собираюсь приглаживать работающие куски из проектов для использования кем-нибуть, каждый может довести их для себя. А возникающие вопросы задать.
-
MsGuns © (21.07.08 15:13) [17]
> ЗЫ Вот зачем давать заведомо неработающий код ?
А тебе влом или впадлу дать заведомо работающий ?
|