Есть вот такой код.
- Код: Выделить всё
tListItem = class (tPersistent)
private
prA : Integer;
prB : String;
public
property a: integer read pra write pra;
property b: string read prb write prb;
end;
tListObject = class (tList)
function asDataSet : tMemDataSet;
end;
...
function tListObject.asDataSet : tMemDataSet;
var
i: Integer;
begin
result := tMemDataSet.Create(nil);
result.Clear;
result.FieldDefs.Add('id', ftInteger, 1);
result.FieldDefs.Add('Name', ftString, 50);
result.active := true;
for i:= 0 to self.Count -1 do
begin
result.Insert;
// result.Fields[0].SetData(@tListItem(self.Items[i]).a, true);
// result.Fields[1].SetData(@tListItem(self.Items[i]).b, true);
result.Fields[0].Value := tListItem(self.Items[i]).a;
result.Fields[1].Value := tListItem(self.Items[i]).b;
end;
result.Post;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i, ItemNo : Integer;
begin
ListObject := tListObject.Create;
for i:=0 to 100000 do
begin
ItemNo := ListObject.Add(tListItem.Create);
tListItem(ListObject.Items[ItemNo]).a := i;
tListItem(ListObject.Items[ItemNo]).b := CurrToStr( (i*4)/15*8 );
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ds := tDataSource.Create(nil);
ds.DataSet := ListObject.asDataSet;
DBGrid1.DataSource := ds;
end;
В Двух словах. Есть тип списка данных - tList. Для быстрого и безболезненного отображения - собираю все данные в MemDataSet и передаю на DBGrid.
Все нормально работает, только не совсем пойму как мне сделать либо перенести инициализацию объекта tMemDataSet , чтобы она очищалась после исполнения функции. А то получается что каждый раз после обращения к функции у меня создается новый экземпляр. пару тысяч раз обновил - и прога раздулась.
Добавлено спустя 23 минуты 17 секунд:
Все, прошу прощения, надо наверно отдыхать больше )))))
- Код: Выделить всё
tListObject = class (tList)
private
prDataSet : tMemDataSet;
public
function asDataSet : tMemDataSet;
constructor Create;
end;
...
constructor tListObject.Create;
begin
inherited create;
self.prDataSet := tMemDataSet.Create(nil);
end;
function tListObject.asDataSet : tMemDataSet;
var
i: Integer;
begin
self.prDataSet.clear;
self.prDataSet.FieldDefs.Add('id', ftInteger, 1);
self.prDataSet.FieldDefs.Add('Name', ftString, 50);
self.prDataSet.active := true;
for i:= 0 to self.Count -1 do
begin
self.prDataSet.Insert;
// result.Fields[0].SetData(@tListItem(self.Items[i]).a, true);
// result.Fields[1].SetData(@tListItem(self.Items[i]).b, true);
self.prDataSet.Fields[0].Value := tListItem(self.Items[i]).a;
self.prDataSet.Fields[1].Value := tListItem(self.Items[i]).b;
end;
self.prDataSet.Post;
result := self.prDataSet;
end;