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 = имя формы, содержащей TDBMemo
DBMemoCelula = имя TDBMemo
dbmodule.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;