背景: 在实现应用开发中, 存在这样一种需求, 在一张图中动态显示图中图元的数据并控制图元的显示方式。比如一张电气接线图, 需要动态显示各个开关的状态及各个电气设备的参数。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

问题: 如何以Web方式满足这样一个需求?

解决方案: 用Visio绘制图形, 在ASP.NET中调用Visio提供的编程接口去控制Visio图中的图元,并转换成Web上可以显示的图像格式。对于每个要动态显示数据的图形, 定义一个自定义属性标识它,比如:TagNum, 然后在程序中根据TagNum的值从数据库中读取数据来设置相应图形的数据。

参考资源:  Visio 2003 SDK

示例代码:

需要添加对Microsoft Visio 11.0 Type Library的引用(COM组件)。代码如下:

using Microsoft.Office.Interop.Visio;

private void Button1_Click(object sender, System.EventArgs e)

{

Document doc=null;

Cell cell=null;

ApplicationClass app=new ApplicationClass();//运行Visio应用程序

string CurrentPath=MapPath(".");

doc=app.Documents.OpenEx(CurrentPath+"\\bin\\test2.vsd",(short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenCopy);//打开一个visio文件

const string CUST_PROP_PREFIX = "Prop."; //自定义属性前缀

try

{

for(int i=1;i<=doc.Pages[1].Shapes.Count;i++)

{

doc.Pages[1].Shapes[i].Rotate90();//将图形旋转90度

doc.Pages[1].Shapes[i].Text="hello";//设置图形的文本

if(doc.Pages[1].Shapes[i].get_CellExists("TagNum",(short)Microsoft.Office.Interop.Visio.VisExistsFlags.visExistsAnywhere)!=0)//检查定制是否存在指定定制属性

{

doc.Pages[1].Shapes[i].Text=data;//在此处显示图形数据

}

}

doc.Saved=true;//告诉Visio应用程序该文件已保存, 不然Visio要出现是否要保存的对话框,实际上并未保存,因为我们不想对源文件作修改,只是修改过后显示一下就行了。

doc.Pages [1].Export(CurrentPath+"\\test.jpg");//转换成jpg格式的文件

}

finally

{

doc.Close();//关闭打开的文件

app.Quit();//退出Visio应用程序

}

}

测试环境:

Visio 2003+IIS 5.0+.NET FrameWork 1.1

未解决的问题:

1、  即使在一个形状中定义了自定义属性, 通过get_CellExists也无法检测到

2、  不知如何通过代码改变形状的背景色

ASP.NET中Visio图形的控制与数据的动态显示相关推荐

  1. word中visio图形的处理技巧

    word中visio图形的处理技巧 原因分析 word中流程图等画起来麻烦,且各控件间没有关联关系,稍有调整,就需要全部移动一次,呵呵. 在word中加入visio图形 不要直接引入文件或截屏,避免以 ...

  2. 在ASP.NET中使用ListView控件对数据进行显示、分页和排序

    最终效果图如下所示: 使用ListView控件是不需要写代码的,下面我们来看一下ListView的操作流程: 1.首先新建一个ASP窗体 2.然后拖入一个ListView和一个SqlDataSourc ...

  3. ASP.NET中选择GridView的行获取数据

    网上搜一个下总结下面3种 第一种 1.在DataBind()前增加DataKeyNames gvRework.DataSource = ds.Tables["temp"].Defa ...

  4. WORD中插入VISIO图形,打印乱码解决

    1. 在WORD中,右键VISIO图 > VISIO对象 > 转换 > 确定; 2. 或者在复制VISIO图到WORD中时,采用选择性粘贴: 假设在VISIO选择VISIO图: 选择 ...

  5. Microsoft Word中编辑Visio图形的方法

    本文主要介绍在 Microsoft Word 中编辑 Visio 图形的具体方法. 在 Word 中修改 Visio 图形时,经常遇到双击 Visio 图形后,Visio 内容太小不便于修改的情况,而 ...

  6. word流程图怎么做虚线框_如何在visio中画虚线框以及将visio图形复制到word文档

    这两个问题都不是什么复杂的事情,但是如果对visio用的不多或者只是临时用起来碰到了这种问题还真是麻烦事儿. ============================================= ...

  7. PPT中绘制图形如何导入VISIO编辑

    在PPT中绘制图形想要在VISIO中编辑 ①先拆分图形,然后全选,右键选择-另存为图片(S) ②这里要选择保存为矢量图.SVG格式 ③将保存的.svg图片直接拖到打开的VISIO窗口,打开 ④右键选中 ...

  8. viso 画背景框_如何在visio中画虚线框以及将visio图形复制到word文档

    这两个问题都不是什么复杂的事情,但是如果对visio用的不多或者只是临时用起来碰到了这种问题还真是麻烦事儿. ============================================= ...

  9. 如何在visio中画虚线框以及将visio图形复制到word文档中虚线变为实线的问题

    这两个问题都不是什么复杂的事情,但是如果对visio用的不多或者只是临时用起来碰到了这种问题还真是麻烦事儿. ============================================= ...

最新文章

  1. sysbench压测Oracle
  2. python函数的参数类型,Python函数的主要参数类型
  3. python自学教材-python零基础自学教材
  4. Webex远程网络视频会议使用指南
  5. python的开发环境有哪些系统_Win10下配置机器学习python开发环境
  6. ppt图片丢失_041 职场PPT实战:做好的PPT换个电脑就丢字体?三招解决!
  7. 如何在FineUIMvc(ASP.NET MVC)中显示复杂的表格列数据(列表和对象)?
  8. Eclipse4JavaEE安装SpringBoot
  9. Spark初识-弹性分布式数据集RDD
  10. 题目1017:还是畅通工程(最小生成树初步应用)
  11. 【BZOJ3223】文艺平衡树,Splay反转区间
  12. 一个简单的网页抓取工具
  13. php redis用途,redis可以做什么?
  14. [网络流24题]孤岛营救问题
  15. 【转】用Terracotta实现Master-Worker
  16. 关于Nginx里面的配置文件里面的location参数的意思
  17. mysql dbutil_DBUtil
  18. matlab香农编码,用MATLAB编程实现香农编码.doc
  19. Kubernetes Egress 网络策略指南
  20. TiDB 在北京银行交易场景中的应用实践

热门文章

  1. jinchuang正文 nginx配置limit_conn_zone来限制并发连接数以及下载带宽
  2. 【XStream】XStream 忽略不重要点元素
  3. Oracle数据库之PL/SQL程序基础设计
  4. When use jQuery databTables after add action reloa
  5. objective-C NSNotificationCenter (通知)的使用方法
  6. 驴友生涯的开始--香八拉路线精选
  7. 拨号到公司网络操作指南
  8. BSOJ 3899 -- 【CQOI2014】 数三角形
  9. 在java中使用redis
  10. 20160208.CCPP体系具体解释(0018天)