ASP.NET C#动态显示柱形图

来源:互联网 发布:路由器缺省域名是什么 编辑:程序博客网 时间:2024/04/28 20:44

很多人都问这个的效果,我整了个截图发上来

项目中的一个需求,不知道是不是正解,但是搞定之后觉得挺简单的,也没有用到什么插件,更不会有版权的问题,不过只是简单的柱形图而已,大家可以参照,有时忽悠一下boss或者客户还是不错的,呵呵

我是横向显示柱形图, 事先准备一个窄点的图,便于动态拉伸冒充柱形图,我准备的图是高30,宽11,如下图

  左右一定不要有渐变或者是边框之类的,这样横着拉伸就不会有不清晰的情况出现,如果你是弄竖着的就注意上下的部分,一个道理。

我是六个柱形图的对比,界面上放Image1--Image6   默认显示上面图,  每个Image后面跟一个Lable, Label1-label6   对应显示柱形图的数值,label7是他们的和 (在赋值的时候,我还处理了没有数据的情况,显示另外一个图,如倒数第二个)

然后我是异步取六个数,如果取的数我就不说了,反正取了6个数值分别写到六个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"+ "万元";
            }


        }


    }