Есть ли способ узнать, какая строка является текущей в TDBGrid?
Поиск текущей строки в Delphi TDBGrid
Ответы (3)
Я не уверен, понимаю ли я ваш вопрос, но я попытаюсь ответить, и, возможно, вы сможете уточнить, если это не то, о чем вы спрашиваете.
Поскольку TDBGrid привязан к источнику данных, текущая строка совпадает с текущей строкой в источнике данных. Вы можете запросить DataSource либо по значению первичного ключа, либо по свойству RecNo, чтобы определить, какая запись является текущей.
Вы можете сделать это следующим образом:
1 — Определите локальный класс, который является копией TDBGrid (это позволит вам получить доступ к закрытым методам):
type
THackDBGrid = class(TDBGrid);
2 - Затем вы можете привести свой локально определенный класс и извлечь из частных методов, как в:
function TfrmMain.GetFieldValue(colnum : integer): string;
begin
Result := THackDBGrid(grdMain).GetFieldValue(colnum);
end;
Или, чтобы получить строку #:
function CurrentRowNumber: integer;
Result := THackDBGrid(grdMain).Row;
end;
Этот метод полезен и в других ситуациях, но я не могу претендовать на это. Я взял это отсюда.
Если вы не хотите, чтобы источник данных предоставлял количество записей и текущую запись (например, потому что вы используете однонаправленный курсор на удаленном сервере), тогда метод доступа к свойствам базового элемента управления сеткой может использоваться.
См. этот ответ на аналогичный вопрос StackOverflow.
Row := TDummyGrid(MyDBGrid).Row
вместо RowCount := TDummyGrid(MyDBGrid).RowCount
? Знаешь, нужно немного подумать...
- person mghie; 03.03.2013