Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.23;
Скачать: CL | DM;

Вниз

Как DBGrid отображает несколько записей, не меняя RecNo датасета?   Найти похожие ветки 

 
TheEd   (2007-11-29 06:36) [0]

Интересен один вопрос:
для того, чтобы заполнить таблицу данными, DBGrid у назначенного DataSource.DataSet не меняет RecNo. Как же он получает записи для отображения при начальной прорисовке или прокрутке?


 
Anatoly Podgoretsky ©   (2007-11-29 09:19) [1]

Исходные коды тебе полностью доступны, смотри папку Source


 
ЮЮ ©   (2007-11-29 09:25) [2]

Что значит не меняет?
в OnDraw... грида DataSet спозиционирован именно на той записи, которую он отрисовывает. А чтобы заполнить таблицу данными он пробегает по всем записям, видимым в гриде:

procedure TCustomDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
...
     Value := "";
     OldActive := FDataLink.ActiveRecord;
     try
       FDataLink.ActiveRecord := ARow;
       if Assigned(DrawColumn.Field) then
         Value := DrawColumn.Field.DisplayText;
       Highlight := HighlightCell(ACol, ARow, Value, AState);
       if Highlight then
       begin
         Brush.Color := clHighlight;
         Font.Color := clHighlightText;
       end;
       if not Enabled then
         Font.Color := clGrayText;
       if FDefaultDrawing then
         WriteText(Canvas, ARect, 2, 2, Value, DrawColumn.Alignment,
           UseRightToLeftAlignmentForField(DrawColumn.Field, DrawColumn.Alignment));
       if Columns.State = csDefault then
         DrawDataCell(ARect, DrawColumn.Field, AState);
       DrawColumnCell(ARect, ACol, DrawColumn, AState);
     finally
       FDataLink.ActiveRecord := OldActive;
     end;


З.Ы. может твой датасет поддерживает RecNo на уровне базового?

function TDataSet.GetRecNo: Integer;
begin
 Result := -1;
end;

procedure TDataSet.SetRecNo(Value: Integer);
begin
end;


:)


 
Johnmen ©   (2007-11-29 09:56) [3]


>  А чтобы заполнить таблицу данными  он пробегает по всем
> записям, видимым в гриде

Ну если быть точным, то по записям в буфере.
http://sql.ru/forum/actualthread.aspx?bid=20&tid=497291


 
ЮЮ ©   (2007-11-29 10:20) [4]

> Ну если быть точным, то по записям в буфере.


В OnDraw... грида я могу получать данные непосредственно из отображаемого DataSeta.
А в буфере они или нет, одна строка в буфере или несколько, дело десятое. Важно то, что
DataSeta скроллируется, однако без побчных эффектов, т.e. TDataSet.DoAfterScroll, например, из-за этого не возникает


 
Anatoly Podgoretsky ©   (2007-11-29 11:24) [5]

> ЮЮ  (29.11.2007 10:20:04)  [4]

Так грид знает что делает :-)


 
ЮЮ ©   (2007-11-29 11:30) [6]

> [5] Anatoly Podgoretsky ©   (29.11.07 11:24)
> > ЮЮ  (29.11.2007 10:20:04)  [4]
>
> Так грид знает что делает :-)


и DataSet знает, что его "делают", но вида при этом не показывает.


 
Anatoly Podgoretsky ©   (2007-11-29 11:50) [7]

> ЮЮ  (29.11.2007 11:30:06)  [6]

Массонский заговор.



Страницы: 1 вся ветка

Текущий архив: 2007.12.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
15-1195736070
Кот
2007-11-22 15:54
2007.12.23
css меню


1-1191232247
Yurikon
2007-10-01 13:50
2007.12.23
Директивы компилятору


15-1195899179
KilkennyCat
2007-11-24 13:12
2007.12.23
Заключение о профессиях и мечтаниях.


15-1196157580
All More system
2007-11-27 12:59
2007.12.23
Архивация потока/строк в режиме реалнього времени


3-1187260709
Tonich
2007-08-16 14:38
2007.12.23
order by