MyTable := TTable.Create( nil);
try
MyTable.DatabaseName := 'MyDB';
MyTable.TableName := 'MyTable.db';
Mytable.IndexName := 'MyIndex';
MyTable.Open;
{ делать то, что надо }
finally
MyTable.Free;
end;
end;
10. Как узнать, какая ячейка при просмотре TDBGrid текущая?
Здесь процедура для сохранения текущего номера строки и колонки. Следующий код в методе MyDBGridDrawDataCell обновляет переменные Col и Row (которые не должны быть локальными для этого метода) каждый раз, когда таблица перерисовывается. Используя этот код, вы можете считать, что Col и Row указывают на текущую колонку и строку соответственно.
var
Col, Row: Integer;
procedureTForm1.MyDBGridDrawDataCell(Sender: TObject; constRect: TRect;
Field: TField; State: TGridDrawState);
var
RowHeight: Integer;
begin
ifgdFocused inState then
begin
RowHeight := Rect.Bottom - Rect.Top;
Row := (Rect.Top divRowHeight) - 1;
Col := Field.Index;
end;
end;
11. Как выделить цветом текущую строку в TDBGrid?
Для TDBGrid в свойстве Options установите dgRowSelect в True .
12. Как изменить цвет ячейки в TDBGrid?
Введите следующий код в обработчике события OnDrawDataCell :
procedureTForm1.DBGrid1DrawDataCell(Sender: TObject; constRect: TRect;
Field: TField; State: TGridDrawState);
begin
ifgdFocused inState then
with(Sender asTDBGrid).Canvas do
begin
Brush.Color := clRed;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, Field.AsString);
end;
end;
Установите свойство DefaultDrawing в True . Здесь перерисовывается только выделенная ячейка. Если установить DefaultDrawing в False , то вы должны самостоятельно перерисовать все ячейки аналогично примеру.
13. Как узнать, что пользователь перешел на другую запись, например, в TDBGrid?
Переход на новую запись — это событие, которое относится не к визуальному компоненту, а к источнику данных. Соответствующее событие называется OnDataChange и имеется у компонента TDataSource .
14. Как устанавливать собственный цвет или шрифт для столбца TDBGrid?
Выключите property DefaultDrawing , и обрабатывайте событие OnDrawDataCell :
procedureTForm1.DBGrid1DrawDataCell(Sender: TObject; constRect: TRect;
Field: TField; State: TGridDrawState);
begin
ifField.FieldName = 'Name' thenDBGrid1.Canvas.Font.Style := [fsBold];
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
Это приведет к тому, что содержимое столбца 'Name' будет показываться жирным шрифтом.
В Delphi 2.0 вы можете использовать редактор столбцов для той же самой цели.
15. Почему указатель ползунка в TDBGrid не показывает текущее положение в таблице?
Дело в том, что TDBGrid предполагает многопользовательский доступ к таблице. В этом случае другие пользователи этой же таблицы могут добавлять или удалять записи, в результате информация о количестве записей на текущий момент становится неопределенной.
Конечно, в однопользовательском варианте количество записей всегда известно, но поскольку TDBGrid работает через промежуточный источник данных DataSource , ему неизвестен конкретный способ доступа к данным — навигационный или SQL. Например, для SQL существует только один способ узнать количество записей — выполнить специальный запрос с их подсчетом, а на это может потребоваться значительное время.
По всем этим причинам TDBGrid является универсальным средством для просмотра таблиц, которое работает во всех случаях и с любыми источниками данных.
16. Как установить фокус на определенное поле в TDBGrid?
Используйте код:
DBGrid1.SelectedField := Table1SomeField;
DBGrid1.SetFocus;
17. Как создать обработчик события OnClick для TDBGrid?
Как и всякий TControl (иерархия наследования TControl→TWinControl→TCustomControl→TCustomGrid→TCustomDBGrid→TDBGrid ) у TDBGrid есть событие OnClick , но оно protected. Так что можно либо создать новый класс, производный от TDBGrid , в котором объявить это свойство как published, либо использовать другой вариант. Например, вы можете использовать событие OnColEnter .
Читать дальше