在Web页面上通过OWC作图的用户控件

在Web上作图一般都采用先生成图片,然后再显示的方法。本文也不例外。
自制了一个Web用户控件,通过设置属性可以显示几种简单的图形。
柱状图、面积图、折线图、条状图、曲线图。

怎样安装OWC的环境,已经有很多文章了,这里就不再赘述了。
下面是控件的代码,页面上只需要加一个名为Image1的Image即可。

using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Office.Interop.OWC;
using System.IO;

/**/ ///<summary>
///ControlGraph的摘要说明。
///</summary>

public class ControlGraph:System.Web.UI.UserControl
{
//图表类型
privateChartChartTypeEnumm_GraphType=ChartChartTypeEnum.chChartTypeColumnClustered;
//图表标题
privatestringm_Title="";
//X轴标题
privatestringm_XTitle="";
//Y轴标题
privatestringm_YTitle="";
privateboolm_HasValue=true;
protectedSystem.Web.UI.WebControls.ImageImage1;
privateDataTablem_dt;
publicenumGraphTypeEnum{ColumnClustered,Line,Pie,BarClustered,SmoothLine,Area};

privatevoidPage_Load(objectsender,System.EventArgse)
{
}


Web窗体设计器生成的代码#regionWeb窗体设计器生成的代码
overrideprotectedvoidOnInit(EventArgse)
{
//
//CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}


/**////<summary>
///设计器支持所需的方法-不要使用代码编辑器
///修改此方法的内容。
///</summary>

privatevoidInitializeComponent()
{
this.Load+=newSystem.EventHandler(this.Page_Load);

}

#endregion


publicvoidDataSource(DataTabledt)
{
m_dt
=dt;
}

/**////<summary>
///图形的形式显示表
///</summary>
///<paramname="dt"></param>

publicvoidSetBind()
{
//在此处放置用户代码以初始化页面
//创建ChartSpace对象来放置图表
ChartSpaceobjCSpace=newChartSpaceClass();

//在ChartSpace对象中添加图表,Add方法返回chart对象
ChChartobjChart=objCSpace.Charts.Add(0);

//指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到
objChart.Type=m_GraphType;//ChartChartTypeEnum.chChartTypeColumnClustered;

//指定图表是否需要图例
objChart.HasLegend=true;

//给定标题
objChart.HasTitle=true;
objChart.Title.Caption
=m_Title;//"上半年分布图";

if(m_GraphType==ChartChartTypeEnum.chChartTypeColumnClustered)
{
//给定x,y轴的图示说明
objChart.Axes[0].HasTitle=true;
objChart.Axes[
0].Title.Caption=m_XTitle;//"Y:数量";
objChart.Axes[1].HasTitle=true;
objChart.Axes[
1].Title.Caption=m_YTitle;//"X:月份";
}


//计算数据
intiCount=m_dt.Columns.Count;
intjCount=m_dt.Rows.Count;
stringstrSeriesName="";
stringstrCategory="";
stringstrValue="";

for(inti=0;i<iCount;i++)
{
if(i==0)
{
for(intj=0;j<jCount;j++)
{
strCategory
+=(m_dt.Rows[j][0].ToString()+'\t');
}

}

else
{
strSeriesName
=m_dt.Columns[i].ColumnName;
strValue
="";
for(intj=0;j<jCount;j++)
{
strValue
+=(m_dt.Rows[j][i].ToString()+'\t');
}

//添加一个series
objChart.SeriesCollection.Add(i-1);

//给定series的名字
objChart.SeriesCollection[i-1].SetData(ChartDimensionsEnum.chDimSeriesNames,
+(int)ChartSpecialDataSourcesEnum.chDataLiteral,strSeriesName);

//给定分类
objChart.SeriesCollection[i-1].SetData(ChartDimensionsEnum.chDimCategories,
+(int)ChartSpecialDataSourcesEnum.chDataLiteral,strCategory);

//给定值
objChart.SeriesCollection[i-1].SetData
(ChartDimensionsEnum.chDimValues,
(
int)ChartSpecialDataSourcesEnum.chDataLiteral,strValue);

//添加值
if(m_HasValue)
{
objChart.SeriesCollection[i
-1].DataLabelsCollection.Add();
if(m_GraphType==ChartChartTypeEnum.chChartTypePie)
{
objChart.SeriesCollection[i
-1].DataLabelsCollection[0].HasPercentage=true;
}

else
{
objChart.SeriesCollection[i
-1].DataLabelsCollection[0].HasPercentage=false;
}


objChart.SeriesCollection[i
-1].DataLabelsCollection[0].HasCategoryName=false;
if(m_GraphType==ChartChartTypeEnum.chChartTypePie)
{
objChart.SeriesCollection[i
-1].DataLabelsCollection[0].HasValue=false;
}

else
{
objChart.SeriesCollection[i
-1].DataLabelsCollection[0].HasValue=true;
}


objChart.SeriesCollection[i
-1].DataLabelsCollection[0].Interior.Color="white";
objChart.SeriesCollection[i
-1].DataLabelsCollection[0].Font.Name="Verdana";
}

}

}

//输出成GIF文件.
stringstrFullPathAndName=Server.MapPath(System.DateTime.Now.Ticks.ToString()+".gif");
objCSpace.ExportPicture(strFullPathAndName,
"GIF",600,350);
Image1.ImageUrl
=strFullPathAndName;
Image1.Visible
=true;
RemoveFiles(Server.MapPath(
"."));
}


/**////<summary>
///删除超时文件
///</summary>
///<paramname="strPath"></param>

privatevoidRemoveFiles(stringstrPath)
{
System.IO.DirectoryInfodi
=newDirectoryInfo(strPath);
FileInfo[]fiArr
=di.GetFiles();
foreach(FileInfofiinfiArr)
{
if(fi.Extension.ToString()==".gif")
{
//iffileisolderthan2minutes,we'llcleanitup
TimeSpanmin=newTimeSpan(0,0,0,2,0);
if(fi.CreationTime<DateTime.Now.Subtract(min))
{
fi.Delete();
}

}

}

}


/**////<summary>
///图表类型
///</summary>

publicGraphTypeEnumGraphType
{
get
{
switch(m_GraphType)
{
caseChartChartTypeEnum.chChartTypeColumnClustered:
returnGraphTypeEnum.ColumnClustered;
caseChartChartTypeEnum.chChartTypeLine:
returnGraphTypeEnum.Line;<br
分享到:
评论

你可能感兴趣的:(Web,UI,J#,Office,asp)