我的dbgrid中有一个基于查找字段的列。
问题是最终用户无法为字段设置空白值 - 他们只能从查找表中选择值。
如何允许最终用户删除或“删除”列的值?
答案 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;