Delphi FMX ListView Filtered和FDQuery.First

时间:2018-04-04 11:48:23

标签: delphi firemonkey delphi-10.2-tokyo

我有一个listview连接到query,用户使用AccessoryObject标记了一些记录。在流程结束时,我在while中设置query,检查哪些记录已被标记,并检索一些query信息。但是当我使用listview search box进行搜索并使用Query.First时,listview全部为空并返回access violation。有人知道如何解决这个问题吗?

与最小项目联系 Project

Pas文件:

unit Unit4;

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.ListView.Appearances, FMX.ListView.Adapters.Base,
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
  FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
  FireDAC.Stan.StorageBin, System.Rtti, System.Bindings.Outputs,
  Fmx.Bind.Editors, Data.Bind.EngExt, Fmx.Bind.DBEngExt,
  FMX.Controls.Presentation, FMX.StdCtrls, Data.Bind.Components,
  Data.Bind.DBScope, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client,
  FMX.Layouts, FMX.ListView;

type
  TForm4 = class(TForm)
    ListView1: TListView;
    Layout1: TLayout;
    FDMemTable1: TFDMemTable;
    FDMemTable1NAME: TStringField;
    BindSourceDB1: TBindSourceDB;
    BindingsList1: TBindingsList;
    LinkListControlToField1: TLinkListControlToField;
    Button1: TButton;
    Label1: TLabel;
    procedure ListView1ItemClick(const Sender: TObject;
      const AItem: TListViewItem);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.fmx}

procedure TForm4.Button1Click(Sender: TObject);
begin
  FDMemTable1.First;

  while not(FDMemTable1.Eof) do
  Begin
    if ListView1.Items.AppearanceItem[ListView1.Selected.Index].Objects.AccessoryObject.Visible then
    Begin
      //Do stuff

    End;
    FDMemTable1.Next;
  End;
end;

procedure TForm4.ListView1ItemClick(const Sender: TObject;
  const AItem: TListViewItem);
begin
  AItem.Objects.AccessoryObject.Visible := not AItem.Objects.AccessoryObject.Visible;
end;

end.

FMX文件

object Form4: TForm4
  Left = 0
  Top = 0
  Caption = 'Form4'
  ClientHeight = 480
  ClientWidth = 640
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  DesignerMasterStyle = 0
  object ListView1: TListView
    ItemAppearanceClassName = 'TListItemAppearance'
    ItemEditAppearanceClassName = 'TListItemShowCheckAppearance'
    HeaderAppearanceClassName = 'TListHeaderObjects'
    FooterAppearanceClassName = 'TListHeaderObjects'
    ItemIndex = 0
    Align = Client
    Size.Width = 640.000000000000000000
    Size.Height = 430.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 0
    ItemAppearanceObjects.ItemObjects.Accessory.AccessoryType = Checkmark
    ItemAppearanceObjects.ItemObjects.Accessory.Visible = False
    OnItemClick = ListView1ItemClick
    SearchVisible = True
  end
  object Layout1: TLayout
    Align = Top
    Size.Width = 640.000000000000000000
    Size.Height = 50.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 1
    object Button1: TButton
      Position.X = 24.000000000000000000
      Position.Y = 16.000000000000000000
      TabOrder = 0
      Text = 'Do Stuff'
      OnClick = Button1Click
    end
    object Label1: TLabel
      Position.X = 112.000000000000000000
      Position.Y = 19.000000000000000000
      Size.Width = 377.000000000000000000
      Size.Height = 17.000000000000000000
      Size.PlatformDefault = False
      Text = 'Search a name and click Do Stuff'
      TabOrder = 1
    end
  end
  object FDMemTable1: TFDMemTable
    Active = True
    FetchOptions.AssignedValues = [evMode]
    FetchOptions.Mode = fmAll
    ResourceOptions.AssignedValues = [rvPersistent, rvSilentMode]
    ResourceOptions.Persistent = True
    ResourceOptions.SilentMode = True
    UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates]
    UpdateOptions.CheckRequired = False
    UpdateOptions.AutoCommitUpdates = True
    Left = 304
    Top = 274
    Content = {
      414442530F00922AE1010000FF00010001FF02FF03040016000000460044004D
      0065006D005400610062006C006500310005000A0000005400610062006C0065
      00060000000000070000080032000000090000FF0AFF0B0400080000004E0041
      004D0045000500080000004E0041004D0045000C00010000000E000D000F0050
      0000001000011100011200011300011400011500011600080000004E0041004D
      004500170050000000FEFEFF18FEFF19FEFF1AFF1B1C0000000000FF1D000006
      000000415254485552FEFEFF1B1C0001000000FF1D000005000000415843454C
      FEFEFF1B1C0002000000FF1D000006000000414D414E4441FEFEFF1B1C000300
      0000FF1D0000060000004153484C4559FEFEFF1B1C0004000000FF1D00000500
      000042494E474FFEFEFF1B1C0005000000FF1D00000600000042554E4E4945FE
      FEFF1B1C0006000000FF1D0000060000004341524C4F53FEFEFF1B1C00070000
      00FF1D00000400000043415348FEFEFF1B1C0008000000FF1D00000600000043
      414252414CFEFEFF1B1C0009000000FF1D00000600000044414C4C4153FEFEFF
      1B1C000A000000FF1D000006000000454C4C494F54FEFEFF1B1C000B000000FF
      1D0000050000004641425249FEFEFEFEFEFF1EFEFF1F20000C000000FF21FEFE
      FE0E004D0061006E0061006700650072001E0055007000640061007400650073
      005200650067006900730074007200790012005400610062006C0065004C0069
      00730074000A005400610062006C00650008004E0061006D006500140053006F
      0075007200630065004E0061006D0065000A0054006100620049004400240045
      006E0066006F0072006300650043006F006E00730074007200610069006E0074
      0073001E004D0069006E0069006D0075006D0043006100700061006300690074
      007900180043006800650063006B004E006F0074004E0075006C006C00140043
      006F006C0075006D006E004C006900730074000C0043006F006C0075006D006E
      00100053006F0075007200630065004900440018006400740041006E00730069
      0053007400720069006E00670010004400610074006100540079007000650008
      00530069007A0065001400530065006100720063006800610062006C00650012
      0041006C006C006F0077004E0075006C006C000800420061007300650014004F
      0041006C006C006F0077004E0075006C006C0012004F0049006E005500700064
      0061007400650010004F0049006E00570068006500720065001A004F00720069
      00670069006E0043006F006C004E0061006D006500140053006F007500720063
      006500530069007A0065001C0043006F006E00730074007200610069006E0074
      004C00690073007400100056006900650077004C006900730074000E0052006F
      0077004C00690073007400060052006F0077000A0052006F0077004900440010
      004F0072006900670069006E0061006C001800520065006C006100740069006F
      006E004C006900730074001C0055007000640061007400650073004A006F0075
      0072006E0061006C001200530061007600650050006F0069006E0074000E0043
      00680061006E00670065007300}
    object FDMemTable1NAME: TStringField
      FieldName = 'NAME'
      Size = 80
    end
  end
  object BindSourceDB1: TBindSourceDB
    DataSet = FDMemTable1
    ScopeMappings = <>
    Left = 304
    Top = 224
  end
  object BindingsList1: TBindingsList
    Methods = <>
    OutputConverters = <>
    Left = 300
    Top = 165
    object LinkListControlToField1: TLinkListControlToField
      Category = 'Quick Bindings'
      DataSource = BindSourceDB1
      FieldName = 'NAME'
      Control = ListView1
      FillExpressions = <>
      FillHeaderExpressions = <>
      FillBreakGroups = <>
    end
  end
end

0 个答案:

没有答案