URGENT: TListView...

Résolu
cedflow Messages postés 28 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 8 novembre 2004 - 4 nov. 2004 à 14:46
cedflow Messages postés 28 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 8 novembre 2004 - 8 nov. 2004 à 01:07
Voilà le dernier point qui me pose problème dans mon prog que je doit rendre lundi

g un listview avec plusieurs colonnes, et j'aimerais pouvoir classer les lignes complete par ordre alphabétique ou numérique en appuyant sur l'entête de la colonne qui servire à classer les lignes.

je c pas si je me suis exprimer clairement...

donc voici un exemple:

entete1 | entete2
-------------------------------------------
1 | coucou
2 | atchoum
3 | quelexemple

si je clic sur l'entete de ma deuxième colonne il faudrait que cela donne ca:

entete1 | entete2
-------------------------------------------
2 | atchoum
1 | coucou
3 | quelexemple

ps: désolé j'ai pris un exemple idiot, mais c parce que d'après les réponses que j'ai vu sur le forum sur des sujets proches de ca, la réponse ne me convenait pas, donc je donne un max de précision, même si elles paraissent niaises.

- Tant que j'y suis comment fais ton pour imprimer sous forme de tableau le contenu du TListView

merci à tous

7 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
5 nov. 2004 à 20:03
Oups, tu voulais seulement rechercher dans la deuxième colonne. Alors ce sera :
function TForm1.FindInSubItems(const S: String; ListView: TListView; Col: integer = 0):TListItem;
var
  I: integer;
begin
  Result := nil;
  with ListView do
  begin
    //Vérifier que l'on est pas hors limites !
    if (Col < 0) or (Col > Items[0].SubItems.Count - 1) then
      exit;

    for i := 0 to Items.Count - 1 do
      if Items[i].SubItems[Col] = S then
      begin
        Result := Items[i];
        Break;
      end;
  end;
end;


que l'on peut utiliser de la manière suivante :
procedure TForm1.btnFindInSubItemsClick(Sender: TObject);
begin
  ListView1.Selected := FindInSubItems(Edit1.Text, ListView1)
end;


Comme ça, tu n'auras pas à nous demander comment on recherche dans la 3e colonne, puis la 4e, etc.
Non, je plaisante. :clown)
On doit toujours rechercher la réutilisabilité.
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
May Delphi be with you
3
cedflow Messages postés 28 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 8 novembre 2004
4 nov. 2004 à 15:22
tant que j suis comment fait on pour faire une recherche à partir d'un TEdit, des nom qui se trouve dans la deuxième colonne.

encore merci d'avance.
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
4 nov. 2004 à 15:36
hello

en cherchant sur google on peut trouver ça :
http://www.codeguru.com/Cpp/controls/listview/
vers le bas se trouve un chapitre "sorting" (tries)

bonne prog

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ;)

-------------------------------------------
http://diabloporc.free.fr : mon site refait ! Delphi power !
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
4 nov. 2004 à 18:12
pour l'astuce de la rechch par index, vois si ce dode peux t'aider :
http://diabloporc.free.fr/astuces.php#lb1ere

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ;)

-------------------------------------------
http://diabloporc.free.fr : mon site refait ! Delphi power !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cedflow Messages postés 28 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 8 novembre 2004
5 nov. 2004 à 11:17
nickel pour le tri et l'impression

par contre je ne trouve pas comment on fait pour la recherche dans la troisième colonne (ce sont des nom de famille)

car la fonction findcaption ne marche que dans la première colonne
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
5 nov. 2004 à 19:42
J'aime quand les problèmatiques sont bien posées ! ;)
Il y a un proverbe qui dit : "quand un problème est bien posé, la solution est à moitié trouvée".
En plus, la réponse arrive toujours plus vite. On n'a pas l'impression de perdre son temps avec quelqu'un qui ne sait pas ce qu'il veut.
Non, ton exemple n'est pas "idiot". Il est admirablement démonstratif de ce que tu veux obtenir.

Trêve de bavardages :-p , je complète la moitié manquante :
procedure TForm1.btnFindInSubItemsClick(Sender: TObject);
var
  I, J: integer;
begin
  with ListView1 do
    for i := 0 to Items.Count - 1 do
      for j := 0 to Items[i].SubItems.Count - 1 do
        if Items[i].SubItems[j] = Edit1.Text then
        begin
          Selected := Items[i];
          Exit;
        end;
end;


Evidemment, cette solution ne fonctionnera que si le composant TListView est mode vsReport.
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
May Delphi be with you
0
cedflow Messages postés 28 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 8 novembre 2004
8 nov. 2004 à 01:07
Merci beaucoup Delphiprog
0