Як отримати номер рядка DBGrid "a, на якому стоїть курсор?
PS Якщо не складно, то відповідайте на мейл.
Спробуй DBGrid1.SelectedRows. - сам подивись
Не зрозумів. А що, RecNo у датасета запитати важко? Вона ж і показує номер рядка, тому що рядки в гріді повністю відповідають набору даних
TMyDBGrid (DBGrid1) .Datalink.ActiveRecord, де TMyDBGrid = class (TDBGrid).
якщо це необхідно для малювання в поточному осередку через обробник події OnDrawColumnCell, то RecNo не допоможе
і властивості Row у DBGrid немає
тому я поступав так
1) створюємо свій клас
TlioGrid = class (TCustomGrid)
public
property Col;
property Row;
end;
2) Оскільки властивість Row поверне положення поточного рядка Грідін щодо її першої видимої рядки, то потрібно врахувати зсув видимої рядки щодо реального номера запису їй відповідного
Для цього використовуємо свою змінну ScrollOffset
В обробник Query1.OnAfterScroll пишемо
ScrollOffset = Query1-> RecNo - TlioGrid (DBGrid1) -> Row;
3) Тепер отрісуем потрібне в поточному осередку Грідін
if Query1-> RecNo = (TlioGrid (DBGrid1) -> Row + ScrollOffset)
then
P.S.
Може є і простіше шлях, але цей метод точно спрацьовує :)
якщо це необхідно для малювання в поточному осередку через обробник події OnDrawColumnCell, то RecNo не допоможе
і властивості Row у DBGrid немає
тому я поступав так
1) створюємо свій клас
TlioGrid = class (TCustomGrid)
public
property Col;
property Row;
end;
2) Оскільки властивість Row поверне положення поточного рядка Грідін щодо її першої видимої рядки, то потрібно врахувати зсув видимої рядки щодо реального номера запису їй відповідного
Для цього використовуємо свою змінну ScrollOffset
В обробник Query1.OnAfterScroll пишемо
ScrollOffset = Query1-> RecNo - TlioGrid (DBGrid1) -> Row;
3) Тепер отрісуем потрібне в поточному осередку Грідін
(Вставимо в OnDrawColumnCell код)
if Query1-> RecNo = (TlioGrid (DBGrid1) -> Row + ScrollOffset)
then
P.S.
Може є і простіше шлях, але цей метод точно спрацьовує :)
та навіщо придумувати власні класи то?
DBGrid1.DataSource.DataSet.RecNo і все.
а в разі ручного малювання приблизно так:
procedure TForm1.DBGrid1DrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if not (Sender is TDBGrid) then Exit;
if DataCol = 0 then begin
TextOut (TDBGrid (Sender) .Canvas.Handle, Rect.Left, Rect.Top, PChar ( "Rec No:" + IntToStr (DBGrid1.DataSource.DataSet.RecNo)), Length ( "Rec No:" + IntToStr (DBGrid1 .DataSource.DataSet.RecNo)));
end else TDBGrid (Sender) .DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
Пам'ять: 0.73 MB
Час: 0.04 c