dbgrid-oncellclick&ondblclick,返回一个包含单元格/列值的表单/tbmemo/s

qybjjes1  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(395)

我正在使用添加到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 dbMemocella=对象的名称 TDBMemo dbmodule.comenzidataset=comenzidataset是 DataSet dbmodule是 data module (单位,像表格一样)-单位 DataSet 是在 data module ,因此,dbmodule.comenzidataset dbmodule.comenzisource=与数据集相同,数据模块上的一个数据源,该源名为comenzisource
好的,那么这个代码的作用是:
一旦我在电脑上点击一个单元格 DBGrid 它会弹出一个 form (名为dbgridcelulaform)包含 TBMemo (命名为dbmemocella)并显示该单元格中包含的信息(例如,客户名称,或单元格在我的数据库中包含的任何内容)
这很好,我的问题是我现在不能在中选择行 DBGrid ,嗯,我可以,但一旦我做了第一个地方,我点击(一个单元格,任何)在特定的行,我想用我的鼠标选择,然后细胞激活和 form 弹出窗口。
有没有可能把这个代码用在 DBGrid - OnDblClick 事件而不是 OnCellClick ? 意思是我双击一行/单元格 form 应该弹出并显示我的信息,但双击-而不是单点。
这样,如果需要,我仍然可以选择行并查看单元格中的信息。
或任何其他使用/接收此功能的方式/地点。有什么想法吗?
如果我的解释模棱两可,你认为这会有帮助的话,我可以发布一个视频,在评论/回答中告诉我。
另外,我还在数据库中使用radstudio10settle和dbexpress组件——如果这有帮助的话。
谢谢!

bd1hkmkf

bd1hkmkf1#

下面的代码显示如何访问tdbgrid的dbl clicked单元格的列和行坐标,以及单元格内容的字符串值。
写入时,它在窗体标题上显示单元格的列和行号+字符串内容。这取决于你对这些值的实际操作。
这是因为连接到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.PasDBGrid1DblClick 我们称之为evenbt。您需要在包含dbgrid的单元的useslist中使用这个单元。假设另一个表单包含一个名为memo1的tmemo控件。然后,你就可以写你的 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;

相关问题