PB avec listview

julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 - 13 janv. 2005 à 03:50
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 - 21 avril 2005 à 18:48
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

cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012 1
13 janv. 2005 à 09:25
Il faut que tu renseigne iSubItem de ta structure pour modifier un subitem.

@+
Arnotic,
Admin CS, MVP Visual C++
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
13 janv. 2005 à 13:49
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]
0
victorcoasne Messages postés 1103 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
19 avril 2005 à 09:09
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
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
21 avril 2005 à 18:48
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]
0
Rejoignez-nous