PB avec listview

Signaler
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
J'ai cree un listview avec les styles:
LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP
LVS_REPORT | LVS_EDITLABELS
WS_VISIBLE |WS_CHILD | WS_TABSTOP
Dans ce listview j'ajoute deux colonnes avec le code suivant:

BOOL LISTVIEWInitColumns(t_listview listview, unsigned int nbcolonnes, char *titrecolonne[], unsigned int taillecolonne)
{
LVCOLUMN lvc;
unsigned int icol;
char buffer[256];


//Initialisation de la structure LVCOLUMN
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.cx = taillecolonne;
lvc.pszText = buffer;


// Add the columns.
for (icol = 0; icol < nbcolonnes; icol++)
{
lvc.iSubItem = icol;
strcpy(buffer, titrecolonne[icol]);
if (ListView_InsertColumn(listview.handle, icol, &lvc) == -1)
return FALSE;
}
return TRUE;
}

J'ajoute dans ces colonnes des données avec la finction suivante:
void LISTVIEWInsertItem(t_listview listview, unsigned int nbcolonnes, t_listviewdata data, int itemindex)
{
LVITEM lvi;
unsigned int i;


lvi.mask = LVIF_TEXT | LVIF_STATE ;
lvi.state = 0;
lvi.iImage = 0;
lvi.cchTextMax = 256;
lvi.iItem = itemindex;
for (i = 0; i < data.nbdata && i < nbcolonnes; i++)
{
lvi.iSubItem = i;
lvi.pszText = data.data[i];
// 1ere colonne =>On doit créer une nouvelle colonne
if (i == 0)
ListView_InsertItem(listview.handle, &lvi);
//Les autres colonnes =>On n'a qu'à ecrire dans la colonne precedemment créée
else
ListView_SetItemText(listview.handle, itemindex, i, lvi.pszText);
}
}
Pour info, mes structures sont:
typedef struct s_listview
{
HWND handle;
unsigned long ID;
unsigned int x, y, w, h;
}t_listview;
typedef struct s_listviewdata
{
unsigned int nbdata;
char *data[NBCOLMAX];
int imageindex; //Pour l'instant je travaille uniquement en vue details, donc pas besoin
} t_listviewdata;

Le probleme arrive lorsque je veux modifier lors de l'execution du prog les données contenues dans le listview. Je modifie sans probleme la donnée se trouvant dans la première colonne, mais je ne peux pas modifier les données des autres colonnes.
Je ne sais pas comment y remédier, alors si vous avez des idées... elles sont les bienvenues!
Merci d'avance!

PS: je travaille en C, pas en C++ ni avec les MFC!

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]

4 réponses

Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
Il faut que tu renseigne iSubItem de ta structure pour modifier un subitem.

@+
Arnotic,
Admin CS, MVP Visual C++
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
13
Je crois que je me suis mal exprimé!
Le problème que j'ai, n'est pas de modifier un item de la listeview quand je suis dans mon code! Si j'initialise mon listview avec des données contenues dans un fichier, et que au cours de l'execution du programme je modifie ce fichier, les items de ma listview se mettent bien à jour, et ce dans toutes les colonnes.
Ce qui ne marche pas, c'est lorsque j'execute mon programme et que je veux modifier un item d'une colonne en cliquant dessus. Ce qui si j'ai bien compris devrait être fait avec le style LVS_EDITLABELS. Avec ce style, je ne peux modifier que la première colonne lorsque je clique dessus. D'ailleurs je n'arrive à selectionner sur une ligne que la premiere colonne ou alors toute la ligne, mais pas colonne par colonne.

Si c'est pas assez clair, dites le moi, je mettrais le code, mais il est assez gros, alors jusque la j'evite!
Merci!

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
Bonjour,



Je voudrais savoir si tu as trouvé la réponse à ta question car j'ai le même pb que toi sauf que je suis en C++ (tjs sans MFC).



Merci,



Le créateur du site http://victorlogiciels.com
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
13
En sous classant (il me semble que c'est comme ça que ça se dit), j'ai pu attraper les messages du listview avant qu'il ne soit traiter par la fonction par défaut, et la, tu peux faire ce que tu veux avec, et notamment lors d'un clic avec la souris sur une colonne, afficher un editbox dans lequel tu rentres la nouvelle valeur.

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]