[译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表

摘要:
通过创建带参数的WebService的方法我们就可以完成这个不可能的任务,你可以把这些基于WebService的方法以“数据连接”的形式加入模板,当一个下拉列表框值发生变化时来执行这些查询。这个例子,需要去连接到SQLSERVER的Northwind示例数据库和VisualStudio。Step4:测试这个WebService注意:这个网站的应用程序池的标识帐户,必须对SQLSERVER这个数据库具有访问权限才可以。Step5:创建INFOPATH表单设计一个新的、空的、浏览器兼容的INFOPATH表单。

翻译:实现多级联动的下拉式列表

原文:http://blogs.msdn.com/infopath/archive/2006/10/12/cascading-dropdowns-in-browser-forms.aspx

如果你使用Office InfoPath客户端软件去创建解决方案,很方便地去使用“筛选”功能,去筛选下拉列表框的值,但是“筛选”功能在基于浏览器的模板中是用不起来的,那么我们怎么去完成同样的功能呢?

通过创建带参数的Web Service的方法我们就可以完成这个不可能的任务,你可以把这些基于Web Service的方法以“数据连接”的形式加入模板,当一个下拉列表框值发生变化时来执行这些查询。当这个查询设置好后,简单地执行这个“数据连接”的查询就可以获得相关的数据。
这个例子,需要去连接到SQL SERVER的Northwind示例数据库和Visual Studio。
首先,让我们去创建这个Web Service,其中包括2个方法。
Step 1:打开网站
  1. 打开 VS
  2. 从 “文件”(File) 菜单中,选择 “打开”(Open)然后再选择 “网站”(Web Site)
  3. 选择“文件系统”(File System)然后浏览到 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS
注意: 本示例选择了 LAYOUTS 文件夹, 这意味着这个 web service 对所有的网站都是可见的.如果你想你的Web Service对某个特定的网站可见,你可以打开这个目录 C:\Inetpub\wwwroot\wss\VirtualDirectories\80
  1. 点击打开(Open)
  2. 在解决方案浏览器中(Solution Explorer), 右击这个网站选择创建一个新的文件夹。
[译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表第1张
  1. 重命名这个文件夹叫WebServices
  2. 考虑到今后可能还会有其它Web Service放在这个文件夹中,为了方便管理我们再创建一个子文件夹:
    1. WebServices右击 选择新文件夹(New Folder)
    2. 重命名这个文件夹为NorthwindTables
Step 2:创建Web Service
  1. 右击 NorthwindTables选择新建项目( Add New Item)
  2. 在模板对话框中选择WEB服务(Web Service)
  3. 在命名框中把这个项目命名为: NorthwindTable.asmx
[译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表第2张
  1. 取消“将代码放在单独的文件中”,点击确定。
Step 3: 添加WEB方法
注意:在这个示例中,假设 SQL Server 数据库是与Microsoft Office SharePoint Server安装在同一台机器中的。
  1. 给代码添加“using” 如下:

using
System.Data;
using System.Data.SqlClient;
  1. 添加Web 方法如下,从Northwind 库的 Customers 表中读取CustomerID的值:
[WebMethod]
publicDataSet GetCustomers() {
// 创建到Northwind 数据库的连接
SqlConnection cn = newSqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=Northwind");
// 创建一个data adapter对象来执行SQL
// statement to retrieve the customer ID values
SqlDataAdapter da = newSqlDataAdapter("SELECT Customers.CustomerID FROM Customers Order By CustomerID", cn);
// 创建DataSet来存储
DataSet ds = newDataSet();
//打开连接
cn.Open();
// 填充数据
da.Fill(ds, "Customers");
// 关闭相关连接
cn.Close();
cn = null;
da = null;
return ds;
}
  1. 如下添加web方法,从传入的已选择的客户(Customer)中去读取相关订单信息:

[WebMethod]
publicDataSet GetOrdersForSelectedCustomer(string strCustID) {
// 创建到库的连接
SqlConnection cn = newSqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=Northwind");
//创建一个字串变量,以便存储修改后的SQL语句
string strOrdersSQL = "";
//创建一个默认的SQL字串
string strOrdersOrigSQL = "SELECT * FROM Orders";
// 一些客户ID的值包含单引号' 我们需要
//把它替换成2个单引号,以便
// 系统可以正确地识别
strCustID = strCustID.Replace("'", "''");
// 把默认的SQL语句换成带查询参数的。
// 并且需要排序
strOrdersSQL = strOrdersOrigSQL + " Where CustomerID Like '%" + strCustID + "%' Order By OrderID";
// 创建一个Adapter对像去获取OrderID的值。
SqlDataAdapter daOrders = newSqlDataAdapter(strOrdersSQL, cn);
//创建DataSet存储数据
DataSet Ds = newDataSet();
// 打开连接
cn.Open();
// 填充数据
daOrders.Fill(Ds, "Orders");
// 清理内存
cn.Close();
cn = null;
daOrders = null;
return Ds;
}
  1. 生成(Build)并保存项目。
Step 4:测试这个Web Service
注意:这个网站的应用程序池的标识帐户,必须对SQL SERVER这个数据库具有访问权限才可以。
  1. 打开浏览器并访问http://%3cserver%3e/_layouts/WebServices/NorthwindTables/NorthwindTables.asmx (把 <server> 替换成你服务器名称)
  2. 你可以看到刚才我们创建的2个方法,和系统默认的 HelloWorld :
[译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表第3张
  1. 单击GetCustomers 然后点击Invoke –它会返回一组客户ID的值。
  2. 单击 GetOrdersForSelectedCustomer,strCustID 文本框中输入: BERGS然后点击查询 –它会返回 BERGS的所有订单号。
Step 5: 创建INFOPATH表单
  1. 设计一个新的、空的、浏览器兼容的INFOPATH表单。
  2. 添加一个下拉列表框并且命名为: SelectCustomer
  3. 添加另一个下拉列表框并且命名为: SelectOrder
[译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表第4张
  1. 如下添加2个“仅接受数据”类型的数据连接,并且连接到NorthwindTables 的 Web Service中去。
    1. GetCustomers:
      • 打开选项“在表单打开时自动检索数据”(“Automatically retrieve data when the form is opened”)
    2. GetOrdersForSelectedCustomer:
      • 当需要使用示例值时,填入ALFKI 作为 strCustID参数
      • 取消选项“在表单打开时自动检索数据”(“Automatically retrieve data when the form is opened”)
  2. 设置SelectCustomer这个下拉框的属性,其列表框项从外部数据源GetCustomers 查找值,字段CustomerID 同时为其值和显示名称。
  3. 设置 SelectOrder这个下拉框属性,其列表框项从 GetOrdersForSelectedCustomer数据源查找值,同时使用 OrderID 字段作为其值和显示名称。
  4. 在SelectCustomer这个下拉框上创建一个规则(Rule) 应用如下的操作:
    1. 设置域值:设置SelectOrder 域值为空
    2. 设置域值:设置数据源GetOrdersForSelectedCustomer中的参数域(strCustID) 为主数据源SelectCustomer 域的值。
    3. 使用数据连接进行查询GetOrdersForSelectedCustomer
[译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表第5张
  1. 保存这个模板到本地,文件名为FilteredDrop-downs_IPFS.XSN
Step 6: 发布这个模板
  1. 发布这个模板到运行InfoPath Form Services的服务器
  2. 使用浏览器在点击文件库中的新建
  3. SelectCustomer 控件中选择BERGS
  4. 点击SelectOrder –只有 BERGS 的订单被显示出来
  5. 选择不同的客户ID注意订单下拉框是否改变。
由Dosboy倾情翻译

免责声明:文章转载自《[译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Pylint 使用手册(正在努力翻译中)Spring注解之@RestControllerAdvice下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Alfred工具

神兵利器——Alfred 有人的地方就有江湖,有江湖就有纷争。 很多人说我的文字风格相对轻松和温和,那是因为我很早就认识到,我们没有教育脑残和喷子的义务。在网际多年,看过太多虚拟的刀锋和鲜血,很多人被彻头彻尾的粉碎,挫骨扬灰,似乎从来没有来过这个网络,但是很快这些人就从另一个黑暗的角落爬了起来,并换上一副暂新的马甲继续战斗。所以我在网络上很少参与或挑起争端...

Win10 微软远程桌面很模糊是为什么?

今天又查了一下,解决了问题,是 Intel 集显驱动引起的。在桌面右键 => 图形属性 => 在蓝色的 Intel 核芯显卡控制面板上选择“ 3D ” => 在“保守形态学抗锯齿”中选择关闭。=> 应用设置。参考https://superuser.com/questions/1163657/rdp-to-windows-10-blu...

数字签名(代码签名)流程

数字签名(代码签名)流程 Authenticode : 这里翻译为数字认证代码。 code sign : 字面的翻译为代码签名,但是通常的我们称为数字签名,以下的文中均称为数字签名。一 数字认证码如果你是软件开发人员,你可能已经知道windows系统和一些浏览器(例如IE,Firefox)使用一种称为数字认证代码的技术来标识软件的发行商,来检查软件没有被...

如何计算 App 的启动时间

应用启动场景 事实上 Android 中一个 App 的启动时间可以准确计算的.但是要分场景.也就是说要分开游戏和应用. 大家都知道,在Android中,游戏开发和应用开发是两码事.所以我们需要分开来说. 1.1 应用启动 我们平时在写应用的时候,一般会指定一个 mainActivity ,用户在桌面上点击这个 Activity 的时候,系统会直接起这...

云存储:阿里云 和 七牛 的比较

结论: 阿里云存储 七牛云存储 标准:REST、HTTP 99%符合 50% 基本功能:送二级域名、绑定域名、CDN 支持 支持 自定义文件HTTP header 支持 少量支持 高级服务:图片处理 不提供 很完善地提供 收费策略 收费 小流量免费。大流量收费。 官方PHP SDK 差,依赖亚马逊http库,而不是PHP官...

跟阿铭学Linux习题答案

第一章:走进Linux 1、简述它的发展历史,列举几种代表性的发行版 Linux之前是Unix,由于Unix收费昂贵,so,Richard Stallman 发起了开发自由软件的运动,并成立了自由软件基金会(Free Software Foundation,FSF)和GNU 项目和协议GPL(是GNU General Public License)。之后一...