2017-09-25 7 views
0

J'ai une application créée en Delphi Seattle, et j'ai migré vers Delphi Tokyo. Mais mes recherches dans ListView ne fonctionnent plus correctement. Lors d'une première utilisation, cela fonctionne correctement, je filtre un enregistrement et je le modifie. J'envoie les données à un serveur datasnap et récupère tous les enregistrements pour actualiser la liste. Mais si j'essaye de chercher à nouveau, il ne trouve plus l'enregistrement, mais en parcourant la liste, je peux trouver l'enregistrement.Le filtre ListView ne fonctionne pas après l'extraction des données du serveur datasnap

Apparemment, tous les enregistrements qui n'apparaissent pas à l'écran lorsque je recharge les données ne sont pas filtrés. Si je navigue manuellement vers l'enregistrement et effectue la recherche, alors cela fonctionne.

Mon code pour récupérer des données à partir datasnap et afficher sur listview:

DadosSocio := F_ClientModule.ServerMethods1Client.GetSocio(0); 
    Assert(TFDJSONDataSetsReader.GetListCount(DadosSocio) = 1); 

    mem_Socios.Close; 
    mem_Socios.AppendData(TFDJSONDataSetsReader.GetListValue(DadosSocio, 0)); 
    mem_Socios.Open; 

    lvSocios.ScrollTo(0); 
    lvSocios.ScrollViewPos := 0; 

J'utilise ce code pour nettoyer le filtre:

for I := 0 to lvSocios.Controls.Count-1 do 
    Begin 
    if lvSocios.Controls[I].ClassType = TSearchBox then 
    begin 
     TSearchBox(lvSocios.Controls[I]).Text := ''; 
    end; 
    End; 

J'ai essayé d'utiliser ce code pour nettoyer le filtre, mais il renvoie l'erreur Argument out of Range:

lvSocios.Items.Filter := nil; 

Répondre

0

J'ai résolu mon problème avec les éléments suivants code:

var 
    I: Integer; 
begin 
    for I := 0 to ListView.Controls.Count-1 do 
    Begin 
    if ListView.Controls[I].ClassType = TSearchBox then 
    begin 
     TSearchBox(ListView.Controls[I]).Text := ''; 
    end; 
    End; 

    ListView.Items.Filter := nil;