`
feipigwang
  • 浏览: 769995 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

关于MsChart的封装与实现

 
阅读更多

C#开发的WEB开发的简单框架 节省开发信息管理系统时间 提高开发效率
构建一个WEB开发的基础框架(主要包括数据库处理、页面框架及工具类),形成ASP.NET信息管理系统快速开发架构。
一、框架实现了基于XML定制的列表查询及图表展现
二、列表实现了复杂查询条件、合并行列(分组求和的处理)、汇总行及钻取数据和图表的钻取
三、编辑配置支持单表数据的增加和修改,针对开发人员实现的编辑页面可方便扩展主表新增字段
使开发人员专注于系统的业务实现,节省开发时间,提高开发效率

试用登录http://121.18.78.216/

源代码下载:http://download.csdn.net/source/3160602

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.DataVisualization.Charting;
using MyQuery.Utils;
using System.Web.UI;
using System.Data;
using System.Collections;

namespace MyQuery.MyControl
{
/// <summary>
/// 封装的处理MsChart的对象类
/// by 贾世义 2009-2-18
/// </summary>
[Serializable]
public sealed class MyChart
{
private int _width = 600;
/// <summary>
/// 宽度 默认600
/// </summary>
public int Width
{
get
{
if (_width < 50)
{
return 600;
}
else
{
return _width;
}
}
set { _width = value; }
}
private int _height = 500;
/// <summary>
/// 高度 默认500
/// </summary>
public int Height
{
get
{
if (_height < 50)
{
return 500;
}
else
{
return _height;
}
}
set { _height = value; }
}
/// <summary>
/// 外观配置模板
/// </summary>
public string Template = null;
/// <summary>
/// 标题集合
/// </summary>
public List<ChartTitle> Titles = null;
/// <summary>
/// 对应图像ChartArea的MyArea集合
/// </summary>
public List<MyArea> MyAreas = null;
/// <summary>
/// 数据源
/// </summary>
public object DataSource = null;
/// <summary>
/// 处理的数据列
/// </summary>
public MyColumns DataColumns = null;
/// <summary>
/// 查询对应的名称
/// </summary>
public string Name = null;
/// <summary>
/// 当期用户ID
/// </summary>
public string UserAccount = null;
/// <summary>
/// 计算使用的脚本
/// </summary>
public string CalcScript = null;
/// <summary>
/// 获得图形对象
/// </summary>
/// <param name="page">页面实例</param>
/// <param name="type">输出类型</param>
/// <returns></returns>
public Chart GetChart(Page page, RenderType type)
{
Chart result = new Chart();
//图像属性
result.RenderType = type;
if (type == RenderType.ImageTag)
{
result.ImageStorageMode = ImageStorageMode.UseImageLocation;
result.ImageLocation = "~/Img/temp/ChartPic_#SEQ(300,1)";
}
result.AlternateText = "分析图形";
result.Attributes.Add("align", "center");
result.Width = Width;
result.Height = Height;
if (String.IsNullOrEmpty(Template))
{
result.Serializer.Content = SerializationContents.Default;
}
else
{
result.LoadTemplate(Template);
}
if (Titles != null)
{
//标题
foreach (ChartTitle obj in Titles)
{
result.Titles.Add(new Title(obj.Text, obj.Docking));
}
}
if (MyAreas == null || MyAreas.Count == 0)
{
throw new Exception("图像的区域配置不能为空");
}
foreach (MyArea myArea in MyAreas)
{
//图像区域
ChartArea item = new ChartArea(myArea.Name);
item.Area3DStyle.Enable3D = myArea.IsShow3D;
item.AxisX.IsLabelAutoFit = true;
item.AxisX.LabelAutoFitStyle = LabelAutoFitStyles.DecreaseFont | LabelAutoFitStyles.IncreaseFont | LabelAutoFitStyles.WordWrap;
if (!String.IsNullOrEmpty(myArea.XDataFormat))
{
item.AxisX.LabelStyle.Format = myArea.XDataFormat;
}
if (!String.IsNullOrEmpty(myArea.YDataFormat))
{
item.AxisY.LabelStyle.Format = myArea.YDataFormat;
}
//绑定数据
//图例
if (myArea.Lengend != null && !IsExit(result.Legends, myArea.Lengend.Name))
{
Legend legend = new Legend(myArea.Lengend.Name);
if (!String.IsNullOrEmpty(myArea.Lengend.Title))
{
legend.Title = myArea.Lengend.Title;
}
legend.Docking = myArea.Lengend.Docking;
legend.Enabled = true;
result.Legends.Add(legend);
}
//数据及系列
if (myArea.IsDataTable && DataSource != null)
{
result.DataBindTable(((DataTable)DataSource).DefaultView, myArea.XField);
}
if (myArea.MySeries != null)
{
foreach (MySerie mySerie in myArea.MySeries)
{
Series serie = new Series(mySerie.Name);
serie.ChartArea = myArea.Name;
serie.ChartType = mySerie.ChartType;
if (myArea.Lengend != null)
{
serie.Legend = myArea.Lengend.Name;
if (!String.IsNullOrEmpty(mySerie.Title))
{
serie.LegendText = mySerie.Title;
}
}
serie.IsValueShownAsLabel = mySerie.IsValueShownAsLabel;
if (mySerie.IsValueShownAsLabel && !String.IsNullOrEmpty(mySerie.DataFormat))
{
serie.LabelFormat = mySerie.DataFormat;
}
serie.XValueType = mySerie.XValueType;
serie.YValueType = mySerie.YValueType;
if (!myArea.IsDataTable && mySerie.ColumnNames != null)
{
//自身数据优先
object ds = null;
if (mySerie.DataSource == null)
{
ds = DataSource;
}
else
{
ds = mySerie.DataSource;
}
if (ds == null && DataColumns != null)
{
//单条数据
foreach (string name in mySerie.ColumnNames)
{
MyColumn myColumn = DataColumns[name];
if (myColumn != null)
{
DataPoint dataPoint = new DataPoint();
if (!String.IsNullOrEmpty(myColumn.Title))
{
dataPoint.AxisLabel = myColumn.Title;
}
dataPoint.SetValueY(DataHelper.GetDoubleValue(myColumn.Value, 0));
if (!String.IsNullOrEmpty(mySerie.UrlFormatString))
{
string url = null;
if (!String.IsNullOrEmpty(mySerie.UserFields))
{
url = String.Format(mySerie.UrlFormatString, ReflectionDeal.GetUseFieldsValue(DataColumns, null, DataHelper.GetStrings(mySerie.UserFields)));
}
else
{
url = mySerie.UrlFormatString;
}
dataPoint.Url = WebHelper.GetUrl(url);
dataPoint.MapAreaAttributes = "target=/"_blank/"";
}
if (mySerie.IsToolTip)
{
dataPoint.ToolTip = dataPoint.AxisLabel + ":" + DataHelper.GetString(dataPoint.YValues, mySerie.DataFormat);
}
serie.Points.Add(dataPoint);
}
}
}
else if (ds != null)
{
IList list = ReflectionDeal.GetDisplayList(ds);
List<int> iList = new List<int>();
if (myArea.RowIndexs == null)
{
for (int i = 0; i < list.Count; i++)
{
iList.Add(i);
}
}
foreach (int i in iList)
{
DataPoint dataPoint = new DataPoint();
object label = ReflectionDeal.GetValue(list[i], myArea.XField);
if (!DataHelper.IsNullOrEmpty(label))
{
dataPoint.AxisLabel = label.ToString();
}
dataPoint.YValues = new double[mySerie.ColumnNames.Length];
for (int j = 0; j < mySerie.ColumnNames.Length; j++)
{
if (DataColumns == null)
{
dataPoint.YValues[j] = DataHelper.GetDoubleValue(ReflectionDeal.GetValue(list[i], mySerie.ColumnNames[j]), 0);
}
else
{
MyColumn myColumn = DataColumns[mySerie.ColumnNames[j]];
if (myColumn != null)
{
DataColumns.SetColumnsValue(Name, list[i], CalcScript, DataSource, UserAccount, 0);
dataPoint.YValues[j] = DataHelper.GetDoubleValue(myColumn.Value, 0);
}
}
}
if (!String.IsNullOrEmpty(mySerie.UrlFormatString))
{
string url = null;
if (!String.IsNullOrEmpty(mySerie.UserFields))
{
url = String.Format(mySerie.UrlFormatString, ReflectionDeal.GetUseFieldsValue(DataColumns, null, DataHelper.GetStrings(mySerie.UserFields)));
}
else
{
url = mySerie.UrlFormatString;
}
dataPoint.Url = WebHelper.GetUrl(url);
dataPoint.MapAreaAttributes = "target=/"_blank/"";
}
if (mySerie.IsToolTip)
{
dataPoint.ToolTip = dataPoint.AxisLabel + ":" + DataHelper.GetString(dataPoint.YValues, mySerie.DataFormat);
}
serie.Points.Add(dataPoint);
}
}
}
result.Series.Add(serie);
}
}
result.ChartAreas.Add(item);
}
result.Page = page;
return result;
}
/// <summary>
/// 判断是否已经存在
/// </summary>
/// <param name="legends"></param>
/// <param name="name"></param>
/// <returns></returns>
private bool IsExit(LegendCollection legends, string name)
{
if (legends == null || legends.Count == 0)
{
return false;
}
foreach (Legend legend in legends)
{
if (legend.Name.Equals(name))
{
return true;
}
}
return false;
}
}

/// <summary>
/// 封装的处理MsChart的Title对象类
/// by 贾世义 2009-2-18
/// </summary>
[Serializable]
public sealed class ChartTitle
{
/// <summary>
/// 标题文本
/// </summary>
public string Text = null;
/// <summary>
/// 位置
/// </summary>
public Docking Docking = Docking.Top;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="text"></param>
/// <param name="docking"></param>
public ChartTitle(string text, string docking)
{
Text = text;
Docking = ChartHelper.GetDocking(docking);
}
}

/// <summary>
/// 封装的处理MsChart的ChartArea对象类
/// by 贾世义 2009-2-18
/// </summary>
[Serializable]
public sealed class MyArea
{
/// <summary>
/// 名称
/// </summary>
public string Name = null;
/// <summary>
/// 是否显示为3D
/// </summary>
public bool IsShow3D = false;
/// <summary>
/// XValue的展示格式
/// </summary>
public string XDataFormat = null;
/// <summary>
/// YValue的展示格式
/// </summary>
public string YDataFormat = null;
/// <summary>
/// 数据来源是否为DataTable
/// 当true时 仅支持DataTable中的数据 如不指定serie节 则将xfield列作为横坐标 其余列各作为一个serie,否则按照指定的列生成serie
/// 当false时 如指定了rows属性则只按照指定的行索引,否则取全部数据生成图 支持IList和计算列 其它同datatable
/// </summary>
public bool IsDataTable = true;
/// <summary>
/// 指定的数据行 搭配isdatatable=false使用 指定行的索引号的数组
/// </summary>
public List<int> RowIndexs = null;
/// <summary>
/// 横坐标对应字段名称
/// </summary>
public string XField = null;
/// <summary>
/// 图例
/// </summary>
public MyLengend Lengend = null;
/// <summary>
/// 对应数据系列Serie的集合
/// </summary>
public List<MySerie> MySeries = null;
}

/// <summary>
/// 封装的处理MsChart的Lengend对象类
/// by 贾世义 2009-2-18
/// </summary>
[Serializable]
public sealed class MyLengend
{
/// <summary>
/// 名称
/// </summary>
public string Name = null;
/// <summary>
/// 标题文本
/// </summary>
public string Title = null;
/// <summary>
/// 位置
/// </summary>
public Docking Docking = Docking.Right;

/// <summary>
/// 构造函数
/// </summary>
/// <param name="name"></param>
/// <param name="docking"></param>
/// <param name="title"></param>
public MyLengend(string name, string docking, string title)
{
Name = name;
if (String.IsNullOrEmpty(docking))
{
Docking = Docking.Right;
}
else
{
Docking = ChartHelper.GetDocking(docking);
}
Title = title;
}
}

/// <summary>
/// 封装的处理MsChart的ChartSerie对象类
/// by 贾世义 2009-2-18
/// </summary>
[Serializable]
public sealed class MySerie
{
/// <summary>
/// 名称
/// </summary>
public string Name = null;
/// <summary>
/// 序列的标题作为Legend的文本
/// </summary>
public string Title = null;
/// <summary>
/// 图像类型
/// </summary>
public SeriesChartType ChartType = SeriesChartType.Column;
/// <summary>
/// 是否显示值
/// </summary>
public bool IsValueShownAsLabel = false;
/// <summary>
/// label的显示格式
/// </summary>
public string DataFormat = null;
/// <summary>
/// 链接URL格式
/// </summary>
public string UrlFormatString = null;
/// <summary>
/// 链接URL对应的参数字段
/// </summary>
public string UserFields = null;
/// <summary>
/// 是否显示ToolTip
/// </summary>
public bool IsToolTip = true;
/// <summary>
/// X轴值展示数据类型
/// </summary>
public ChartValueType XValueType = ChartValueType.Auto;
/// <summary>
/// Y轴值展示数据类型
/// </summary>
public ChartValueType YValueType = ChartValueType.Auto;
/// <summary>
/// 值表达式必须设置为对应select节的column的name,当多个YValue时name可以用,分割
/// </summary>
public string[] ColumnNames = null;
/// <summary>
/// 系列自己独立的数据源
/// </summary>
public object DataSource = null;
}
}

分享到:
评论

相关推荐

    MSChart图表实现的封装

    MSChart图表实现的封装(这个是生成MSChart的) 欢迎访问http://121.18.78.216

    MSchart多Y轴实现

    在提供的"WindowsFormsApplication9"项目中,开发者可能已经实现并封装了上述逻辑,包括创建ChartArea、配置轴属性、关联Series以及处理用户交互的代码。通过查看源代码和运行示例,我们可以更深入地理解多Y轴实现的...

    MFC中用MSChart绘制图表

    在本案例中,我们将探讨如何在Visual Studio 2012环境下利用MFC与MSChart控件进行图表绘制。 首先,为了使用MSChart控件,我们需要在项目中引入相关的头文件和源文件。这些文件可能包含了MSChart控件的接口定义、...

    利用C#语言实现MSChart控件中图形拖拽功能的winForm程序

    在这种情况下,你可能需要对每个图表分别实现拖放功能,或者创建一个通用的类来封装拖放逻辑,然后在需要的图表上实例化这个类。 此外,为了提供更好的用户体验,可以考虑添加视觉反馈,比如在拖动时改变数据点的...

    MsChart实现无闪烁动态曲线(MFC)

    ### MsChart 实现无闪烁动态曲线 (MFC) 在探讨如何使用MsChart在MFC框架下实现无闪烁动态曲线之前,我们先来了解几个关键概念和技术背景。 #### MsChart简介 MsChart是Microsoft提供的一种图表控件,它可以方便地...

    微软的mschart 范例包

    2. **数据绑定**:在.NET环境中,MSChart可以与各种数据源绑定,如数据库、数组或对象集合。范例将演示如何设置数据绑定和数据更新。 3. **图表元素自定义**:包括轴(X轴和Y轴)、标题、图例、数据点等元素,都...

    mschart vs2010 mfc源码

    在Visual Studio 2010中,要实现MFC与MSChart的集成,你需要执行以下步骤: 1. **添加引用**: 首先,你需要在你的MFC项目中添加对Microsoft Chart Controls的引用。这可以通过“项目”-&gt;“添加引用”菜单项完成,...

    MFC串口接收数据坐标曲线实时显示

    通过研究这些文件,您可以更好地理解如何将MFC与MSChart结合,实现串口数据的实时接收和显示。 总之,通过MFC的CSerialPort类实现串口通信,配合MSChart控件进行数据可视化,我们可以构建出一个能够实时接收串口...

    办公助手VC++实现

    2. **mschart.cpp**:此文件与图表功能有关,可能是对Microsoft Chart Control的实现。MSChart控件允许开发者创建各种复杂的2D和3D图表,用于数据可视化,这对于报告分析和决策支持至关重要。 3. **PracticalDlg....

    fcos.rar_4EQ_MB8_NWG_caughtuk3_mudn9g

    3. `mschart.cpp`:这个文件很可能包含了使用MFC MsChart组件的具体实现,用于创建和定制图表。 4. `vcplot.cpp`:可能与图表的绘制和布局有关,可能包含了对数据进行绘图的函数。 5. `DemoView.cpp`:在MFC中,视图...

    MFC利用ChartCtrl快速实现波形显示实例源码

    它提供了对Windows API的封装,使得开发者可以更方便地使用Windows编程的各种功能。MFC框架包括许多类,这些类对应于Windows编程中的各种对象,如窗口、菜单、控件等。 ChartCtrl,全称MSChart Control,是微软提供...

    bingtu.zip_VC 6.0表格_VC++6.0表格_bingtu_饼图

    总结来说,这个程序实例是关于使用VC++6.0和MSChart控件进行数据可视化的教学示例,通过学习这个案例,开发者可以掌握如何在C++应用程序中创建动态表格和饼图,提升其在用户界面设计和数据分析方面的技能。...

    MFC画图板绘图并保存图片导出

    1. **MFC库**:MFC 是微软开发的一个C++类库,它封装了Windows API,为开发者提供了一套面向对象的编程框架,用于简化Windows应用程序的开发。MFC 包含了许多类,如CWinApp、CWnd、CButton等,它们分别代表了应用...

    547882.zip_Windows编程_C/C++_

    3. mschart.cpp、vcplot.cpp:这些可能是自定义的源代码文件,实现了与MSChart相关的功能,比如数据处理和图表绘制。 4. DemoView.cpp:MFC中的视图类(CView派生)实现,负责显示和交互。 5. vcdatagrid.cpp、...

    VS2010下利用CChartCtrl实现多条曲线绘制的源代码

    CChartCtrl是基于ActiveX控件MSChart的封装,它提供了丰富的图表类型,如折线图、柱状图、饼图等。在VS2010中,可以通过“资源视图”添加一个新的ActiveX控件到对话框,然后选择CChartCtrl来创建一个图表对象。 要...

    c#实时打点画正态分布

    在这个项目中,我们将利用C#的面向对象特性,创建类来封装数据和功能,实现正态分布的计算与绘图。 2. **Windows Forms**: Winform是.NET Framework的一部分,提供了一种创建桌面应用程序的方式。在这里,我们...

    VB6绘制动态折线图(含源码)

    10. **代码组织与模块化**:源码可能将不同功能封装在不同的Sub或Function中,以提高代码的可读性和可维护性。 通过学习和理解这个VB6动态折线图的源码,开发者不仅可以掌握如何在VB6中创建动态图形,还能深入理解...

    基于组件技术动态生成Web服务统计图形.pdf

    - **案例**:使用微软的MSChart控件实现动态生成Web服务统计图形,但需服务器和客户端均具备MFC动态库支持环境;注册和反注册操作不够灵活。 ##### 2.3 IEChart控件 - **优势**: - 支持多种运行平台。 - 支持...

    VB6组件工具指南

    - **InternetTransfer控件**:用于上传和下载文件,实现与互联网服务器的通信。 - **ListView控件**:显示项目列表,支持多列布局和各种视图模式。 - **MAPI控件**:集成电子邮件和日历功能,实现邮件发送和接收。 -...

Global site tag (gtag.js) - Google Analytics