winform中统计图相关

问题描述

写了个方法关于条形统计图的,程序运行到最后几步时出错,如下图:完整代码如下:privatevoidCreateImage(){intheight=500,width=700;Bitmapimage=newBitmap(width,height);//创建Graphics类对象Graphicsg=Graphics.FromImage(image);try{//清空图片背景色g.Clear(Color.White);Fontfont=newFont("Arial",10,FontStyle.Regular);Fontfont1=newFont("宋体",20,FontStyle.Bold);LinearGradientBrushbrush=newLinearGradientBrush(newRectangle(0,0,image.Width,image.Height),Color.Blue,Color.BlueViolet,1.2f,true);g.FillRectangle(Brushes.WhiteSmoke,0,0,width,height);//Brushbrush1=newSolidBrush(Color.Blue);g.DrawString(this.dateTimePicker1.Text+"家庭收支情况图",font1,brush,newPointF(70,30));//画图片的边框线g.DrawRectangle(newPen(Color.Blue),0,0,image.Width-1,image.Height-1);Penmypen=newPen(brush,1);//绘制线条//绘制横向线条intx=100;for(inti=0;i<27;i++){g.DrawLine(mypen,x,80,x,600);x=x+40;}Penmypen1=newPen(Color.Blue,2);x=60;g.DrawLine(mypen1,x,80,x,600);//绘制纵向线条inty=106;for(inti=0;i<10;i++){g.DrawLine(mypen,60,y,620,y);y=y+26;}g.DrawLine(mypen1,60,y,620,y);//x轴String[]n={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月","全年统计"};x=78;for(inti=0;i<13;i++){g.DrawString(n[i].ToString(),font,Brushes.Blue,x,610);//设置文字内容及输出位置x=x+78;}//y轴String[]m={"10000","9000","8000","7000","6000","5000","4000","3000","2000","1000","0"};y=72;for(inti=0;i<11;i++){g.DrawString(m[i].ToString(),font,Brushes.Blue,y,1000);//设置文字内容及输出位置y=y+1000;}int[]Count1=newint[24];int[]Count2=newint[24];////连接数据库并返回符合查询条件的值//stringconnectString="DataSource=.;InitialCatalog=FinSystem;UserID=sa;pwd=1992106713";SqlConnectionsqlCnt=newSqlConnection(connectString);sqlCnt.Open();//下列的语句实现的功能是将预算表中的“预算金额”列和“完成金额”列分别按每个月求和(利用SQLServer的子查询及聚合函数)stringcmdtxt="select*fromTable_Budgetinfowhere预算日期Between'"+dateTimePicker1.Value+"'AND'"+dateTimePicker2.Value+"'";SqlDataAdapterda=newSqlDataAdapter(cmdtxt,sqlCnt);DataSetds=newDataSet();da.Fill(ds);//将返回的数据填充到数据集ds中//将数据集ds的表中数据值转换并填充到对应数组中......//绘制柱状图.x=80;Fontfont2=newSystem.Drawing.Font("Arial",10,FontStyle.Bold);SolidBrushmybrush=newSolidBrush(Color.Red);SolidBrushmybrush2=newSolidBrush(Color.Green);//一月g.FillRectangle(mybrush,x,600-Count1[0],20,Count1[0]);g.DrawString(Count1[0].ToString(),font2,Brushes.Red,x,600-Count1[0]-15);x=x+20;g.FillRectangle(mybrush2,x,600-Count2[0],20,Count2[0]);g.DrawString(Count2[0].ToString(),font2,Brushes.Green,x,600-Count2[0]-15);//二月x=x+60;g.FillRectangle(mybrush,x,600-Count1[1],20,Count1[1]);g.DrawString(Count1[1].ToString(),font2,Brushes.Red,x,600-Count1[1]-15);x=x+20;g.FillRectangle(mybrush2,x,600-Count2[1],20,Count2[1]);g.DrawString(Count2[1].ToString(),font2,Brushes.Green,x,600-Count2[1]-15);//三月x=x+60;g.FillRectangle(mybrush,x,600-Count1[2],20,Count1[2]);g.DrawString(Count1[2].ToString(),font2,Brushes.Red,x,600-Count1[2]-15);x=x+20;g.FillRectangle(mybrush2,x,600-Count2[2],20,Count2[2]);g.DrawString(Count2[2].ToString(),font2,Brushes.Green,x,600-Count2[2]-15);//四月x=x+60;g.FillRectangle(mybrush,x,600-Count1[3],20,Count1[3]);g.DrawString(Count1[3].ToString(),font2,Brushes.Red,x,600-Count1[3]-15);x=x+20;g.FillRectangle(mybrush2,x,600-Count2[3],20,Count2[3]);g.DrawString(Count2[3].ToString(),font2,Brushes.Green,x,600-Count2[3]-15);//五月x=x+60;g.FillRectangle(mybrush,x,600-Count1[4],20,Count1[4]);g.DrawString(Count1[4].ToString(),font2,Brushes.Red,x,600-Count1[4]-15);x=x+20;g.FillRectangle(mybrush2,x,600-Count2[4],20,Count2[4]);g.DrawString(Count2[4].ToString(),font2,Brushes.Green,x,600-Count2[4]-15);//六月x=x+60;g.FillRectangle(mybrush,x,600-Count1[5],20,Count1[5]);g.DrawString(Count1[5].ToString(),font2,Brushes.Red,x,600-Count1[5]-15);x=x+20;g.FillRectangle(mybrush2,x,600-Count2[5],20,Count2[5]);g.DrawString(Count2[5].ToString(),font2,Brushes.Green,x,600-Count2[5]-15);......................//全年x=x+60;g.FillRectangle(mybrush,x,600-Count1[12],20,Count1[12]);g.DrawString(Count1[12].ToString(),font2,Brushes.Red,x,600-Count1[12]-15);x=x+20;g.FillRectangle(mybrush2,x,600-Count2[12],20,Count2[12]);g.DrawString(Count2[12].ToString(),font2,Brushes.Green,x,600-Count2[12]-15);//绘制标识Fontfont3=newSystem.Drawing.Font("Arial",10,FontStyle.Regular);g.DrawRectangle(newPen(Brushes.Blue),170,400,250,50);//绘制范围框g.FillRectangle(Brushes.Red,270,410,20,10);//绘制小矩形g.DrawString("预算金额",font3,Brushes.Red,292,408);g.FillRectangle(Brushes.Green,270,430,20,10);g.DrawString("完成金额",font3,Brushes.Green,292,428);System.IO.MemoryStreamms=newSystem.IO.MemoryStream();image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);System.Web.HttpContext.Current.Response.ClearContent();运行到这行出错---未将对象引用设置到对象的实例。System.Web.HttpContext.Current.Response.ContentType="image/Jpeg";System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());}finally{g.Dispose();image.Dispose();高手们帮忙看看吧,毕设很急(代码是看网上然后自己改的,貌似是ASP.NET的,我的程序是winform)

解决方案

本帖最后由 lucky566 于 2015-05-06 18:04:48 编辑
解决方案二:
图片太小了有点儿看不清啊,是空引用错误吧?你用来操作的变量为null,报错了
解决方案三:
System.Web相关类是asp.net的,winform中用不了的
解决方案四:
如果不是真要把图片发送给客户端,那么image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);执行完就可以够了,后面几句可以无视

时间: 2024-09-20 09:07:25

winform中统计图相关的相关文章

WINFORM中绑定对象支持排序功能

在很久很久以前,DataSet操作是.Net中的一个重要使用手段,其实现在也是 . 在很久很久以前,我的项目操作方式是通过数据Fill一个DataSet,之后返回 给业务层做处理,之后给页面去显示. 随着时间积累,越来越不喜欢DataSet,我记得有人跟我说DataTable比 DataSet效率高,我不反驳也不认同,不知道. 我只知道DataSet如果不做任何处理在WebService上传输效率极其低下. 之后的编程模式中引入了对象的概念.至于对象的好处,在此不做论述. 这篇文章主要表述不是对

解决方案-关于winform中 内置office浏览功能的问题

问题描述 关于winform中 内置office浏览功能的问题 想做一个winform程序中,, 可以内置浏览office相关文档我在网上查了一些资料,可以用dsoframer和webbrowser.但是效果不怎么好,一是有很多bug,二是对office 2007勉强支持,但对office2010不怎么支持.而且微软早已停止了对dsoframer的支持.我想问问一问各位大虾,有没有其他好的解决方案?

WinForm中DataGridView折叠控件【超好看】_实用技巧

刚到一家新公司,领导下发任务要用cs系统做一个表格折叠显示,这真是把我难倒了,自己工作6年一直以来都是做BS的系统.这如果在BS里面那太简单了,JqGrid默认都自带,可是DataGridview不支持折叠啊.自己一点经验没有,怎么办呢?于是上网搜了相关视频,资料,开始学习起来.最后借鉴源码封了这么一个东西,发出来分享下,也能让自己加深印象. 首先不多说,上图.如果大家感谢还不错,请继续往下阅读: 大概的效果就是这样. 上代码. 1.首先重写DataGridview,代码如下: public c

在WinForm中发送HTTP请求的实现方法_C#教程

如何在WinForm中请求发送HTTP 手工发送HTTP请求主要是调用 System.Net的HttpWebResponse方法 手工发送HTTP的GET请求: string strURL = "http://localhost/Play/CH1/Service1.asmx/doSearch?keyword="; strURL +=this.textBox1.Text; System.Net.HttpWebRequest request; // 创建一个HTTP请求 request =

C#在winform中实现数据增删改查等功能_C#教程

winform中利用ado.net实现对单表的增删改查的详细例子,具体如下: 1.前言: 运行环境:VS2013+SQL2008+Windows10 程序界面预览: 使用的主要控件:dataGridview和menuStrip等.  2.功能具体介绍: 1.首先,我们要先实现基本的数据操作,增删改查这几个操作. (1)先定义一个数据库操作的公共类: using System; using System.Collections.Generic; using System.Linq; using S

关于在winform中调用飞信web接口出现的问题。

问题描述 我在winform中引用飞信web接口后,然后进一步通过代理类的对象来调用方法,,,可是,,在调用了函数Login(stringXXX,stringXXX)并写好了相关代码后,,,运行程序结果显示登录不上,,,弹出"com=loginerrXXX"提示.(注:我是在.net4.0上开发该程序的)附:经过一些相关的测试,发现飞信服务器那边其实是收到了我的登录名以及密码的,,,就是始终登录不上啊!!!~~~这才是问题所在啊~~~ 解决方案 解决方案二:哪位大虾帮帮啊~解决方案三:

根据汉字声母,在表中找相关记录。比如输入&amp;amp;quot;zgyh&amp;amp;quot;,就能找到所有“中国银行”的记录。

汉字 根据汉字声母,要在表中找相关记录,怎么实现?比如输入"zgyh",就能找到所有"中国银行"的记录. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_GetPy]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[f_GetPy]GO --创建取拼音函数create function f_GetPy(

WinForm中类似WebForm中的CheckBoxList控件

web|控件 前些天,在.Net技术的论坛里面看到了有个帖子,我好像记得是怎么实现WinForm中类似WebForm中的CheckBoxList控件,我简单的实现了那样的一个控件 首先,你得建立一个控件项目,假如说是: 接着,你就添加一个类:CheckBoxCollection,它是个CheckBox的集合类 具体的代码如下 CheckBoxCollection.cs using System;using System.Collections;using System.Windows.Forms

如何在C#的WinForm中制作饼状图和柱状图

饼状图|柱状图 当我们的软件需要各种饼状图和柱状图来表示数据时,我们或许会想到用Offices中的图形控件或是第三方控件,但现在的第三方控件大都需要注册,有些免费的控件会有开发商的标记等.而对于使用Offices的图形控件来说,并不能在程序中得于很好控制,其使用的简易程度也较低,所以在这我给出在C#中使用GDI+实现饼状图和柱状图跟数据库联接显示数据的方法.  using System;  using System.IO;//用于文件存取  using System.Data;//用于数据访问