Index: dbgrids.pas
===================================================================
--- dbgrids.pas	(revision 16933)
+++ dbgrids.pas	(working copy)
@@ -234,6 +234,7 @@
     function  GetDisplayName: string; override;
     function  GetDefaultReadOnly: boolean; override;
     function  GetDefaultWidth: Integer; override;
+    function GetPickList: TStrings; override;
     property  IsAutomaticColumn: boolean read FIsAutomaticColumn;
     property  IsDesignColumn: boolean read GetIsDesignColumn;
     procedure LinkField;
@@ -552,6 +553,12 @@
 
 implementation
 
+type
+  TLookupListCracker = class(TObject)
+  private
+    FList: TList;
+  end;
+
 procedure Register;
 begin
   RegisterComponents('Data Controls',[TDBGrid]);
@@ -1013,6 +1020,8 @@
 procedure TCustomDBGrid.UpdateData;
 var
   selField,edField: TField;
+  i: Integer;
+  lst: TList;
 begin
   // get Editor text and update field content
   if not UpdatingData and (FEditingColumn>-1) and FDatalink.Editing then begin
@@ -1026,6 +1035,18 @@
 
       StartUpdating;
       edField.Text := FTempText;
+      if edField.Lookup and edField.LookupCache then begin
+        {$WARNINGS OFF}
+        lst := TLookupListCracker(edField.LookupList).FList;
+        {$WARNINGS ON}
+        for i := 0 to lst.Count - 1 do begin
+          with PLookupListRec(lst[i])^ do
+            if Value = FTempText then begin
+              edField.DataSet.FieldValues[edField.KeyFields] := Key;
+              break;
+             end;
+        end;
+      end;
       EndUpdating;
 
       EditingColumn(FEditingColumn, False);
@@ -3124,6 +3145,25 @@
   result := (DesignIndex>=0) and (DesignIndex<10000);
 end;
 
+function TColumn.GetPickList: TStrings;
+var
+  i: Integer;
+  lst: TList;
+  p: PLookupListRec;
+begin
+  Result := inherited GetPickList;
+  if Field.Lookup and Field.LookupCache then begin
+    Result.Clear;
+    {$WARNINGS OFF}
+    lst := TLookupListCracker(Field.LookupList).FList;
+    {$WARNINGS ON}
+    for i := 0 to lst.Count - 1 do begin
+      p := PLookupListRec(lst.Items[i]);
+      Result.AddObject(p^.Value, TObject(p));
+    end;
+  end;
+end;
+
 function TColumn.GetValueChecked: string;
 begin
   if FValueChecked = nil then
Index: grids.pas
===================================================================
--- grids.pas	(revision 16933)
+++ grids.pas	(working copy)
@@ -422,7 +422,6 @@
     function GetMaxSize: Integer;
     function GetMinSize: Integer;
     function GetSizePriority: Integer;
-    function GetPickList: TStrings;
     function GetReadOnly: Boolean;
     function GetVisible: Boolean;
     function GetWidth: Integer;
@@ -462,6 +461,7 @@
     function  GetDefaultSizePriority: Integer;
     function  GetDefaultVisible: boolean; virtual;
     function  GetDefaultWidth: Integer; virtual;
+    function GetPickList: TStrings; virtual;
     procedure ColumnChanged; virtual;
     procedure AllColumnsChange;
     function  CreateTitle: TGridColumnTitle; virtual;
