如何用ASP.NET+C#如何画一折线图或圆饼图?
环境是VS2005BETA(VS2003)中文版,数据可以从数据库中取。
本人是水平粗浅,请指教.

解决方案 »

  1.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=221BC601-1A1B-4E1F-883D-04B043659703
      

  2.   

    OWC图表(C#)
    OWC.ChartSpace owcChartSpace=new OWC.ChartSpace();
    OWC.WCChart owcChart=owcChartSpace.Charts.Add(0);
    ADODB.Connection ConnADO = new ADODB.Connection();
    ADODB.Recordset RecordsetADO = new ADODB.Recordset();
    string connectionString = "Provider=MSDataShape;Data Provider=SQLOLEDB;uid=OAM;pwd=OAM;Data Source=bqsnet;initial catalog=oam";
    ConnADO.Open(connectionString,"OAM","OAM",-1);
    RecordsetADO.ActiveConnection = ConnADO;
    RecordsetADO.CursorType = ADODB.CursorTypeEnum.adOpenStatic;
    RecordsetADO.CursorLocation = ADODB.CursorLocationEnum.adUseClient;
    string strSQL = "select * from student order by student";
    RecordsetADO.Open(strSQL,ConnADO,ADODB.CursorTypeEnum.adOpenStatic,ADODB.LockTypeEnum.adLockReadOnly,0);
    owcChartSpace.DataSource=(msdatasrc.DataSource)RecordsetADO;
    owcChart.Type=OWC.ChartChartTypeEnum.chChartTypeColumnClustered; //柱状
    // owcChart.Type = OWC.ChartChartTypeEnum.chChartTypeSmoothLineMarkers;  //线状
    owcChart.SetData(OWC.ChartDimensionsEnum.chDimSeriesNames,0,"student");
    foreach (OWC.WCSeries owcSeries in owcChart.SeriesCollection)
    {
    owcSeries.SetData(OWC.ChartDimensionsEnum.chDimCategories,0,"test");  //X轴
    owcSeries.SetData(OWC.ChartDimensionsEnum.chDimValues,0,"score");  //Y轴
    }
    foreach (OWC.WCAxis axis in owcChart.Axes)
    {   //说明表示意义
    owcChart.HasLegend=true;
    owcChart.Legend.Position=OWC.ChartLegendPositionEnum.chLegendPositionBottom;
    // owcChart.Legend.Font.Size=15;
    //标题
    owcChart.HasTitle=true;
    owcChart.Title.Caption="学生成绩表";
    //X,Y轴意义
    axis.HasTitle=true;
    if (axis.Type==ChartAxisTypeEnum.chCategoryAxis)
    {
    axis.Title.Caption="test";
    }
    else
    {
    axis.Title.Caption="score";
    }
    }
    // owcChart.SeriesCollection[1].Interior.Color="red";  //改变颜色
    // owcChart.SeriesCollection[1].Line.Color="red";  //改变颜色
    Random rd=new Random();
    int nfilenameSuffix;
    string sfilenamesuffix;
    nfilenameSuffix = 100000 * rd.Next();
    sfilenamesuffix = Convert.ToString(nfilenameSuffix);
    owcChartSpace.ExportPicture(MapPath("../Report/") + sfilenamesuffix + ".gif", "gif", 800, 600);
    Image1.ImageUrl = "../Report/" + sfilenamesuffix + ".gif";
      

  3.   

    在写以上代码的前先在引用中加Microsoft Office Web Components9.0
    在using中加using OWC
      

  4.   

    www.kehui.net/html/article/44/44003.html 
    dotnet.aspx.cc/ ShowDetail.aspx?id=221BC601-1A1B-4E1F-883D-04B043659703例子很全
      

  5.   

    用: ComponentOne组件集,以下代码公供参考,因为要运行还要进行一些配置,如果
    你对ComponentOne感兴趣,可以学一下饼图// private void GetPieChart(DataView dv)
    // {
    // PointF[] data = new PointF[dv.Count];
    // for (int i = 0; i < data.Length; i++)
    // {
    // float y = float.Parse((dv[i]["ProjectPreAmount"]).ToString());
    // data[i] = new PointF(i, y);
    // }
    //
    //
    // //清除现有的饼
    // ChartDataSeriesCollection dscoll = C1WebChart2.ChartGroups[0].ChartData.SeriesList;
    // dscoll.Clear();
    //
    // for(int i=0; i < data.Length; i++)
    // {
    // ChartDataSeries series = dscoll.AddNewSeries();
    // series.PointData.Length = 1;
    // series.Y[0] = data[i].Y;
    // series.Label=dv[i]["ProjectPreAmount"].ToString();  //设置Legend
    //
    //
    // //加标签
    //
    // C1.Win.C1Chart.Label lbl = C1WebChart2.ChartLabels.LabelsCollection.AddNewLabel();
    // lbl.Text = string.Format("{0}: ({1:c})",dv[i]["ChiName"], data[i].Y);
    // lbl.Compass = LabelCompassEnum.Radial;
    //
    // lbl.Offset = 50;
    // lbl.Connected = true;
    // lbl.Visible = true;
    // lbl.AttachMethod = AttachMethodEnum.DataIndex;
    // AttachMethodData am = lbl.AttachMethodData;
    // am.GroupIndex  = 0;
    // am.SeriesIndex = i;
    // am.PointIndex  = 0;
    // }
    //
    // //设置离心的距离
    //
    // ChartData cd = C1WebChart2.ChartGroups.ChartGroupsCollection[0].ChartData;
    // for(int i = 0; i < cd.SeriesList.Count; i ++)
    // {
    // cd.SeriesList[i].Offset = 30;
    // }
    // }
      

  6.   

    先谢谢各位热心的同学。
    现在有几个问题:
    1、必须要先生成JPG文件?
    2、鼠标在图像上移动时能否提示如当前的纵坐标值?
    3、此例若用来显示一实时商品报价走势,如产品甲,每10秒价格更新一次,联系报价4小时,
      怎么做较好?对服务器压力最小(因为要考虑多并发数)?
      做这个报价示例,若用JPG的方法,是否每次都要重画?也就是说是否每次画都要从头画一遍?还是
      在原来的基础上画个点就行了?若这样做,又怎么做?欢迎大家赐教
      

  7.   

    用GDI+是最灵活的,但相对麻烦一点儿,现在现成的控件也有不少