繁体   English   中英

如何突出显示DBgrid(SMDBGrid)中单击的单元格中的数据?

[英]How to highlight data in clicked cell in a DBgrid (SMDBGrid)?

我在Delphi应用程序中使用SMDBGrid来显示和编辑数据,这是来自MySQL查询的结果。

我希望获得一些帮助,以帮助您理解如何在编辑数据时使网格表现出我想要的方式。

单元格中的数据最初以白色背景上的黑色字体显示。

  1. 如果我在包含数据的单元格中单击一次,则该单元格将变为白色背景上的白色字体(或者数据可能消失了),而我看不到要编辑的数据。

  2. 如果我在同一单元格中再次单击,我会在蓝色背景上得到白色字体。 我可以看到数据,也可以编辑它。

  3. 如果我在同一个单元格中第三次单击,我会在白色背景上得到黑色字体(就像其他单元格一样)。 我可以看到数据,也可以编辑它。

  4. 双击单元格一次就像(1),然后双击总是像(2)

如何设置它,以便在单元格中单击一次仅使我可以在不更改颜色的情况下编辑该单元格? 也就是说,其行为类似于上面的(3),在单元格最初具有的任何背景颜色上继续显示黑色字体。

其他可能相关的信息

运行查询以填充网格后,我将其置于编辑模式

  • Query1.edit

我确实在Grid中有一个OnMouseDown事件,该事件检测到右键单击并显示一个PopUpMenu,该菜单提供选择并在记录的其他字段中设置值。 还有一个OnGetCellParams事件,它根据这些其他字段中的值设置单元格的背景颜色。 为了使弹出菜单正常工作,并且右键单击时不显示(内置?)编辑菜单(通过反复试验,我设置了该菜单)

  • PopUpMenu = MyPopUpMenu
  • dgEditing = true
  • dgAlwaysShowEditor = true
  • dgAlwaysShowSelection = false

但我不确定自己在那做什么。

无论如何,通过删除OnMouseDown和OnGetCellParams事件并将PopUpMenu设置为''来删除所有内容,似乎与单击单元格时发生的情况没有任何区别。 数据仍然变白。

我现在找到了一种执行此操作的方法,但是不确定这是否是正确/最佳的执行方法,因为似乎我必须通过编写我认为会自动发生的代码来执行此操作。 无论如何,我通过使用OnDrawColumnCell事件获得了行为。

procedure TFrmDataEntry.SMDBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
//when they click in a cell, temporarily set the background to white and the font to bold black
if (gdSelected in State) then
    begin
    TDBGrid(Sender).Canvas.Brush.Color := clwhite;
    TDBGrid(Sender).Canvas.Font.Style := Font.Style + [fsBold];
    TDBGrid(Sender).Canvas.Font.Color := clblack;
    end;
 TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State); //Update the grid so it takes effect
 end; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM