Listview numeroter les lignes

Résolu
sagitaz Messages postés 8 Date d'inscription dimanche 13 novembre 2005 Statut Membre Dernière intervention 12 février 2008 - 10 juin 2006 à 17:46
cs_fjohnny Messages postés 46 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 septembre 2006 - 12 juin 2006 à 17:00
bonjour à tous

voici mon soucis, j'ai 4 colonnes dans une listview, je rempli celle-ci avec les infos des fichier que je selectionne grace a un opendialog, jusque la pas de probleme.

par contre je souhaiterais avoir dans une de mes colonnes le numero de la ligne, mais pour lui je bloque.

ensuite j'aimerais faire en sorte que si je supprime une ligne alors les numeros se remettes en ordre :
par exemple :

1
2
3
4
5

je supprime la ligne 3 et je souhaiterais avoir dans ma colonne a la place de ça :

1
2
4
5

ceci

1
2
3
4

merci d'avance pour votre aide ... précieuse.
sagitaz

4 réponses

cs_fjohnny Messages postés 46 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 septembre 2006
12 juin 2006 à 11:27
Salut,

A ta place je mettrais la numérotation dans la procédure DrawItem, cela donnera quelquechose dans ce style (j'ai pas testé, c'est pour te donner une piste).

procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
  Item: TListItem; Rect: TRect; State: TOwnerDrawState);
Var Num : Strings;
begin
      Num := InttoStr(Item.Index); {numero de la ligne}
      Items.SubItems.Add(Num); {j'ajoute pour chaque item}
end;

@+ fjohnny
3
cs_fjohnny Messages postés 46 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 septembre 2006
12 juin 2006 à 17:00
Salut,

   L'essentiel c'est que ça marche me diras-tu...
 Mais je trouve ta méthode un peu "risquer" dans la mesure ou tu fait apelle à un edit4.text qui est modifiable par ailleurs dans ton programme (c'est peut-être pas le cas), mais s'il était modifié ce qui serait désastreux dans l'exécution de ta procédure.
Si tu me permet de te donner un conseil d'ami (c'est comme ca que doucement je progresse aussi) : D'une manière générale, on essaie de limiter au maximum les appels à des composants externes ou des variables globales.

Salutations,
fjohnny
3
sagitaz Messages postés 8 Date d'inscription dimanche 13 novembre 2005 Statut Membre Dernière intervention 12 février 2008
11 juin 2006 à 03:28
désolé je n'ai pas trouver comment on edite les messages sur ce forum ... si cela est possible

je passais pour vous montrer ou j'en suis apres quelques heures de lecture.

procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
    num : string;
begin
listview1.DeleteSelected; {je supprime la ligne selectionner}
with ListView1 do
for i := 0 to Items.Count - 1 do
begin
num := 'pas fait'; {numero de la ligne}
listview1.Items.Item[i].SubItems.Add(num); {j'ajoute pour chaque items}
end;
end;


voici la partie de mon code qui me sert a supprimer une ligne, je pense que je me rapproche de ce que je souhaite, demain il ferras jour.

bonne nuit a tous.
sagitaz
0
sagitaz Messages postés 8 Date d'inscription dimanche 13 novembre 2005 Statut Membre Dernière intervention 12 février 2008
12 juin 2006 à 15:41
merci, je vais regarder cette piste. sinon j'ai reussi a faire ce que je souhaiter d'une autre façon.


j'ai sur ma form une editbox qui me sert a afficher le nombres de
fichiers, j'incremente celle ci de + 1 a chaque ligne trouvé. mon
probleme etait de remettre en ordre les numéros lors de la suppresion
d'une ligne. voici le code qui me permet de faire cela.

procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
num : string;
begin
listview1.DeleteSelected;
edit4.clear;
edit4.Text := '0';

for i := 0 to ListView1.Items.Count - 1 do
begin
       if StrToInt(edit4.text) <> 0 then
begin
y := StrToInt(edit4.text);
edit4.text := IntToStr(y + 1);
end
else
begin
edit4.text := '1';
end;

num := edit4.Text;


listview1.Items.Item[i].SubItems.Delete(2);
listview1.Items.Item[i].SubItems.Append(num);
end;
end;

je ne sais pas si la methode employé est la bonne, mais elle fait ce que je lui demande.
0
Rejoignez-nous