asp.net如何制作2个柱状的柱状图..?欢迎大家发表自己的看法...

解决方案 »

  1.   

    是动态的显示柱状图吗,根据两个数值的不同,显示的高度也不同?
    我前端时间正好做过一个,你可以参考一下,我是横向显示柱形图,
    事先准备一个窄点的图,便于动态拉伸冒充柱形图
    界面上放Image1--Image6 显示那个图, Label1-label6 对应显示柱形图的数值,label7是他们的和然后我是异步取六个数,分别写到六个lable里,然后执行下面的代码,
    下面的代码,大概是对比六个,取出最大的一个来,已柱形图最宽为300为限,
    动态的算出各个图的比例并设置,设完图的宽后,再强制设置一下它原来的高,
    我这里是30,因为你不设置高的话,图就按比例变了
        private void DrawImage()
        {
            float valM = 0;
            float valTemp = 0;
            float valSum = 0;        if (IsNumeric(Label1.Text))
            {
                valM = Convert.ToSingle(Label1.Text);
                valSum = Convert.ToSingle(Label1.Text );
                
            }
            if (IsNumeric(Label2.Text))
            {
                valSum += Convert.ToSingle(Label2.Text);            if (valM < Convert.ToSingle(Label2.Text))
                    valM = Convert.ToSingle(Label2.Text);
            }
            if (IsNumeric(Label3.Text))
            {
                valSum += Convert.ToSingle(Label3.Text);            if (valM < Convert.ToSingle(Label3.Text))
                    valM = Convert.ToSingle(Label3.Text);
            }
            if (IsNumeric(Label4.Text))
            {
                valSum += Convert.ToSingle(Label4.Text);            if (valM < Convert.ToSingle(Label4.Text))
                    valM = Convert.ToSingle(Label4.Text);
            }
            if (IsNumeric(Label5.Text))
            {
                valSum += Convert.ToSingle(Label5.Text);            if (valM < Convert.ToSingle(Label5.Text))
                    valM = Convert.ToSingle(Label5.Text);        }
            if (IsNumeric(Label6.Text))
            {
                valSum += Convert.ToSingle(Label6.Text);            if (valM < Convert.ToSingle(Label6.Text))
                    valM = Convert.ToSingle(Label6.Text);
            }        Label7.ToolTip = Convert.ToString(valSum);
            
            valSum =(valSum /10000);
                    
            Label7.Text = "本年度 至今 征收总额" + valSum.ToString("N0") + "万元";
            
            
            if (valM > 0)
            {
                if (IsNumeric(Label1.Text))
                {
                    Image1.Width = Unit.Pixel(Convert.ToInt32(Convert.ToSingle(Label1.Text) / valM * 300));
                    Image1.Height = 30;
                    valTemp = Convert.ToSingle(Label1.Text) / 10000;
                    Label1.Text = valTemp.ToString("N0") + "万元";
                }            if (IsNumeric(Label2.Text))
                {
                    Image2.Width = Unit.Pixel(Convert.ToInt32(Convert.ToSingle(Label2.Text) / valM * 300));
                    Image2.Height = 30;
                    valTemp = Convert.ToSingle(Label2.Text) / 10000;
                    Label2.Text = valTemp.ToString("N0") + "万元";
                }            if (IsNumeric(Label3.Text))
                {
                    Image3.Width = Unit.Pixel(Convert.ToInt32(Convert.ToSingle(Label3.Text) / valM * 300));
                    Image3.Height = 30;
                    valTemp = Convert.ToSingle(Label3.Text) / 10000;
                    Label3.Text = valTemp.ToString("N0") + "万元";
                }            if (IsNumeric(Label4.Text))
                {
                    Image4.Width = Unit.Pixel(Convert.ToInt32(Convert.ToSingle(Label4.Text) / valM * 300));
                    Image4.Height = 30;
                    valTemp = Convert.ToSingle(Label4.Text) / 10000;
                    Label4.Text = valTemp.ToString("N0") + "万元";
                }            if (IsNumeric(Label5.Text))
                {
                    Image5.Width = Unit.Pixel(Convert.ToInt32(Convert.ToSingle(Label5.Text) / valM * 300));
                    Image5.Height = 30;
                    valTemp = Convert.ToSingle(Label5.Text) / 10000;
                    Label5.Text = valTemp.ToString("N0") + "万元";
                }            if (IsNumeric(Label6.Text))
                {
                    Image6.Width = Unit.Pixel(Convert.ToInt32(Convert.ToSingle(Label6.Text) / valM * 300));
                    Image6.Height = 30;
                    valTemp = Convert.ToSingle(Label6.Text) / 10000;
                    Label6.Text = valTemp.ToString("N0") + "万元";
                }        }    }
      

  2.   

    http://blog.csdn.net/Eray/archive/2007/04/23/1575468.aspx
      

  3.   

    用OWC我成功做过那个柱状图,我不明白的就是,怎么对每一个,比如说一月份,我要给它画2个柱状的,一个是消费次数,一个消费总金额..我做这个时候,不知道应该设置哪个属性.因为直接在一个柱状下面再画一个的时候,2个柱状会重合的...不知道位置怎么设置...
      

  4.   

    仅仅是柱状图的话,用不着什么OWC 还有什么插件,那样太麻烦,你就放个小图在那里,然后算出来各个的比例,动态的设置柱的高度就ok了,你那样自己现画的话太麻烦了,没有必要
      

  5.   

    AccessManager 哥们,我不知道你那做出来是什么效果..用那么多image,再说,我那个统计图,统计方式是可以组合选的,横向显示几个分类也不确定..再说我一个类就要显示2个柱状,那得要多少个Image..
      

  6.   

    晕,你没说清楚嘛我的六个image,是显示6个image,你的两个,只要两个就行了另外,你的题目是这样的“asp.net如何制作2个柱状的柱状图..?欢迎大家发表自己的看法...”
    我的代码完全可以现实你的功能但是你现在又加了限制,“统计方式是可以组合选的,横向显示几个分类也不确定..”
    那肯定是不适合了,需要动态的进行设置,不过思路差不多的
      

  7.   

    使用OWC,若柱状图每个显示为一个组,各个组中同类的柱状为一个系列..将他们分到各个数组中,在组长度的循环中,使用Microsoft.Office.Interop.Owc11.ChSeries做一个循环就解决问题了..
     protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                string sql = "SELECT ROW_NUMBER() OVER (ORDER BY d.operationname)as id, d.operationname ,SUM(CONVERT(FLOAT,a.totalprice)) AS totalprice,COUNT(a.terminalnum) AS counts FROM bankresinfolog a,terminalinfo b,operationinfo d,areainfo c WHERE a.terminalnum=b.terminalnum AND c.areaid=b.areaid AND a.Serviceid=d.operationcode GROUP BY d.operationname";
                DataSet ds = pstnpay.DBOperate.GetDateSet(sql);
                int m = ds.Tables[0].Rows.Count;
                string[] categoryArr = new string[m];
                string[] valueArr1 = new string[m];
                string[] valueArr2 = new string[m];
                for (int i = 0; i < m; i++)
                {
                    categoryArr[i] = ds.Tables[0].Rows[i][1].ToString();
                    valueArr1[i] = Convert.ToString((Convert.ToInt32(ds.Tables[0].Rows[i][2]))/1000);
                    valueArr2[i] = Convert.ToString((Convert.ToInt32(ds.Tables[0].Rows[i][3])));
                }
                
            string categoryStr = string.Join("\t", categoryArr);                string valueStr1 = string.Join("\t", valueArr1);
            string valueStr2 = string.Join("\t", valueArr2);
            string[] valueArr = new string[] { valueStr1, valueStr2 };
            string[] titleArr = new string[] { "消耗量m3", "水费(元)" };        string[] colorArr = new string[] { "#9999FF", "#993366" };        ToPrint(categoryStr, valueArr, titleArr, colorArr); 
            }
        }    void ToPrint(string categoryStr, string[] valueArr, string[] titleArr, string[] colorArr)
        {
            // 新建一个绘图空间
            ChartSpace objCSpace = new ChartSpace();
            // 在绘图空间中新建一个图表
            ChChart objChart = objCSpace.Charts.Add(0);
            //objChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered3D; // 指定图表的类型为3D柱状
            objChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered; // 平面柱状
            objChart.HasLegend = true; // 指定图表是否需要图例        // 标题
            objChart.HasTitle = true;
            objChart.Title.Caption = "年度水量消耗统计";
            objChart.Title.Font.Size = 9;
            objChart.Title.Font.Name = "宋体";
            objChart.Title.Font.Bold = true;        objChart.PlotArea.Interior.Color = "#C0C0C0"; // 绘图区的背景颜色
            objChart.PlotArea.Floor.Interior.Color = "#888888"; // 绘图区的底色        objChart.Legend.Font.Size = 9; // 图例的字体        for (int i = 0; i < valueArr.Length; i++)
            {
                // 在图表中添加一个数据系列
                ChSeries objSeries = objChart.SeriesCollection.Add(i);
                objSeries.SetData(ChartDimensionsEnum.chDimSeriesNames, ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), titleArr[i]);
                objSeries.SetData(ChartDimensionsEnum.chDimCategories, ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), categoryStr);
                objSeries.SetData(ChartDimensionsEnum.chDimValues, ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), valueArr[i]);
                objSeries.Interior.Color = colorArr[i]; // 柱子内部的颜色
                objSeries.GapWidth = 300; // 柱子之间的间隙            ChDataLabels objDataLabels = objChart.SeriesCollection[i].DataLabelsCollection.Add();
                objDataLabels.HasValue = false; // 柱子上面的数字是否显示
                objDataLabels.Font.Color = "Black"; // 柱子上面的数字颜色是黑色的
            }
            objCSpace.ExportPicture(MapPath(@"img/02.gif"), "gif", 500, 300);
            
        }