Zed graph+timer

Résolu
Signaler
Messages postés
17
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
7 mai 2008
-
Messages postés
17
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
7 mai 2008
-
Bonjour je dois faire un projet en C# réalisant des graphiques en temps réel avec une base de donnée.
J'arrive a afficher dans une textbox tous les secondes les valeurs qui sont dans ma base de données (access) grace a un timer mais je n'arrive pas a l'afficher sur mon graphe j'utilise zedgraph.
J'aimerais savoir si c'est possible et comment ca marche .

voici le code qui me permet de récuperer les valeurs dans access:

private
void timer1_Tick_1(
object sender,
EventArgs e){

counter++;

label1.Text = counter.ToString();

int idLigne = counter;

//requete à exécuter (ici, nous récupérons les dates et valeurs des mesures de la courbe 5

//vous pouvez bien évidemment modifier cette requête

string requete =
"SELECT ID, MESURE, PAS, FC , FR, SPO2 FROM MESURES WHERE ID=" + idLigne; 

//création de la connection

OdbcConnection connection =
new
OdbcConnection();

//chaine de connection (du type "DSN=monDSN)

string chaineDeConnection =
"DSN=baseTest";

//affectation de la chaine de connection à la connectionconnection.ConnectionString = chaineDeConnection;

//ouverture de la connectionconnection.Open();

//création du DataSet

DataSet data =
new
DataSet();

//création du OdbcDataAdapter

OdbcDataAdapter adapter =
new
OdbcDataAdapter(requete, connection);

//remplissage du DataSet avec les résultats de la requêteadapter.Fill(data);

//on déclare maTable comme étant la première table du DataSet (celle qui nous interesse)

DataTable maTable = data.Tables[0];

//on affiche l'ID de la courbe concernée (\r\n pour sauter une ligne)textBox1.Text +=

"Ligne " + idLigne +
"\r\n\r\n";

foreach (
DataRow row
in maTable.Rows){

//et on affiche dans la textBox la date et la valeur de chaque mesure de la courbe
ID = (
int)row[0];

MESURE = (
double)row[1];PAS = (

double)row[2];FC = (

double)row[3];FR = (

double)row[4];SPO2 = (

double)row[5];Mesure[counter] = MESURE;

Pas[counter] = PAS;

Fc[counter] = FC;

Fr[counter] = FR;

Spo2[counter] = SPO2;

}

Et voici mon code pour affiche sur le graph :

private
void CreerGraphique(
ZedGraphControl zgc){

// get a reference to the GraphPane
GraphPane myPane = zg1.GraphPane;

// Set the Titles
myPane.Title.Text =
" Fréquence Cardiaque";
myPane.XAxis.Title.Text =
" Temps";
myPane.YAxis.Title.Text =
" BPM";

// Make up some random data points

PointPairList list1 =
new
PointPairList();

for (counter = 0; counter < 20; counter++){

list1.Add(counter, Mesure[counter]);

}

LineItem Courbe1 = myPane.AddCurve(
"Freq. Card.", list1,
Color.Blue,
SymbolType.Diamond);myPane.Chart.Fill =

new
Fill(
Color.BlueViolet,
Color.FromArgb(255, 255, 255), 180F);myPane.Fill =

new
Fill(
Color.FromArgb(250, 250, 255));zg1.AxisChange();

}

Merci d'avance

12 réponses

Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
Oublie pas zg1.Invalidate() pour forcer l'evenement paint et ca devrait régler ton probleme.
Messages postés
128
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
2 août 2009
6
Après:
zg1.AxisChange();
Messages postés
17
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
7 mai 2008

le zg1.Invalidate()  il faut que je le place ou  pour etre sur que ca fonctionne.

Merci de ta réponse
Messages postés
17
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
7 mai 2008

j'ai essayé de mettre zg1.Invalidate(); après lezg1.AxisChange(); mais j'ai toujours rien dans mon graphique.J'ai testé les valeurs de mes différentes variables dans des labels  elles s'affichent bien .

Je dois avoir un probleme dans mon code que je vois pas.
Messages postés
128
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
2 août 2009
6
Sinon essaie peut-être refresh() à la place d'invalidate, des fois invalidate met trop de temps à être repeint.
Messages postés
17
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
7 mai 2008

non plus ça marche pas je pense que ça doit venir de mon code enfin je sais pas je suis un peu perdu la.
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
Non non la doc pécise qu'il faut Invalidate pour refresh un graph.
Messages postés
17
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
7 mai 2008

je viens de me rendre compte d'un truc j'ai testé mes variables  MESURE, PAS, FC, FR et SPO2 dans des labels , elles retournent bien quelques choses mais quand je testes mon tableau de ces variables mon label affiche toujours zéro.
Je ne comprends pas pourquoi.
Messages postés
17
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
7 mai 2008

En fait le probleme venait que j'avais oublié de mettre CreerGraphique(zg1); dans mon timer donc le tableau vide normal c'est un peu con ^^  .
Maintenant j'ai un autre probleme qui devrait etre plus simple je voudrait que les points sur mon graphe soit relier  je sais pas comment on fait.
Merci de votre aide
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
Heu... c'est le tout premier "sample" de la doc tracer une courbe hein.

http://zedgraph.org/wiki/index.php?title=Filled_Curve_Demo
Messages postés
17
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
7 mai 2008

merci pour la doc mais y a un truc que je ne comprends pas j'ai essayer de faire comme dans la doc ça marche les points sont reliés mais après quand je le mets dans mon timer ils ne sont plus reliés.
Sinon j'ai un autre problème j'ai mis le noms des graphes , les axes , et le noms de la courbes dans mon timer donc tout les secondes ça me recrées un noms de la courbes . J'aimerais faire l'initialisation de tous ces noms en dehors de mon timer mais j'y arrive pas.

Merci de votre aide
Messages postés
17
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
7 mai 2008

autre question j'aimerais que les axis de temps soit fixe une fenetre de 20 sec par exemple qui se décalerait .

Merci