如何在TDBGrid中的查找字段上允许空值?

时间:2009-09-30 18:34:53

标签: delphi

我的dbgrid中有一个基于查找字段的列。

问题是最终用户无法为字段设置空白值 - 他们只能从查找表中选择值。

如何允许最终用户删除或“删除”列的值?

3 个答案:

答案 0 :(得分:4)

在适当的TDBGrid Key事件中,陷阱为DEL。检测到后,检查您是否在查阅列中。如果是,请在相应的数据集字段上调用Clear。

答案 1 :(得分:1)

尝试在查找表中添加空白值。

答案 2 :(得分:1)

这是我在Delphi XE7中运行的代码。诀窍是使查找字段引用的KeyField为NULL,而不是查找字段本身。

请注意,一旦显示下拉框,它就不起作用,例如双击单元格时(无论是否删除),或者网格的选项包括dgAlwaysShowEditor。在这种情况下,按键不会传递给事件处理程序。如果我也能这样做,我会更新代码。 (任何想法???)

procedure TformMain.DBGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  LookupResultField : TField;
begin
  if Key = VK_DELETE then
    if TDBGrid(Sender).SelectedField.FieldKind = fkLookup then begin   // if this field is a lookup field

      if not (TDBGrid(Sender).DataSource.DataSet.State in [dsInsert, dsEdit]) then  // if the query is not already in edit mode
        TDBGrid(Sender).DataSource.DataSet.Edit;

      LookupResultField := TDBGrid(Sender).DataSource.DataSet.FieldByName (TDBGrid(Sender).SelectedField.KeyFields);
      LookupResultField.Clear;            // set the field to NULL

    end;
end;