我想我在TListView中发现了一个潜在的错误。
当您将ListView与DataSource绑定并希望通过向左/向右擦除时删除列表中的最后一项,则会出现错误。 (翻译:超出界限的价值)
我调查过并发现COUNT
号码不是删除例程中实际的项目数。如果我有一个项目,则计数为0.
当我使用.ADD
方法创建ListView时,计数很好,删除工作也很好。
是否有可用的解决方法?
在代码中你看不到多少。 ListViewSprache中的最后一项可以通过擦除来删除,但ListView1在从我的SQLite DB中选择一些记录并想要擦除最后一项后会产生错误。我已将整个演示项目上传到bug.zip,但您必须在Android上运行它,它支持通过擦除选定的ListView项目进行删除。
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.ListView.Types, FMX.StdCtrls, FMX.ListView, FireDAC.Stan.Intf,
FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf,
FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys,
FireDAC.Phys.SQLite, FireDAC.Stan.ExprFuncs, FireDAC.FMXUI.Login,
FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt,
System.Rtti, System.Bindings.Outputs, Fmx.Bind.Editors, Data.Bind.EngExt,
Fmx.Bind.DBEngExt, Data.Bind.Components, Data.Bind.DBScope, Data.DB,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Comp.UI;
type
TForm1 = class(TForm)
ListView1: TListView;
ButtonAdd: TButton;
ListViewSprache: TListView;
FDConnection1: TFDConnection;
FDGUIxLoginDialog1: TFDGUIxLoginDialog;
FDQuery1: TFDQuery;
FDQueryCreateTable: TFDQuery;
BindSourceDB1: TBindSourceDB;
BindingsList1: TBindingsList;
LinkFillControlToField1: TLinkFillControlToField;
procedure ButtonAddClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
LItem : TListViewItem;
implementation
{$R *.fmx}
procedure TForm1.ButtonAddClick(Sender: TObject);
begin
ListViewSprache.BeginUpdate;
try
LItem := ListViewSprache.Items.Add;
LItem.Text := 'Deutsch'; // itemindex = 0
LItem := ListViewSprache.Items.Add;
LItem.Text := 'English'; // itemindex = 1
finally
ListViewSprache.EndUpdate;
end;
end;
end.