MSChart使用导航之开发

介绍过基础的MSchart知识后,大家应该容易上手写代码了,最起码搞几个饼图柱状图什么的不在话下了。下面我们看看如何在实际项目中写代码。

  1. 柱状图

          string strSQL;
          DataSet ds = new DataSet();   
          Chart1.ChartAreas[0].Name = "chartArea1";
          Chart1.Titles.Add("chartArea1");
          Chart1.Titles[0].Font = new Font("宋体", 14, FontStyle.Bold);
          strSQL = "select col1,col2 from Report";
          ds.Tables.Add(DBSQL.Query(strSQL, 300).Tables[0].Copy());
          ds.Tables[0].TableName = "chartArea1";

          if (ds.Tables[0].Rows.Count > 0)
          {
            Chart1.Series[0].Name = "chartArea1";
            Series ser_qqgzjz = Chart1.Series[0];
            ser_qqgzjz.ChartArea = "chartArea1";
            ser_qqgzjz.Points.DataBind(ds.Tables["qqgzjz"].Rows, "col2", "col1", "");
            ser_qqgzjz.IsValueShownAsLabel = true;
            Chart1.ChartAreas["chartArea1"].AxisY.Title = "Person";
            Chart1.ChartAreas["chartArea1"].AxisX.MinorGrid.LineWidth = 0;
            Chart1.ChartAreas["chartArea1"].AxisX.LabelStyle.Angle = -45;
            Chart1.ChartAreas["chartArea1"].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.NotSet;
            Chart1.ChartAreas["chartArea1"].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

          }

  2. 双纵坐标(含百分比)

      // chart is your mschart control,srcSeriesName is the name of source series name,destSeriesName 
      // is the name of series you want to add,which is percent series,totalCount is the number
      // which to caculator the percent 
      protected void TowGrid(Chart chart, string srcSeriesName, string destSeriesName, double totalCount)
        {
          string strChartArea = chart.Series[srcSeriesName].ChartArea;
          chart.Series[srcSeriesName].ChartType = SeriesChartType.Column;
          double total = totalCount;
          Series destSeries = new Series(destSeriesName);
          chart.Series.Add(destSeries);
          destSeries.ChartType = SeriesChartType.Line;
          destSeries.BorderWidth = 3;
          destSeries.ChartArea = chart.Series[srcSeriesName].ChartArea;
          destSeries.YAxisType = AxisType.Secondary;
          chart.ChartAreas[strChartArea].AxisY2.Maximum = 100;
          chart.ChartAreas[strChartArea].AxisY2.Title = "比例(%)";
          chart.ChartAreas[strChartArea].AxisY2.TitleFont = new Font("新宋体", 10);
          destSeries.LabelFormat = "P1";
          chart.ChartAreas[strChartArea].AxisY2.MajorGrid.LineDashStyle = ChartDashStyle.NotSet;
          chart.ChartAreas[strChartArea].AxisX.LabelStyle.IsEndLabelVisible = false;
          double percentage = 0.0;
          foreach (DataPoint pt in chart.Series[srcSeriesName].Points)
          {
            percentage = (pt.YValues[0] * 100.0 / total);
            destSeries.Points.Add(Math.Round(percentage, 2));
          }
          chart.Series[destSeriesName].IsValueShownAsLabel = true;
          chart.Series[destSeriesName].MarkerColor = Color.Red;
          chart.Series[destSeriesName].MarkerBorderColor = Color.MidnightBlue;
          chart.Series[destSeriesName].MarkerStyle = MarkerStyle.Circle;
          chart.Series[destSeriesName].MarkerSize = 8;
          chart.Series[destSeriesName].LabelFormat = "0.#";
        }
      }

 

///-----------------------------------------------------------------------------------------------------------------------------------------

 

兄弟你太帅了,我要实现的效果和你的一模一样。

我这个是在ms的实例中的一个方法,

 

///============================================================================

 

protected void Page_Load(object sender, System.EventArgs e)
        {
           
// Populate series with random data of different scale
            Random        random = new Random();
            DateTime    date
= DateTime.Now.Date;
           
for(int pointIndex = 0; pointIndex < 13; pointIndex++)
            {
                Chart1.Series[
"Series1"].Points.AddXY(date, random.Next(5,100));
                Chart1.Series[
"Series2"].Points.AddXY(date, random.Next(8000, 8200));
                Chart1.Series[
"Series3"].Points.AddXY(date, random.Next(1000,3000));
                date
= date.AddDays(1);
            }

           
if(UseMultipleYAxis.Checked)
            {
               
// Set custom chart area position
                Chart1.ChartAreas["ChartArea1"].Position = new ElementPosition(25,10,68,85);
                Chart1.ChartAreas[
"ChartArea1"].InnerPlotPosition = new ElementPosition(10,0,90,90);

               
// Create extra Y axis for second and third series
                CreateYAxis(Chart1, Chart1.ChartAreas["ChartArea1"], Chart1.Series["Series2"], 13, 8);
                CreateYAxis(Chart1, Chart1.ChartAreas[
"ChartArea1"], Chart1.Series["Series3"], 22, 8);
            }

        }

       
/// <summary>
       
/// Creates Y axis for the specified series.
       
/// </summary>
       
/// <param name="chart">Chart control.</param>
       
/// <param name="area">Original chart area.</param>
       
/// <param name="series">Series.</param>
       
/// <param name="axisOffset">New Y axis offset in relative coordinates.</param>
       
/// <param name="labelsSize">Extar space for new Y axis labels in relative coordinates.</param>
        public void CreateYAxis(Chart chart, ChartArea area, Series series, float axisOffset, float labelsSize)
        {
           
// Create new chart area for original series
            ChartArea areaSeries = chart.ChartAreas.Add("ChartArea_" + series.Name);
            areaSeries.BackColor
= Color.Transparent;
            areaSeries.BorderColor
= Color.Transparent;
            areaSeries.Position.FromRectangleF(area.Position.ToRectangleF());
            areaSeries.InnerPlotPosition.FromRectangleF(area.InnerPlotPosition.ToRectangleF());
            areaSeries.AxisX.MajorGrid.Enabled
= false;
            areaSeries.AxisX.MajorTickMark.Enabled
= false;
            areaSeries.AxisX.LabelStyle.Enabled
= false;
            areaSeries.AxisY.MajorGrid.Enabled
= false;
            areaSeries.AxisY.MajorTickMark.Enabled
= false;
            areaSeries.AxisY.LabelStyle.Enabled
= false;
            areaSeries.AxisY.IsStartedFromZero
= area.AxisY.IsStartedFromZero;


            series.ChartArea
= areaSeries.Name;

           
// Create new chart area for axis
            ChartArea areaAxis = chart.ChartAreas.Add("AxisY_" + series.ChartArea);
            areaAxis.BackColor
= Color.Transparent;
            areaAxis.BorderColor
= Color.Transparent;
            areaAxis.Position.FromRectangleF(chart.ChartAreas[series.ChartArea].Position.ToRectangleF());
            areaAxis.InnerPlotPosition.FromRectangleF(chart.ChartAreas[series.ChartArea].InnerPlotPosition.ToRectangleF());

           
// Create a copy of specified series
            Series seriesCopy = chart.Series.Add(series.Name + "_Copy");
            seriesCopy.ChartType
= series.ChartType;
           
foreach(DataPoint point in series.Points)
            {
                seriesCopy.Points.AddXY(point.XValue, point.YValues[
0]);
            }

           
// Hide copied series
            seriesCopy.IsVisibleInLegend = false;
            seriesCopy.Color
= Color.Transparent;
            seriesCopy.BorderColor
= Color.Transparent;
            seriesCopy.ChartArea
= areaAxis.Name;

           
// Disable drid lines & tickmarks
            areaAxis.AxisX.LineWidth = 0;
            areaAxis.AxisX.MajorGrid.Enabled
= false;
            areaAxis.AxisX.MajorTickMark.Enabled
= false;
            areaAxis.AxisX.LabelStyle.Enabled
= false;
            areaAxis.AxisY.MajorGrid.Enabled
= false;
            areaAxis.AxisY.IsStartedFromZero
= area.AxisY.IsStartedFromZero;
            areaAxis.AxisY.LabelStyle.Font
= area.AxisY.LabelStyle.Font;

           
// Adjust area position
            areaAxis.Position.X -= axisOffset;
            areaAxis.InnerPlotPosition.X
+= labelsSize;

        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值