самый просто способ, при заполнении грида, сопостовлять "поле -> нормальное имя" через case и при взятии значения из combobox делать обратное сопостовление "нормальное имя->поле". типо такова:
Код:
var
fields, names: TStringList;
function TForm1.GetNameFromField(field: string);
begin
Result := names[fields.IndexOf(field)];
end;
function TForm1.GetFieldFromName(name: string);
begin
Result := fields[names.IndexOf(name)];
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fields := TStringList.Create;
names := TStringList.Create;
fields.Add('fio');
names.Add('Фамилия');
fields.Add('name');
names.Add('Название');
fields.Add('value');
names.Add('Значение');
for i:=0 to ADOQuery1.FieldCount - 1 do
Combobox1.Items.Add(GetNameFromField(ADOQuery1.Fields[i].fieldname));
end;
procedure TForm1.FilterClick(Sender: TObject);
var
fieldname: string;
begin
fieldname := GetFieldFromName(ComboBox1.Text);
// тут применение фильтра по полю fieldname
end;
можно сделать и на массива (но так для понимая проще, как я написал).
P.S.: за ошибки не ручаюсь, писалось "на лету" без Delphi, но смысел должен быть понятен