DBGrid - OnCellClick & OnDblClick, вернуть форму /TBMemo, содержащую значение ячейки / столбца / с

Я использую следующий код, добавленный к моему DBGrid - событие OnCellClick

procedure TForm2.DBGrid1CellClick(Column: TColumn);
begin
if dbmodule.comenziDataSet.Active then
  begin
    if not Assigned(dbgridCelulaForm) then
    begin
      dbgridCelulaForm := TdbgridCelulaForm.Create(Self);
      dbgridCelulaForm.DBMemoCelula.DataSource := dbmodule.comenziSource; 
    end;

    dbgridCelulaForm.Visible := False;
    dbgridCelulaForm.Visible := True;
    dbgridCelulaForm.DBMemoCelula.DataField := Column.FieldName;
    dbgridCelulaForm.Caption := Format('%s / randul: %d',[Column.FieldName, DBGrid1.DataSource.DataSet.RecNo]);
  end;
end;

dbgridCelulaForm = имя формы, содержащей TDBMemoDBMemoCelula = имя TDBMemodbmodule.comenziDataSet = comenziDataSet - это имя DataSet и dbmodule это имя data module (единица, как формы) - DataSet на data moduleИтак, dbmodule.comenziDataSet dbmodule.comenziSource = такой же, как набор данных, источник данных в модуле данных, источник называется comenziSource

Итак, что делает этот код:

Как только я нажимаю на ячейку DBGrid это всплывает form (с именем dbgridCelulaForm), который содержит TBMemo (названный DBMemoCelula), и он показывает мне информацию, содержащуюся в этой ячейке (например, имя клиента или что-то, что ячейка содержит, в моей базе данных)

Это нормально, моя проблема в том, что я не могу выбрать строки в DBGridну, я могу, но как только я сделаю 1-е место, я нажимаю (ячейка, любая) на конкретную строку, которую я хочу выделить с помощью мыши, затем ячейка активируется и form всплывает.

Можно ли использовать этот код в DBGrid - OnDblClick событие вместо OnCellClick? То есть, как только я дважды щелкну строку / ячейку form должен появиться и показать мне информацию, но двойной щелчок - не один щелчок.

Таким образом, я все еще могу выбрать строку и просмотреть информацию в ячейке, если мне нужно.

Или любым другим способом / местом для использования / получения этой функциональности. Какие-нибудь мысли?

Я могу опубликовать короткое видео обо всем, если мое объяснение неоднозначно, и вы думаете, что это поможет, просто скажите мне в комментарии / ответе.

Кроме того, я использую компоненты RAD Studio 10 Seattle и dbexpress для базы данных - если это поможет.

Спасибо!

1 ответ

Решение

В следующем коде показано, как получить доступ к координатам столбца и строки ячейки, нажатой по dbl в TDBGrid, и строковому значению содержимого ячейки.

Как написано, он отображает заголовок ячейки и номер строки + содержимое строки в заголовке формы. До вас, что вы на самом деле делаете с этими ценностями.

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

type
 TMyDBGrid = class(TDBGrid);

procedure TForm1.DBGrid1DblClick(Sender: TObject);
var
  ARow,
  ACol : Integer;
  Pt : TPoint;
  CellValue : String;
begin
  //  First, get the mouse pointer coordinates
  Pt.X := Mouse.CursorPos.X;
  Pt.Y := Mouse.CursorPos.Y;
  //  Translate them into the coordinate system of the DBGrid
  Pt := DBGrid1.ScreenToClient(Pt);

  //  Use TDBGrids inbuilt functionality to identify the Column and
  //  row number. 
  ACol := DBGrid1.MouseCoord(Pt.X, Pt.Y).X -1;
  ARow := DBGrid1.MouseCoord(Pt.X, Pt.Y).Y;
  CellValue := DBGrid1.Columns[ACol].Field.AsString;

  Caption := Format('Col:%d Row:%d Cell Value:%s', [ACol, ARow, CellValue]);
end;

Обратите внимание, что я использовал свойство Caption формы для отображения информации о ячейке сетки, так же как быстрый и грязный способ показать информацию где-либо. Конечно, вы можете с таким же успехом отобразить его в другой области формы или где-то в другой форме. Приведенный выше код будет одинаково хорошо работать в сетке OnCellClick событие, кстати.

Как отмечено в комментарии, вы можете использовать сетку SelectedField свойство вместо вышеупомянутого, но лично я думаю, что выше более поучительно, как работать с DBGrid, потому что он показывает, как получить координаты столбца и строки ячейки. Смотрите DBGrid SelectedField, SelectedIndex а также SelectedRows свойства в интерактивной справке для получения дополнительной информации о полезных свойствах TDBGrid.

Обновление Вы попросили в комментарии пример показа информации в другой форме. Давайте предположим, что эта форма называется OtherForm, находится в блоке OtherFormu.Pas и создается до DBGrid1DblClick Evenbt называется. Вы должны использовать этот модуль в Useslist модуля, который содержит DBGrid. Предположим, что эта другая форма содержит элемент управления TMemo с именем Memo1. Затем вы могли бы написать свой DBGrid1DblClick вот так:

procedure TForm1.DBGrid1DblClick(Sender: TObject);
[as above]
begin
  [ as above ]
  CellValue := DBGrid1.Columns[ACol].Field.AsString;

  OtherForm.Memo1.Lines.Add(Format('Col:%d Row:%d Cell Value:%s', [ACol, ARow, CellValue]));
end;
Другие вопросы по тегам