Tlistview Delphi中最后一行的问题
我有一个包含一些数据的ListView,它工作正常,除非我试图从最后一行获取数据,在这种情况下,它会返回随机数据 我有一个函数,在这个函数中,我将对象(类中的对象列表)添加到列表视图,然后再添加一个用于从数据库中删除数据并再次填充列表视图的对象 //这里我填充列表视图Tlistview Delphi中最后一行的问题,listview,delphi,Listview,Delphi,我有一个包含一些数据的ListView,它工作正常,除非我试图从最后一行获取数据,在这种情况下,它会返回随机数据 我有一个函数,在这个函数中,我将对象(类中的对象列表)添加到列表视图,然后再添加一个用于从数据库中删除数据并再次填充列表视图的对象 //这里我填充列表视图 procedure TFrameEinExpression.Fill_Rows; var itm : TFormulaFeatures; i : integer; begin lvModels.Clear; Ei
procedure TFrameEinExpression.Fill_Rows;
var
itm : TFormulaFeatures;
i : integer;
begin
lvModels.Clear;
EinExpression.LoadFeatureList;
if (not Assigned(EinExpression)) or (EinExpression.FeatureList.Count = 0) then
Exit;
lvModels.Items.BeginUpdate;
try
for i := 0 to EinExpression.FeatureList.Count - 1 do
with lvModels.Items.Add do
begin
itm := TFormulaFeatures(EinExpression.FeatureList.Items[i]);
Data := TFormulaFeatures(EinExpression.FeatureList.Items[i]);
Caption := IntToStr(itm.Posicion);
SubItems.Add(BoolToStr(itm.Presencia, True));
SubItems.Add(itm.Descripcion);
SubItems.Add(IntToStr(itm.Idcaract1));
end;
finally
lvModels.Items.EndUpdate;
if Assigned(itm) then
itm.Free;
end;
end;
//Here I perform the action (it works fine except for the last row)
if (Assigned (lvModels.Selected)) and (Assigned (lvModels.Selected.Data)) then
//This already doesn't have anything inside
showmessage('Desc :'+ TFormulaFeatures(lvModels.Selected.Data).Descripcion);
begin
BDMultiEP.SQLExecute('DELETE from [EXPRESSION] WHERE (idcaract=:Z) AND
(idcaract1=:Y)', [EinExpression.IDCARACT,
TFormulaFeatures(lvModels.Selected.Data).IDCARACT1]);
end;
//after this i take the values from the DB to the class and populate the List View again.
LoadFeatureList;
Fill_Rows;
在showmessage(用于测试)中,我有字段描述,但最后一个字段是什么时候,我没有任何信息。此行
如果已分配(itm),则itm.Free
释放EinExpression.FeatureList的最后一项
由于itm
对该对象的生命周期不负责任,这是最后一个列表项中丢失数据的最可能原因
删除该行。该行看起来可疑:如果已分配(itm),则itm.Free代码>@LURD:的确如此。应该不需要调用itm.Free
,因为它不是一个所有者引用。@LURD:可能是错误的原因(itm指向最后一项,如果它被释放-->kaboom!)。请把那个贴出来作为答案。我想知道数据应该做什么。ISTM:没什么。