Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Не отображаются поля MemTable


Автор: Anry 25.9.2007, 15:43
Создал клас.
В нем свойство типа TMemTableEh
При создании экземпляра собственно создаю мемтабле.
Список полей в нем создаю при выполнении определенного метода

Код

.....
var i: integer;
    NewField: TField;
begin
  FResultDataSet.DestroyTable;
  for i := 0 to FSetDataItems.Count - 1 do
  begin
    NewField := TStringField.Create(nil);
    NewField.Size := 50;
    NewField.FieldName := FSetDataItems.Items[i].ItemName;
    NewField.DisplayLabel := FSetDataItems.Items[i].DisplayName;
    NewField.Visible := true;
    FResultDataSet.Fields.Add(NewField);
  end;
  FResultDataSet.CreateDataSet;
  FResultDataSet.Open;
....


после чего датасорц натравливаю на этот датасет.
Так в гриде показывается два поля, которые создаются в рунтайме, но ни названий в заголовках грида, ни нормального редактирования в гриде не могу сделать.
В дебугере обращаюс к филдам по индексе - все свойства нормально заполнены.
В чем могут быть грабли? Подскажите пожалуйста.

Автор: ALeXandrK 25.9.2007, 16:02
Так может Grid`у нужно тоже явно добавить нужные столбцы, указав все нужные свойства.

Автор: Anry 25.9.2007, 17:22
Это не помогает.  smile
Сам датасет ругается, когда обращаешься к полю методом FieldByName.
Хотя в дебугере по индексу поля смотрю его название у датасета - все нормально.
Может быть кто-нибудь делал подобное. Уже все перепробовал.
Возможно ответ где-то на поверхности?

Автор: ALeXandrK 25.9.2007, 23:54
Может попробовать создать поле с помощью метода типа TFieldDef:
Код

function CreateField(Owner: TComponent; ParentField: TObjectField = nil; 
                                const FieldName: WideString = ''; CreateChildren: Boolean = True): TField;


Хотя в Help'е написано "Applications need never call CreateField directly.".

Или попробуй не через FieldByName обратиться, а через Fields[x]...
Может ошибка из-за того, что ты тип поля не указал.

Автор: Anry 26.9.2007, 08:41
Разобрался.
Нужно делать примерно так
Код

..........
var  FieldsDef: TFieldDef;
begin
  FResultDataSet.FieldDefs.Clear;
  FResultDataSet.DestroyTable;
  FieldsDef := FResultDataSet.FieldDefs.AddFieldDef;
  FieldsDef.Name := 'Field01';
  FieldsDef.DataType := ftString;
  FieldsDef.Size := 55;
  FResultDataSet.CreateDataSet;
...........

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)