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

时间:2014-02-07 10:08:48

标签: mysql delphi dbgrid

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

我想了解如何在编辑数据时让网格按照我想要的方式运行。

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

  1. 如果我在包含数据的单元格中左键单击一次,则单元格将更改为a 白色背景上的白色字体(或者数据可能消失) 我无法看到要编辑的数据。

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

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

  4. 双击一次单元格就像(1)一样,双击 此后总是表现得像(2)

  5. 问题

    如何设置它以便在单元格中单击鼠标左键只允许我编辑该单元格而不更改颜色?即表现如上面的(3),继续在单元格的任何背景颜色上显示黑色字体。

    可能相关的其他信息

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

    • Query1.edit

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

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

    但我不确定我在那里做什么。

    无论如何,通过删除OnMouseDown和OnGetCellParams事件以及将PopUpMenu设置为''来删除所有这些似乎对单击左键单元时发生的情况没有任何影响。数据仍然是白色的。

1 个答案:

答案 0 :(得分:1)

我现在已经找到了一种方法,但不确定这是否是正确/最好的方法,因为我觉得我必须通过代码做一些我认为会自动发生的事情。无论如何,我通过使用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;