Определение текущего столбца во время выполнения программы и проверка правильности индекса
Компонент TDBGrid обладает рядом методов и свойств, которые позволяют:
а) обращаться к полю TField, ассоциированному с текущим столбцом TDBGrid;
б) проверять правильность обращения к тому или иному столбцу TDBGrid.
Свойство property SelectedField: TField; позволяет обратиться к полю, ассоциированному с текущим столбцом в TDBGrid. Поскольку свойство имеет тип TField, можно использовать все свойства и методы компонента TField.
Пример.
Пусть произведен двойной щелчок мышью по некоторой ячейке TDBGrid. Если текущее поле - Doljnost, его значение записывается в компонентEdit1 с помощью такого обработчика события OnDblClick:procedure TForm!.DBGrid1DbiClick(Sender: TObject);
begin
IF DBGrid1.SelectedField.FieldName = 'Doljnost' THEN Editl.Text := DBGrid1.SelectedField.Text ELSE Editl.Text :=";
end;
Свойство property Selectedlndex: Integer; возвращает номер поля, ассоциированного с текущим столбцом в TDBGrid. Нумерация полей идет от 0. Если возвращено значение -1, никакое поле с данным столбцом не ассоциировано.
Пример,
приведенный выше для свойства SelectedField с использованием Selectedlndex, можно переписать так:procedure TForm1.DBGrid1DbiClick(Sender: TObject);
begin
IF DBGrid1.Fields[DBGrid1.Selectedlndex].FieldName = 'Doljnost' THEN
Editl.Text := DBGrid1.SelectedField.Text ELSE Editl.Text := ";
end;
Метод function ValidFieldIndex(FieldIndex: Integer): Boolean; возвращает True, если значение Fieldlndex является правильным индексом столбца TDBGrid, и False - в противном случае. Индекс признается правильным, если в TDBGrid показывается информация из поля с индексом Fieldlndex и обращение TDBGrid.Fields[FieldIndex] не вызовет ошибки. Заметим, что в НД, ассоциированном с TDBGrid, поле с индексом Fieldlndex может существовать, а в самом компоненте TDBGrid - нет. В этом случае выдается False. Такая ситуация возможна, если для формирования столбцов TDBGrid использовался редактор столбцов.
Пример.
var IndexOfSomeField : Integer;
IF DBGrid1.ValidFieldIndex(IndexOfSomeField) THEN
Labell.Caption := DBGrid1.Fields[IndexOfSomeField].Text ELSE Labell.Caption := 'Неверный индекс поля';