没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2009-07-30 10:06:19.000|阅读 2060 次
概述:VSTA(Visual Studio Tools for Applications )是微软免费提供的方便开发人员定制应用程序的工具,它的作用和VBA类似,可以为应用程序的二次开发人员提供一个Visual Studio环境以及C#和VB.NET语言进行插件的开发,我们可以简单的把它看成是VBA的.Net升级版,目前微软的Office2007完全支持这项技术。下面我们详细说明实现通过VSTA编程实现联动下拉列表框的过程。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
VSTA(Visual Studio Tools for Applications )是微软免费提供的方便开发人员定制应用程序的工具,它的作用和VBA类似,可以为应用程序的二次开发人员提供一个Visual Studio环境以及C#和VB.NET语言进行插件的开发,我们可以简单的把它看成是VBA的.Net升级版,目前微软的Office2007完全支持这项技术。下面我们详细说明实现通过VSTA编程实现联动下拉列表框的过程。
通过规则实现联动下拉列表框的方法要求必须以带参数查询的Web Service作为数据源,而下文中的方法对数据源没有特殊要求。所以,我们选择最简单的SharePoint列表作为数据源。在SharePoint服务器上创建一个自定义列表Cities,为这个列表增加两个栏,栏名为City和Province,类型都为“单行文本”。创建好列表后输入一些测试数据,如下图。
1. 我们创建一个与上一篇界面相同的表单,但是数据连接不同,也不需要添加规则。表单上同样要放置两个下拉列表框ddlb1和ddlb2。
2. 进入下拉列表框ddlb1的属性对话框,在“数据”页中,手动输入两个选项“四川”和“新 疆”。注意,这次要保留第一行默认的空值(显示名称“选择…”)。
3. 在下拉列表框ddlb1属性的“浏览器表单”页,确认回发设置为“始终”。
4. 需要强调两点:第一,创建表单模板时一定要钩选“仅启用浏览器兼容性功能”,或者也可以在设计表单时选择菜单工具/表单选项,进入表单选项对话框,在“类别”中选择“兼容性”,钩选“设计一个可在浏览器或InfoPath中打开的表单模板”,作用与前者相同。
第二,在表单选项中选择“安全和信任”,不钩选“自动确定安全级别”,而选择“完全信任”。因为如果在表单中加入VSTA编程,表单安全级别必须为“完全信任”,否则程序无法运行。因为表单安全级别为“完全信任”,发布表单步骤就与普通表单不同了,后面的文章会详细说明发布安全级别为“完全信任”的表单的步骤。
5. 以上界面设计完毕后接着添加数据连接,启动“数据连接向导”,
A. 选择将SharePoint列表作为数据源。
B. 进入下一步,输入SharePoint网站的地址;
C. 进入下一步,选择列表Cities。
D. 进入下一步,选择列表的域Province和Cities,如下图。
E. 在向导最后一步,不要钩选“在打开表单时自动检索数据”,点击“完成”按钮。
数据连接创建完毕后,接着就要设置下拉列表框ddlb2的数据源。在ddlb2属性对话框“数据”页的“列表框项”下选择“从外部数据源查找值”,将“数据源”设置为Cities,“项”设置为:
/dfs:myFields/dfs:dataFields/dfs:Cities
“值”为:@City
“显示名称”为:@City 要进行VSTA编程必须安装VSTA软件开发工具包,笔者使用的版本是Visual Studio 2005 Tools for Applications Software Development Kit (SDK),下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=7C2EA8AE-E051-449A-9051-3A351BF27B7F&displaylang=en&displaylang=en 编程的思路是,系统侦听下拉列表框ddlb1的Changed事件,一旦ddlb1的值发生变化,系统将重新检索ddlb2的数据源,并按照ddlb1的值进行过滤,删除不符合条件的值,只保留符合条件的值。下面用到的代码源于国外ICT专家Frederik博客中的文章《HOW TO use Cascading Dropdown List Boxes within an InfoPath Web Form》(参考资料[2])。 下面详细说明操作步骤。 下面对代码中自定义函数作简单说明。 参数 说明 dataConnectionName 数据连接名称,该数据连接是下拉列表框ddlb2数据源的数据连接,在本例中值应为“Cities”。 可以从菜单工具/数据连接打开数据连接对话框。 dataSourceName 数据源名称,指下拉列表框ddlb2的辅助数据源,应该与对应数据连接同名。可以从菜单视图/任务窗格打开数据源视图。 ForeignKey 设置过滤条件的Field的名称,这个Field的设置值应该与下拉列表框ddlb1的值对应。在本例中该参数值应为“Province”。 CascadingDropDownDataSourceField 联动的下级下拉列表框(bblb2)的XPath值,打开数据源视图,选择主数据源,右键点击ddlb2,在弹出的菜单上选择复制XPath可获得该参数值,在本例中应为“/my:myFields/my:ddlb2”。 selectedMainValue 联动的上级下拉列表框(ddlb1)的值,该函数会根据此值过滤ddlb2的选项。可通过ddlb1_Changed事件自带参数e.NewValue获得,该值即ddlb1变化后的新值。 repeatingNode 下拉列表框bblb2的数据源中作为选项Node的XPath值,可以从ddlb2的属性对话框中看到,也可以在数据源视图中“复制XPath”得到。在本例中应为“/dfs:myFields/dfs:dataFields/dfs:Cities”。 完成编写代码后,可以在VSTA环境中启动调试,观察运行结果。如果程序能在InfoPath客户端中成功运行,下一步就可以向InfoPath Forms Services发布这个表单了。 前面提到过,由于本表单模板的安全级别是“完全信任”,因而发布过程不同于一般InfoPath表单,发布这种表单的过程稍微复杂一些,下面是发布过程。 1. 首先,启动发布表单模板向导,选择“具有或不具有InfoPath Form Services的SharePoint服务器”; 1. 上载表单模板。在SharePoint管理中心的应用程序管理页面,点击InfoPath Forms Services下面的“上载表单模板”;进入上载表单模板页面,输入前面发布的表单模板的位置和文件名“d:\ddlb2pub.xsn”。点击上载按钮,等待一会儿,会出现上载成功的页面;点击确定后,会进入管理表单模板页面。这时会看到刚上载的表单模板ddlb2pub.xsn这一项,要注意这项的状态。如果状态为“就绪”,说明完全安装成功。如果状态为“正在安装”,就要等一会儿在刷新页面,直到状态变为“就绪”为止。如果长时间处于“正在安装”状态,就要检查“Windows SharePoint Services Timer”这个服务是否启动,如果没启动则启动它,或者手动执行命令“stsadm –o execadmsvcjobs”完成表单模板安装。
完成上述步骤,InfoPath表单就设计好了,将这个表单模板保存为ddlb2.xsn。下一步就要进行VSTA编程来实现下拉列表框联动。
第三步,VSTA编程。
Code
string dataConnectionName = "Cities";
string dataSourceName = "Cities";
string ForeignKey = "Province";
string CascadingDropDownDataSourceField = "/my:myFields/my:ddlb2";
string selectedMainValue = e.NewValue;
string repeatingNode = "/dfs:myFields/dfs:dataFields/dfs:Cities";
//调用自定义函数重新填充ddlb2选项
PopulateCascadingDropDown(selectedMainValue, dataConnectionName,
dataSourceName, repeatingNode, ForeignKey,
CascadingDropDownDataSourceField);
在FormCode类中插入下面自定义函数的代码。
Code
private void PopulateCascadingDropDown(string selectedMainValue,
string dataConnectionName, string dataSourceName, string repeatingNode,
string ForeignKey, string CascadingDropDownDataSourceField)
{
// 清空ddlb2已选择的值
XPathNavigator xnMain = this.MainDataSource.CreateNavigator();
xnMain.SelectSingleNode(CascadingDropDownDataSourceField,
this.NamespaceManager).SetValue(string.Empty);
// 重新检索ddlb2数据源数据
DataConnection dcSecond = this.DataConnections[dataConnectionName];
dcSecond.Execute();
// 获得ddlb2数据源的Navigator
XPathNavigator xnFD =
this.DataSources[dataSourceName].CreateNavigator();
// 设置过滤条件,既某一个Field不等于ddlb1的值
string xPathString = repeatingNode + "[@" + ForeignKey + "!='" +
selectedMainValue + "']";
// 获得不符合过滤条件的节点集合,逐一删除节点(未被删除的节点就是需要的)
XPathNodeIterator items = xnFD.Select(xPathString,
this.NamespaceManager);
while (items.Count != 0)
{
xnFD.SelectSingleNode(xPathString,
this.NamespaceManager).DeleteSelf();
items = xnFD.Select(xPathString, this.NamespaceManager);
}
}
第四步,发布InfoPath表单。
2. 进入下一步,输入SharePoint网站地址;
3. 进入下一步,一定要确认钩选“使用户可以通过浏览器填写此表单”。
4. 进入下一步,填写发布后模板存放的位置和文件名称,本例我们填写“d:\ddlb2pub.xsn”。
5. 进入下一步,再点击下一步就可以发布了。
发布向导完成后,记住发布文件的位置,后面的操作会把这个文件上传到SharePoint服务器上。
下面还需要以管理员身份登录SharePoint管理中心上传表单模板,并添加表单库的内容类型,操作如下。第五步,应用内容类型。
2. 激活到网站集。表单模板就绪后,还需要激活表单模板。从表单模板ddlb2pub.xsn的下拉菜单选择“激活到网站集”。在激活表单模板页面中,网站集一项选择要使用这个表单的网站集,点击确定即可。
3. 添加内容类型。我们需要将这个内容类型应用到一个SharePoint列表或库上(为了简便,本例我们还是选用上一篇文章中创建的表单库ddlb,但需要将该库设置为“允许管理内容类型”)。在表单库的设置页面,在内容类型下面点击“从现有网站内容类型添加;入添加内容类型页面,从可用网站内容类型列表中选择ddlb2pub,点击“添加”按钮,再点击“确定”按钮。
完成后该内容类型会列在表单库的设置页面的内容类型下面。如果不喜欢缺省名称,可以点击该内容类型,将名称改为“VSTA表单”。
至此,内容类型添加完毕,下面可以测试了。在ddlb表单库页面,点击“新建”下拉菜单,选择“VSTA表单”。
上面步骤详细说明了VSTA编程实现联动下拉列表框的操作过程。这种方法的优点是对下拉列表框的数据源没有限制,由于VSTA功能强大,还可以扩展更多的功能,灵活性是其它方法无可比拟的;但是,表单发布比较复杂,而且要求有管理员权限。
本文和上一篇文章中讲述的方法都不能在重复表中实现联动的下拉列表框,下一篇将讲述如何在重复表中实现联动的下拉列表框。源码下载:ddlbEx2.rar
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:博客园面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号