想实现一个条形图上画曲线.双坐标.
现在是可以实现,一组条形图和一条曲线.
当有多组条形图时,就只出现最后组数据和第一组数据.效果就是:最后组数据和第一组数据所对应的图形种类,其它组数据就没能出现.代码如下: public OleDbDataReader GetList(string Sql)
{
OleDbConnection myConnection = new OleDbConnection("Provider=SQLOLEDB;server=(local);uid=sa;pwd=gdcc;database=try;");
OleDbCommand myCommand = new OleDbCommand(Sql, myConnection);
myConnection.Open();
OleDbDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
return result;
}
private void button3_Click(object sender, EventArgs e)
{
OleDbDataReader dr = GetList("select top 10 name,data1,data2,data3,data4 from trydata");
d_Chart(dr);
}
public void d_Chart(OleDbDataReader sdr)
{
ArrayList[] data_al = new ArrayList[sdr.FieldCount];
for (int i = 0; i < sdr.FieldCount; i++)
{
data_al[i] = new ArrayList();
}
while (sdr.Read())
{
for (int i = 0; i < sdr.FieldCount; i++)
{
data_al[i].Add(sdr.GetValue(i).ToString());
}
}
sdr.Close();
//清空上一次存在的图例
axChartSpace1.Clear(); ChChart objChart = axChartSpace1.Charts.Add(0); //指定图表是否需要图例
objChart.HasLegend = true;
objChart.HasTitle = true;
objChart.Title.Caption = "分析图";
//xy轴说明
objChart.Axes[0].HasTitle = true;
objChart.Axes[0].Title.Caption = "OrderDate";
objChart.Axes[1].HasTitle = true;
objChart.Axes[1].Title.Caption = "ShipVia"; for (int i = 0; i < data_al.Length - 1; i++)
{
if (i == 0)
{
//objChart.Type = ChartChartTypeEnum.chChartTypeSmoothLine;
objChart.SeriesCollection.Add(i);
objChart.SeriesCollection[i].DataLabelsCollection.Add();
objChart.SeriesCollection[i].Type = ChartChartTypeEnum.chChartTypeSmoothLine;
objChart.SeriesCollection[i].Ungroup(true);
ChAxis seAxes = objChart.Axes.Add(objChart.SeriesCollection[i].get_Scalings(ChartDimensionsEnum.chDimValues));
seAxes.Position = ChartAxisPositionEnum.chAxisPositionRight;
seAxes.HasMajorGridlines = false;
//给定series的名字
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimSeriesNames,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, i.ToString());
//给定分类
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimCategories,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[0].ToArray());
//给定值
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimValues,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[i + 1].ToArray());
objChart.SeriesCollection[i].Caption = "Example" + i.ToString();
}
else
{
//在ChartSpace对象中添加图表,Add方法返回chart对象
objChart.SeriesCollection.Add(i);
objChart.SeriesCollection[i].Type = ChartChartTypeEnum.chChartTypeColumnClustered;
objChart.SeriesCollection[i].DataLabelsCollection.Add();
//给定series的名字
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimSeriesNames,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, i.ToString());
//给定分类
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimCategories,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[0].ToArray());
//给定值
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimValues,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[i + 1].ToArray());
objChart.SeriesCollection[i].Caption = "Example" + i.ToString(); }
}
}
这样就只有data1对应的曲线和data4对应的条形图出来了,而data2,data3对应的条形图却没有出来,我是想data2,data3的条形图也出来,望高手指点,谢谢!
分不够可再加!
现在是可以实现,一组条形图和一条曲线.
当有多组条形图时,就只出现最后组数据和第一组数据.效果就是:最后组数据和第一组数据所对应的图形种类,其它组数据就没能出现.代码如下: public OleDbDataReader GetList(string Sql)
{
OleDbConnection myConnection = new OleDbConnection("Provider=SQLOLEDB;server=(local);uid=sa;pwd=gdcc;database=try;");
OleDbCommand myCommand = new OleDbCommand(Sql, myConnection);
myConnection.Open();
OleDbDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
return result;
}
private void button3_Click(object sender, EventArgs e)
{
OleDbDataReader dr = GetList("select top 10 name,data1,data2,data3,data4 from trydata");
d_Chart(dr);
}
public void d_Chart(OleDbDataReader sdr)
{
ArrayList[] data_al = new ArrayList[sdr.FieldCount];
for (int i = 0; i < sdr.FieldCount; i++)
{
data_al[i] = new ArrayList();
}
while (sdr.Read())
{
for (int i = 0; i < sdr.FieldCount; i++)
{
data_al[i].Add(sdr.GetValue(i).ToString());
}
}
sdr.Close();
//清空上一次存在的图例
axChartSpace1.Clear(); ChChart objChart = axChartSpace1.Charts.Add(0); //指定图表是否需要图例
objChart.HasLegend = true;
objChart.HasTitle = true;
objChart.Title.Caption = "分析图";
//xy轴说明
objChart.Axes[0].HasTitle = true;
objChart.Axes[0].Title.Caption = "OrderDate";
objChart.Axes[1].HasTitle = true;
objChart.Axes[1].Title.Caption = "ShipVia"; for (int i = 0; i < data_al.Length - 1; i++)
{
if (i == 0)
{
//objChart.Type = ChartChartTypeEnum.chChartTypeSmoothLine;
objChart.SeriesCollection.Add(i);
objChart.SeriesCollection[i].DataLabelsCollection.Add();
objChart.SeriesCollection[i].Type = ChartChartTypeEnum.chChartTypeSmoothLine;
objChart.SeriesCollection[i].Ungroup(true);
ChAxis seAxes = objChart.Axes.Add(objChart.SeriesCollection[i].get_Scalings(ChartDimensionsEnum.chDimValues));
seAxes.Position = ChartAxisPositionEnum.chAxisPositionRight;
seAxes.HasMajorGridlines = false;
//给定series的名字
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimSeriesNames,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, i.ToString());
//给定分类
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimCategories,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[0].ToArray());
//给定值
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimValues,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[i + 1].ToArray());
objChart.SeriesCollection[i].Caption = "Example" + i.ToString();
}
else
{
//在ChartSpace对象中添加图表,Add方法返回chart对象
objChart.SeriesCollection.Add(i);
objChart.SeriesCollection[i].Type = ChartChartTypeEnum.chChartTypeColumnClustered;
objChart.SeriesCollection[i].DataLabelsCollection.Add();
//给定series的名字
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimSeriesNames,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, i.ToString());
//给定分类
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimCategories,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[0].ToArray());
//给定值
objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimValues,
(int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[i + 1].ToArray());
objChart.SeriesCollection[i].Caption = "Example" + i.ToString(); }
}
}
这样就只有data1对应的曲线和data4对应的条形图出来了,而data2,data3对应的条形图却没有出来,我是想data2,data3的条形图也出来,望高手指点,谢谢!
分不够可再加!
参考
http://www.cnblogs.com/zhf/articles/1224065.html
http://www.cnblogs.com/dygstudio/archive/2007/08/06/449996.html