using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Drawing;
using System.Web.UI.WebControls;
using System.Reflection;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.ComponentModel;
using System.Collections;
namespace Common.PageControl
{
public class DojoxChartingControl
{
#region Model
/// <summary>绑定控件
/// </summary>
private PlaceHolder _BindControl;
/// <summary>隐藏的divId
/// </summary>
private string _divId;
/// <summary>Gird控件ID
/// </summary>
/// <summary>隐藏的提示框Id
/// </summary>
private string _tid;
/// <summary>Gird控件ID
/// </summary>
private string _gridId;
/// <summary>Y轴提示词
/// </summary>
private string _title;
/// <summary>x轴值的颜色
/// </summary>
private string _xcolor;
/// <summary>y轴值的颜色
/// </summary>
private string _ycolor;
/// <summary>轴颜色
/// </summary>
private string _stroke;
/// <summary>刻度最大允许值
/// </summary>
private double _to;
/// <summary>刻度间隔
/// </summary>
private double _majorTickStep;
/// <summary>集合
/// </summary>
private IList<DojoxCharting> _list;
/// <summary>第一个DIV宽度
/// </summary>
private string _widths;
/// <summary>默认最小值
/// </summary>
private decimal _dey;
/// <summary>绑定控件
/// </summary>
public PlaceHolder BindControl
{
get { return _BindControl; }
set { _BindControl = value; }
}
/// <summary>数据集合
/// </summary>
public IList<DojoxCharting> List
{
get { return _list; }
set { _list = value; }
}
/// <summary>列表宽度
/// </summary>
public int Width
{
get;
set;
}
/// <summary>列表高度
/// </summary>
public int Height
{
get;
set;
}
/// <summary>min
/// </summary>
public int Min
{
get;
set;
}
/// <summary>默认最小值
/// </summary>
public decimal Dey
{
get { return _dey; }
set { _dey = value; }
}
/// <summary>第一个DIV宽度
/// </summary>
public string Widths
{
get{return _widths;}
set{_widths=value;}
}
/// <summary>坐标最大值
/// </summary>
public double To
{
get { return _to; }
set { _to = value; }
}
/// <summary>坐标间隔值
/// </summary>
public double MajorTickStep
{
get { return _majorTickStep; }
set { _majorTickStep = value; }
}
/// <summary>Y轴提示词
/// </summary>
public string Title
{
get { return _title; }
set { _title = value; }
}
/// <summary>X轴颜色
/// </summary>
public string Xcolor
{
get { return _xcolor; }
set { _xcolor = value; }
}
/// <summary>Y轴颜色
/// </summary>
public string Ycolor
{
get { return _ycolor; }
set { _ycolor = value; }
}
/// <summary>轴值颜色
/// </summary>
public string Stroke
{
get { return _stroke; }
set { _stroke = value; }
}
/// <summary>Gird控件ID
/// </summary>
public string GridId
{
get { return _gridId; }
set { _gridId = value; }
}
/// <summary>
/// </summary>
public string Tid
{
get { return _tid; }
set { _tid = value; }
}
/// <summary>
/// </summary>
public string DivId
{
get { return _divId; }
set { _divId = value; }
}
#endregion Model
#region 控件方法
/// <summary>构造函数
/// </summary>
public DojoxChartingControl()
{
}
/// <summary>根据传入List数据返回对应数据列List字符串
/// </summary>
/// <param name="_t"></param>
/// <returns></returns>
private string GetDataList()
{
StringBuilder str=new StringBuilder ();//获得Y轴的值
for (int i = 0; i < List.Count; i++)
{
ArrayList arr=new ArrayList ();
arr.Add(""+List[i].Name+"");
arr.Add(List[i].Type);
arr.Add(""+List[i].Color+"");
str.Append( "animChart.addSeries('"+arr[0]+"',"+arr[1]+", { stroke: { color: '"+arr[2]+"', width: 2 }, fill: '"+arr[2]+"' });");
}
return str.ToString();
}
/// <summary>创建X轴、Y轴
/// </summary>
/// <param name="_t"></param>
/// <returns></returns>
private string Getstring(string name,int min,double from,double to,string lables,string stroke,string color)
{
string str;
if (name == "x")
{
str = @"animChart.addAxis('" + name + @"', { fixLower: 'major', fixUpper: 'major',
min: " + min + @",//初始刻度
from:" + from + @",//刻度
to: " + to + @",//刻度最大允许值
labels: [" + lables + @"],
stroke: '" + stroke + @"',//x轴颜色
font: 'normal normal bold 8pt Tahoma',//x轴值的大小,字体等
fontColor: '" + color + @"', //x轴值的颜色
majorTick: { color: 'black', length: 3 }, //x轴大刻度的颜色、长度
minorTick: { stroke: 'black', length: 3} //x轴小刻度的颜色、长度
});";
}
else
{
str = @"animChart.addAxis('" + name + @"', {vertical: true, fixLower: 'major', fixUpper: 'major',
min: " + min + @",//初始刻度
from:10,
majorTickStep:" 刻度间隔
to: " + to + @",//刻度最大允许值
labels: [" + lables + @"],
title: '" + Title + @"',//Y轴提示词
titleGap: 10, //Y轴提示词离Y轴的距离
titleFont: 'normal normal bold 11pt Tahoma', //Y轴提示词的字体、大小等
titleFontColor: '#545454', //Y轴提示词的颜色
stroke: '" + stroke + @"',//轴颜色
font: 'normal normal bold 8pt Tahoma',//轴值的大小,字体等
fontColor: '" + color + @"', //轴值的颜色
majorTick: { color: 'black', length: 5 }, //轴大刻度的颜色、长度
minorTick: { stroke: 'black', length: 3} //轴小刻度的颜色、长度
});";
}
return str;
}
/// <summary>数据绑定
/// </summary>
public void GridDataBind(Page page,string key)
{
//初始变量值
if (DataProcess.NULL2STR(_gridId) == "")
{
_gridId = "DojoGird_" + Guid.NewGuid().ToString();
}
if (DataProcess.NULL2STR(_divId) == "")
{
_divId = "Div_" + Guid.NewGuid().ToString();
}
if (DataProcess.NULL2STR(_tid) == "")
{
_tid = "Tid_" + Guid.NewGuid().ToString();
}
if (DataProcess.NULL2STR(_xcolor) == "")
{
_xcolor = "#545454";
}
if (DataProcess.NULL2STR(_ycolor) == "")
{
_ycolor = "#545454";
}
if (DataProcess.NULL2STR(_stroke) == "")
{
_stroke = "green";
}
if (DataProcess.NULL2STR(_widths) == "")
{
_widths = "";
}
StringBuilder ystr = new StringBuilder();
for (int i = 1; i < 6; i++)//定义Y轴值
{
double y1 = MajorTickStep*i;
ystr.Append( "{ value: " + y1 + ", text: '"+Common.DataProcess.ObjectToMoney(y1)+"'}");
if (i!=5)
{
ystr.Append(",");
}
}
Label tableStr = new Label();
tableStr.Text = "<div id=\"" + _gridId + "\" style=\"width:" + Width + "px;height:" + Height + "px;\"> <div id=\"" + _divId + "\"></div></div> <input type='text' id=\"" + _tid + "\" style=\"position:absolute;visibility:hidden;font-size:12px; height: 15px;\"/>";
_BindControl.Controls.Add(tableStr);
string xstring = Getstring("x",0, 0, 13, @"{ value: 1, text: '1月' }, { value: 2, text: '2月' },//定义轴值
{ value: 3, text: '3月' }, { value: 4, text: '4月' },
{ value: 5, text: '5月' }, { value: 6, text: '6月' },
{ value: 7, text: '7月' }, { value: 8, text: '8月' },
{ value: 9, text: '9月' }, { value: 10, text: '10月' },
{ value: 11, text: '11月' }, { value: 12, text: '12月'}", Stroke, Xcolor);
string ysting = Getstring("y",0, MajorTickStep, To, ystr.ToString(), Stroke, Ycolor);//获得Y轴对象
string strlist=GetDataList();//获得y值
decimal sum = Dey + (decimal)0.50;//判断的最低值
string gridRegisterJs = GetJsStr(_gridId,strlist,xstring,ysting,sum,Widths);
ScriptManager.RegisterStartupScript(page, page.GetType(), key, gridRegisterJs, false);
}
#endregion 控件方法
#region 构建控件JS
/// <summary>构建Grid注册JS
/// </summary>
/// <param name="gridId"></param>
/// <param name="dataListStr"></param>
/// <param name="layoutStr"></param>
/// <returns></returns>
private string GetJsStr(string gridId, string str,string Xstring,string Ystring,decimal sum,string width)
{
string jsStr = @" <script> dojo.ready(function () {
var animChart = new dojox.charting.Chart2D('"
animChart.connectToPlot('default', function(args){//鼠标的onmouseover事件
switch(args.type){
case 'onclick':
break;
case 'onmouseover':
// alert('aaa');
var div = document.getElementById('" + Tid+ @"');
var index=args.index+1;
var yz=args.y.toString();
var a=yz.indexOf('.');
var sum;
if (a>0) {//判断是否小于最低值
sum=args.y-" + sum+ @";//得到原值
}else{
sum=yz;
}
var len=sum.toString().length;
if(len>3&&len<=6){
var a=sum.toString().substring(len-3,len);
var b=sum.toString().substring(0,len-3);
sum=b+','+a;
}
else if(len>3&&len<=9){
var a=sum.toString().substring(len-3,len);
var b=sum.toString().substring(len-6,len-3);
var c=sum.toString().substring(0,len-6);
sum=c+','+b+','+a;
}
else if(len>3&&len<=12){
var a=sum.toString().substring(len-3,len);
var b=sum.toString().substring(len-6,len-3);
var c=sum.toString().substring(len-9,len-6);
var d=sum.toString().substring(0,len-9);
sum=d+','+c+','+b+','+a;
}
div.style.visibility='visible';
div.value=index+'月,'+sum;//给提示框赋值
div.size=div.value.length;
var size=div.value.length*10/2;
var wth=document.getElementById('divUp').style.width.toString();
var wih=wth.substring(0,wth.indexOf('px'));
var pd='"+Widths+ @"';
var left=0;
if(pd==''){
left = event.clientX-size;
}else{
left = event.clientX-size-wih-25;
}
// var top = event.clientY;
// div.style.left = left;
// div.style.top = top-30;
// div.style.overflowY = 'auto';
$('#"+Tid+@"').css({left:left,top:event.clientY-30});
break;
case 'onmouseout':
document.getElementById('" + ;
break;
default:
//TODO...
break;
}
});
animChart.render();
var legendTwo = new dojox.charting.widget.Legend({chart: animChart}, '"+DivId+@"')
});
</script>";
return jsStr;
}
#endregion 构建控件JS
}
}