关于图表数据的来源:
1、通过XValueMember YValueMembers 设置
OleDbConnection conn = new OleDbConnection(connStr);
OleDbCommand comm = new OleDbCommand(); string sqlstr = "select * from OriginalData order by ID";
OleDbDataAdapter myda ;
DataSet myds= new System.Data.DataSet(); try
{
conn.Open();
myda = new OleDbDataAdapter(sqlstr, conn);
//myds = new System.Data.DataSet();
myda.Fill(myds, "OriginalData"); }
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close(); } chart1.DataSource = myds.Tables["OriginalData"];
chart1.Series[0].XValueMember = "PositionV";
chart1.Series[0].YValueMembers = "LoadV";
//chart1.Series[0].XValueType = ChartValueType.Date; //chart1.Series[0].Label = "#VAL"; //显示对应点的值
chart1.Series[0].ToolTip = "#VALX : #VAL"; //鼠标在曲线图上时 显示对应点的值
chart1.Series[0].ChartType = SeriesChartType.Line;
2、用新定义的DataTable类型的dt来绑定
DataTable dt = new System.Data.DataTable(); AccessHelper ach= new AccessHelper(fileName);
string sqlstr = "select LoadValue ,PositionValue from OriginalData order by ID";
dt = ach.GetDataTableFromDB(sqlstr);
chart1.DataSource = dt; chart1.Series[0].XValueMember = dt.Columns[0].ColumnName; chart1.Series[0].YValueMembers = dt.Columns[1].ColumnName; chart1.Series[0].ChartType = SeriesChartType.Line; ach.ClostConn();
3、用类似chart1.Series[0].Points.DataBindXY(iXAxis,fTargetOT);中的DataBindXY(X,Y)来绑定数据。。其中,X是一个数组,Y也是数组,在绑定之前需要对数组中的每个元素赋值
DataTable dt = new System.Data.DataTable(); AccessHelper ach = new AccessHelper(fileName);
string sqlstr = "select LoadV ,PositionV from OriginalData order by ID";
dt = ach.GetDataTableFromDB(sqlstr);
////chart1.DataSource = dt; ////chart1.Series[0].XValueMember = dt.Columns[0].ColumnName; ////chart1.Series[0].YValueMembers = dt.Columns[1].ColumnName;
////chart1.Series[0].ChartType = SeriesChartType.Line;
int count = dt.Rows.Count;
if (count == 0)
{
return;
}
double[] loadValueArray = new double[count];
double[] posArray= new double[count];
for (int i = 0; i < count; i++)
{
loadValueArray[i] = Convert.ToDouble(dt.Rows[i][0].ToString());
posArray[i] = Convert.ToDouble(dt.Rows[i][1].ToString()); }
chart1.Series[0].Points .DataBindXY(loadValueArray,posArray);
此种方式,适合,读过来的数据需要进行处理的情况,如果不需要处理,而且列特别多,则不建议使用这种方式,用方式二比较方便。
4、来自单独的数据,动态添加序列 通过定时器 实时调用
chart3.Series.Clear();
Series seriesDownTime =newSeries("DownTime");//此时就添加一个序列,chart3.Series[0]
seriesDownTime.ChartType =SeriesChartType.Column;
//比如要添加的内容放在了数组X和数组Y中,则添加第一个值可以如下添加:
seriesDownTime.Points.AddXY(X[n],Y[n]);
下一个值与之类似,直到把很少的几个点添加完成即可。。。
此种方式适合要显示在图表上的只有少量的几个点,如果数据众多,建议按集合来添加。