J'ai essayé les idées: Drawing a chart from a datatable et de How To Bind A DataTable To MS ChartDataTable Graphique - L'utilisation Points.AddXY ou DataBind
Je ne suis pas sûr si je manque quelque chose de stupide ou mon cas est différent. J'ai un DataTable
nommé DataTableUsedToPlotGraph
. Ce DataTable
contient plusieurs colonnes (par exemple, temp, time, time_formatted, foder_name ...). Je veux tracer le graphique avec les données de deux colonnes de cette colonne DataTable
(colonne X-temps vs colonne Y-time). Ce que j'ai essayé (Il est dit que j'ai besoin non seulement de points X, mais aussi de points Y. Si j'essaie de mettre x et y, je ne peux pas convertir 'System.Data.dataTable' en 'System.Collections.IEnumerable'):
ChartTempVsTime.Series["TimeVsTempPoint"].Points.DataBind(DataTableUsedToPlotGraph,"time");
ou
ChartTempVsTime.Series["TimeVsTempPoint"].Points.DataBindXY(DataTableUsedToPlotGraph,"time", "temp");
en outre, (ne trace pas quoi que ce soit dans mon graphique)
this.ChartTempVsTime.Series["TimeVsTempPoint"].Points.AddXY(DataTableUsedToPlotGraphTemp.Columns["time"].ToString(), DataTableUsedToPlotGraphTemp.Columns["temp"].ToString());
Ensuite,
DataView dv1 = new DataView(DataTableUsedToPlotGraph);
DataView dv2 = new DataView(DataTableUsedToPlotGraph);
dv1.RowFilter = "time";
dv2.RowFilter = "temp";
ChartTempVsTime.Series["TimeVsTempPoint"].Points.DataBind(dv1, "time", "temp, "");
Pour l'accès à la base que j'utilise ceci:
try
{
conDatabase.Open();
myReader = cmdDatabase.ExecuteReader();
while (myReader.Read())
{
ChartTempVsTime.Series["TimeVsTempPoint"].MarkerSize = 2;
this.ChartTempVsTime.Series["TimeVsTempPoint"].Points.AddXY(myReader["time"].ToString(), myReader["temp"].ToString());
}
} // end of try
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Mais rien ne fonctionne. Est-ce que quelqu'un sait ce qui me manque?
Après avoir lu et obtenir beaucoup d'aide de @TaW, j'ai essayé, sans succès (le graphique montre, mais sans points):
try
{
this.ChartTempVsTime.Series["TimeVsTempPoint"].Points.DataBindXY(DataTableUsedToPlotGraph.Rows, "temp", DataTableUsedToPlotGraph.Rows, "time");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Note: si j'utilise les mêmes colonnes avec " SqlDataReader myReader; " , ça fonctionne bien.
Une autre tentative (montrant le graphique, mais pas de points):
DataTableReader myReader;
try
{
myReader = DataTableUsedToPlotGraph.CreateDataReader();
while (myReader.Read())
{
//ChartTempVsTime.Series["TimeVsTempPoint"].MarkerSize = 2;
this.ChartTempVsTime.Series["TimeVsTempPoint"].Points.AddXY(myReader["time"].ToString(), myReader["temp"].ToString());
}
} // end of try
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
I Ajouter un DGV pour voir si j'ai données:
this.dataGridView1.DataSource = DataTableUsedToPlotGraph;
this.ChartTempVsTime.Series["TimeVsTempPoint"].Points.DataBindXY(DataTableUsedToPlotGraph.Rows, "temp", DataTableUsedToPlotGraph.Rows, "time");
les résultats contiennent des données + colonnes nom avec le temps et temp. Je vais essayer de télécharger l'image sur un serveur.
_Ne fonctionne pas_ n'est pas une description de problème utile! - Ce qui se produit? Rien? Les erreurs? Crashes? Mauvais résultats? - Aussi: Vous ne pouvez pas au moins tester pour voir si vous avez acutually les données que vous avez prévu de sélectionner ?? – TaW
Aussi: Pourquoi convertissez-vous les données en chaîne? Les graphiques sont censés afficher des nombres; les valeurs y seront converties par le système mais les valeurs x ne le seront pas! – TaW
@TaW, j'ai édité ma question. J'espère que c'est clairement maintenant. Aussi, j'ai essayé de faire ToString() parce que si je ne force pas, j'obtiens l'erreur "Une exception non gérée de type 'System.ArgumentException' s'est produite dans System.Windows.Forms.DataVisualization.dll". Si j'utilise ToString(), je passe cette erreur - mais je suis d'accord avec vous, les graphiques ne sont que des nombres et non des chaînes! –