Как получить содержимое ячейки в DBGrid в Delphi с помощью события OnCellClick - PullRequest
0 голосов
/ 29 июня 2019

Как я могу, нажав на ячейку в dbgrid на форме, получить содержимое выбранной ячейки?

Обратите внимание, что DBGrid в Delphi является сеткой, учитывающей данные, и несколько необычен по сравнению с другими сетками (например, Delphi TStringGrid) в том, что ячейки Сетка не доступна с помощью значений Row и Column.

1 Ответ

2 голосов
/ 29 июня 2019

Самый простой способ сделать это - просто

procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
  S : String;
begin
  S := DBGrid1.SelectedField.AsString;
  Caption := S;
end;

. Это работает, потому что при кодировании TDBGrid соответствующий набор данных синхронизируется с выбранной / выбранной строкой сетки.Вообще говоря, проще всего получить значения из текущей записи набора данных, но вы так и спросили.Старайтесь избегать изменения значений текущей записи, манипулируя текстом ячейки, потому что DBGrid будет бороться с вами на каждом шагу.

Fwiw, я видел больше "круглых домов" способов получения текста ячейки, но я предпочитаю это по принципу KISS.

Обратите внимание, что более надежный способ получения ячейкитекст, включающий предложение Реми Лебо использовать Column.Field вместо SelectedField, выглядит следующим образом:

procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
  S : String;
  AField : TField;
begin
  AField := DBGrid1.SelectedField;
  //  OR AField := Column.Field;


  //  Note:  If the DBGrid happens to have an unbound column (one with
  //         no TField assigned to it) the AField obtained mat be Nil if
  //         it is the unbound column which is clicked.  So we should check for
  //         AField being Nil

  if AField <> Nil then begin
    S := AField.AsString;
    Caption := S;
  end;
end;
...