Форум: "Базы";
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];
ВнизНумерация ячеек в DBGRID Найти похожие ветки
← →
data (2002-03-12 09:41) [7]А я крутила с BookMark. Кстати, такой вопрос уже был в конференции и на основании ответов на него я это и сварганила.:))
Примерно так. Q - запрос связанный с Гридом.
Links : array of string;
При каждом открытии/переоткрытии запроса Q - вызывается
процедура SetLinks, заполняющая массив BookMark.
В гриде добавлен столбец,с пустым именем поля, там должны быть
номера.
Сразу скажу, что запрос этот у меня по количеству записей маленький. Возвращает порядка 100 записей, поэтому замедления работы я не заметила.
procedure SetLinks;
var BM:TBookMark;
i:integer;
begin
SetLength(Links,Q.RecordCount);
//Можно не использовать RecordCount(он не для всех СУБД
//работает), а пустить еще
//один запрос с подсчетом записей
if Length(Links)=0 then Exit;
with Q do
begin
Bm:=GetBookMark;
try
DisableControls;
try
First;
i:=0;
while not Eof do
begin
Links[i]:=BookMark;
inc(i);
Next;
end;
except
end;
try
GotoBookMark(bm);
FreeBookMark(bm);
except
end;
finally
EnableControls;
end;
end;
end;
function FindLink(bk:TBookmark; var idx: longint): Boolean;
var i:integer;
begin
Result:=false;
idx:=0;
if Length(links)=0 then Exit;
for i:=0 to Length(links)-1 do
begin
if Q.CompareBookmarks(TBookMark(links[i]),bk)=0 then
begin
Result:=true;
idx:=i+1;
break;
end;
end;
end;
//Для грида - обработчик
procedure TFmPanels.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var n:integer;cc:integer;CurBK: TBookMark;
num:integer;
begin
if (Column.FieldName)="" then
begin
if gdSelected in State then
begin
DBGrid.Canvas.Brush.Color:=clHighlight;
DBGrid.Canvas.FillRect(Rect);
DBGrid.Canvas.Font.Color:=clHighlightText;
end
else
begin
DBGrid.Canvas.Brush.Color:=clWindow;
DBGrid.Canvas.FillRect(Rect);
DBGrid.Canvas.Font.Color:=clWindowText;
end;
try
CurBk:=Q.GetBookMark;
if FindLink(CurBk,num) then
DBGrid.Canvas.TextOut(Rect.Left+20,Rect.Top+2,IntTostr(num));
except
end;
end
else DBGrid.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.005 c