如何用ASP.NET实现动态曲线绘制功能

akyca 2005-02-21 07:26:40
这是一个ASP.NET和数据库的应用,数据库的数据是实时采集来的,不断变化的。ASP.NET负责把数据绘制成曲线,显示在页面上。要求是:曲线图是嵌在页面里面的,刷新时不能刷新页面,而只刷新图表,刷新速度要快。这一需求有点类似股票的K线图。

请问各位高人,如何才能实现这一功能???
//bow


...全文
314 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
venus0314 2005-02-21
  • 打赏
  • 举报
回复
至于代码,这是机密了,非常抱歉了
建议你看看VML画图方面+HTC组件+XmlHttp的使用就好了

附:XmlHttp的使用
//--------------------------------------------------Begin---------------------------------------------------------
//一:创建Dom对象objDom

//------------------------------------------------------
//JScript/JavaScript:
// var doc = new ActiveXObject("Microsoft.XMLDOM")
//VB Script:
// Dim doc
// Set doc = CreateObject("Microsoft.XMLDOM")
//VB:
// Dim doc As Object
// Set doc = CreateObject("Microsoft.XMLDOM")
//或者
// Dim doc As DOMDocument
// Set doc = New DOMDocument
//------------------------------------------------------

var objDom = new ActiveXObject("MICROSOFT.XMLDOM")
objDOM.loadXML("<root><action>Inquiry</action><data/></root>")
//二:添加节点到Dom对象objDom
var objNodeChild
objNodeChild = objDom.createElement(strNodeName) //strNodeName是要新增节点的名称
objNodeChild.text = strNodeValue //strNodeValue是要新增节点的值
objDom.selectSingleNode(strNodeParent).appendChild(objNodeChild) //strNodeParent是要添加节点的父节点的路径;

//或者是添加属性到存在的节点
var objNewAttr
objNewAttr = objDom.createAttribute(strAttrName)
objNewAttr.text = strAttrValue
objDom.selectSingleNode(strNode).Attributes.setNamedItem(objNewAttr)
//三:使用xmlHttp
//创建xmlHttp对象
var objHttp = new ActiveXObject("MICROSOFT.XMLHTTP")
objHttp.open("POST",strAspPageName,false) //false 代表不异步处理
objHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
//传递Dom对象到指定页面
objHttp.send(objDom)
//接受指定页面处理之后的Dom对象
objDom.load(objHttp.ResponseStream)
//之后就可以对objDom中的数据进行操作
//
//---------------------------------------------------End---------------------------------------------------------
''''''''''''''''''''''''''''''''''''''''''''''''''''Begin''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''下面部分是在后台ASP页面中执行的操作
''
''四:指定页面strAspPageName要做的操作
''创建Dom对象objBackDom,用来返回到前台
dim objBackDom
set objBackDom = CreateObject("MSXML2.DomDocument")

objBackDom.load "<root><action>response</action><result>fail</result><desc></desc><data/></root>"

''创建Dom对象objGetDom用来接受前台传递的Dom对象
dim objGetDom
set objGetDom = CreateObject("MSXML2.DomDocument")

''设置异步处理为false
''异步处理----false 为取消异步处理 true为开启异步处理
''若关闭异步处理,则要等到文档完全load进来之后才能将控制权交给代码
''若打开异步处理,则访问xml文档时应该先判断myDom.readyState
''其中: readyState = 0 表示 未初始化:调入文档没有开始
'' readyState = 1 表示 调入:Load方法正在执行
'' readyState = 2 表示 调入完成:Load 方法已经完成
'' readyState = 3 表示 交互阶段:DOM可以进行只读检验,数据部分解析
'' readyState = 4 表示 完成:数据完全解析,可以进行读/写操作
objGetDom.async = false
objGetDom.load Request

''之后要做的就是定义变量获取objGetDom中的节点的值
dim strAction
strAction = objGetDom.selectSingelNode("//action").text

''根据获得值与数据库进行数据交互
dim RS,conn

''获得查询到的数据并生成objBackDom
dim objNodeChild
set ohjNodeChild = objBackDom.createElement(strNodeName) ''strNodeName是要添加的节点名称
ohjNodeChild.text = strNodeValue ''strNodeValue是要添加的节点的值
objBackDom.selectSingleNode(strNodeParent).appendChild(ohjNodeChild) ''strNodeParent是要添加子节点的父节点路径

''返回objBackDom到Client端
objBackDom.save Response
Response.end
''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''End''''''''''''''''''''''''''''''''''''''''''''''''''''''''
venus0314 2005-02-21
  • 打赏
  • 举报
回复
HTC中可以这样实现:

画曲线图需要的数据统统作为对象的接口,比如
<PUBLIC:PROPERTY Name="ID" />
<PUBLIC:PROPERTY Name="Width" />
<PUBLIC:PROPERTY Name="Height" />
<PUBLIC:PROPERTY Name="Data" />
绑定初始化事件:
<PUBLIC:ATTACH EVENT="ondocumentready" For="element" ONEVENT="DrawChart()" />
在DrawChart函数中根据ID获取该对象的所有属性,进行画图操作,这就是VML的事了

这样就OK了
akyca 2005-02-21
  • 打赏
  • 举报
回复
嗯,有些理解了,研究去了,非常感谢!
P.S : 有没有可以借用的源代码,或者网络资源呢?
请mail到wlm_wlp@hotmail.com
马上结帖
hackate 2005-02-21
  • 打赏
  • 举报
回复
mark..
venus0314 2005-02-21
  • 打赏
  • 举报
回复
采用框架还是会让用户明显感觉到刷新的
而采用XmlHttp则不会出现这种情况
minghui000 2005-02-21
  • 打赏
  • 举报
回复
up
venus0314 2005-02-21
  • 打赏
  • 举报
回复
可以
XmlHttp是无刷新实现数据传输的,而且,图表区是VML+HTC封装类实现的,只要在Step2种中动态更改该对象的某些属性(当然是HTC中对该队象暴漏的属性),那么每次重新赋值之后,HTC会动态解析该对象,从而实现局部刷新
richardingding 2005-02-21
  • 打赏
  • 举报
回复
学习ing。
akyca 2005-02-21
  • 打赏
  • 举报
回复
javascript能实现局部刷新吗?
还是用隐藏框架来刷新子页面的方法呢?
venus0314 2005-02-21
  • 打赏
  • 举报
回复
实现方案如下:

关键点:
1:如何无刷新的获取数据(在.NET中使用WebService或XmlHttp作为数据库交互方式)
2:如何实现定时刷新(可以使用JavaScript的setTimeOut()函数)
3:如何绘制图表(可以使用VML画图)

以上三点都通了,自然就可以实现了

之前曾做过一个类似于“股票看板”的东西,采用ASP+VML+HTC封装类,前台采用setTimeOut函数定时调用取数据的函数,而获取数据则采用XmlHttp协议。

具体做法如下:
function drawPic()
{
///Step1:提交后台获取数据
///返回DOM对象或XML文本流
///Step2:解析DOM或XML,绘制图表
///Step3:刷新
window.setTimeout("drawPic();",1000);
}

AllenTing 2005-02-21
  • 打赏
  • 举报
回复
gz
czhenq 2005-02-21
  • 打赏
  • 举报
回复
画线可以使用GDI+
封装在System.Drawing命名空间里。
至于你说的只刷新图片,不知道使用框架也是否可以实现

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧