Afficher une grille

Résolu
igloobuster
Messages postés
12
Date d'inscription
jeudi 19 octobre 2006
Statut
Membre
Dernière intervention
24 juillet 2009
- 19 oct. 2006 à 17:59
yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
- 31 oct. 2006 à 19:53
salut à tous, j'ai un tableau a deux dimmensions et j'aimerais afficher se tableau dans une fenetre.

J'ai pensé à une Listview, mais le probleme est que dans les tutos que j'ai vu, on ne pouvais pas gerer case par case(voir groupe de case).

Voila mon probleme est la.

Je code en C sous visual studio.

Thx

23 réponses

yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
24
20 oct. 2006 à 17:54
Bien sur, si ça peut t'aider.

Tu dois ajouter à ta boite à outils VStudio le controle activeX
MS-hierarchicalFlexGrid Version 6. (Component gallery pour c++6 ou objets COM pour .net), ensuite tu le fait glisser sur un dialog et tu ajoute une var membre comme pour un bouton ou autre. VStudio va générer une classe wrapper (.h et .cpp), puis tu utiliseras les méthodes et constantes du wrapper.

EX :

//Dans ta class dialog.h
#include "msflexgrid1.h"

CMsflexgrid1 m_flexgrid;

// Dans onDraw() par exemple

int nbrChamp;
int nbrLigne;


// Cela sert pour des données exemples
// peut provenir d'un tab ou base de données ect....
int i;
int posSepar = 0;
int ancienPos = 0;int nDebutLigne 0, nFinLigne 0;
CString sLigne(_T(""));
CString extract(_T(""));


// Données exemples
CString header[4] = {_T("idHeader"),_T("ChampTexte"),
                               _T("ChampFloat"),_T("ChampDate")};
CString sResultat(_T("100|texte 1|125.25|28/06/2004 01:12:00|\r\n")
                          _T("200|texte 2|100.55|10/02/2001 10:02:00|\r\n")
                          _T("300|texte 3|110.10|NULL|\r\n"));


m_flexgrid.Clear();

// nombre de lignes fixe à la création, donc modifiées ici


m_flexgrid.put_Rows((long)nbrLigne+1);


// Ecrit les entêtes du flexgrid, largeur & alignement gauche
for(i=0; i<nbrChamp; i++)
{
 m_flexgrid.put_TextMatrix(0, i, header[i]);
 m_flexgrid.put_ColAlignment(i, CMsflexgrid1::flexAlignLeftCenter);
 m_flexgrid.put_ColWidth(i, 1400L);
   
}


// Extrait les données par ligne et champs


for(i=0; i<nbrLigne; i++)
{
 posSepar  = 0;
 ancienPos = 0;
 nFinLigne = sResultat.Find("\r\n", nDebutLigne);
 sLigne = sResultat.Mid(nDebutLigne, nFinLigne-nDebutLigne);
 nDebutLigne = nFinLigne + 2;
  
 for(int k=0; k<nbrChamp; k++)
 {
  // BackColor ligne paires plus foncées
  if( i%2 == 0 )
  {
   m_flexgrid.put_Row((long)i+1);
   m_flexgrid.put_Col((long)k);
   m_flexgrid.put_CellBackColor((unsigned long)RGB(240,240,240));
  }


  // déformate val & insère dans colonnes
  if( (posSepar = sLigne.Find('|', ancienPos)) != -1 )
  {
   extract = sLigne.Mid(ancienPos, (posSepar-ancienPos));
   ancienPos = posSepar + 1;
   m_flexgrid.put_TextMatrix(i+1, k, (LPCTSTR)extract);
  }
  else
  {
   m_flexgrid.put_TextMatrix(i+1, k, _T("NULL"));
  }
 }
}

// Les fausses données sont séparés par des '|' car c'est un morceau de code que j'utilise moi meme, mais tu peux faire plus simple en ne mettant que des données numériques.
3