[译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表
2009-11-10 21:22
816 查看
翻译:实现多级联动的下拉式列表
原文: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:打开网站
打开 VS
从 “文件”(File) 菜单中, 选择 “打开”(Open) 然后再选择 “网站”(Web Site)
选择“文件系统” (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
点击打开(Open)
在解决方案浏览器中(Solution Explorer), 右击这个网站选择创建一个新的文件夹。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/14/d42a5a5b76c134bff33c7284c2de8653)
重命名这个文件夹叫 WebServices
考虑到今后可能还会有其它Web Service放在这个文件夹中,为了方便管理我们再创建一个子文件夹:
在WebServices 右击 选择新文件夹(New Folder)
重命名这个文件夹为 NorthwindTables
Step 2: 创建Web Service
右击 NorthwindTables 选择新建项目( Add New Item)
在模板对话框中选择WEB服务(Web Service)
在命名框中把这个项目命名为: NorthwindTable.asmx
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/14/03596dcc5bd8a484f722dd4852bedaf4)
取消“将代码放在单独的文件中”,点击确定。
Step 3: 添加WEB方法
注意: 在这个示例中, 假设 SQL Server 数据库是与Microsoft Office SharePoint Server安装在同一台机器中的。
给代码添加“using” 如下:
using System.Data;
using System.Data.SqlClient;
添加Web 方法如下,从Northwind 库的 Customers 表中读取CustomerID的值:
[WebMethod]
public DataSet GetCustomers() {
// 创建到Northwind 数据库的连接
SqlConnection cn = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=Northwind");
// 创建一个data adapter 对象来执行SQL
// statement to retrieve the customer ID values
SqlDataAdapter da = new SqlDataAdapter("SELECT Customers.CustomerID FROM Customers Order By CustomerID", cn);
// 创建DataSet来存储
DataSet ds = new DataSet();
// 打开连接
cn.Open();
// 填充数据
da.Fill(ds, "Customers");
// 关闭相关连接
cn.Close();
cn = null;
da = null;
return ds;
}
如下添加web方法,从传入的已选择的客户(Customer)中去读取相关订单信息:
[WebMethod]
public DataSet GetOrdersForSelectedCustomer(string strCustID) {
// 创建到库的连接
SqlConnection cn = new SqlConnection("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 = new SqlDataAdapter(strOrdersSQL, cn);
// 创建DataSet存储数据
DataSet Ds = new DataSet();
// 打开连接
cn.Open();
// 填充数据
daOrders.Fill(Ds, "Orders");
// 清理内存
cn.Close();
cn = null;
daOrders = null;
return Ds;
}
生成(Build)并保存项目。
Step 4: 测试这个Web Service
注意: 这个网站的应用程序池的标识帐户,必须对SQL SERVER这个数据库具有访问权限才可以。
打开浏览器并访问http://%3cserver%3e/_layouts/WebServices/NorthwindTables/NorthwindTables.asmx (把 <server> 替换成你服务器名称)
你可以看到刚才我们创建的2个方法,和系统默认的 HelloWorld :
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/14/8ed2abfa5ff46e04abf775395d9d9c71)
单击 GetCustomers 然后点击Invoke – 它会返回一组客户ID的值。
单击 GetOrdersForSelectedCustomer ,在 strCustID 文本框中输入: BERGS 然后点击查询 – 它会返回 BERGS的所有订单号。
Step 5: 创建INFOPATH表单
设计一个新的、空的、浏览器兼容的INFOPATH表单。
添加一个下拉列表框并且命名为: SelectCustomer
添加另一个下拉列表框并且命名为: SelectOrder
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/14/f4ca7242dc8e8406c6163ea42ff1e65e)
如下添加2个 “仅接受数据”类型的数据连接,并且连接到NorthwindTables 的 Web Service中去。
GetCustomers:
打开选项“在表单打开时自动检索数据” (“Automatically retrieve data when the form is opened”)
GetOrdersForSelectedCustomer:
当需要使用示例值时,填入 ALFKI 作为 strCustID 参数
取消选项“在表单打开时自动检索数据” (“Automatically retrieve data when the form is opened”)
设置SelectCustomer这个下拉框的属性,其列表框项从外部数据源 GetCustomers 查找值,字段CustomerID 同时为其值和显示名称。
设置 SelectOrder 这个下拉框属性,其列表框项从 GetOrdersForSelectedCustomer数据源查找值,同时使用 OrderID 字段作为其值和显示名称。
在SelectCustomer这个下拉框上创建一个规则(Rule) 应用如下的操作:
设置域值:设置SelectOrder 域值为空
设置域值:设置数据源GetOrdersForSelectedCustomer 中的参数域(strCustID) 为主数据源SelectCustomer 域的值。
使用数据连接进行查询GetOrdersForSelectedCustomer
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/14/5534c644e6eb229a203a316c8c817ed4)
保存这个模板到本地,文件名为FilteredDrop-downs_IPFS.XSN
Step 6: 发布这个模板
发布这个模板到运行 InfoPath Form Services的服务器
使用浏览器在点击文件库中的新建
在SelectCustomer 控件中选择BERGS
点击 SelectOrder – 只有 BERGS 的订单被显示出来
选择不同的客户ID注意订单下拉框是否改变。
由Dosboy倾情翻译
原文: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:打开网站
打开 VS
从 “文件”(File) 菜单中, 选择 “打开”(Open) 然后再选择 “网站”(Web Site)
选择“文件系统” (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
点击打开(Open)
在解决方案浏览器中(Solution Explorer), 右击这个网站选择创建一个新的文件夹。
重命名这个文件夹叫 WebServices
考虑到今后可能还会有其它Web Service放在这个文件夹中,为了方便管理我们再创建一个子文件夹:
在WebServices 右击 选择新文件夹(New Folder)
重命名这个文件夹为 NorthwindTables
Step 2: 创建Web Service
右击 NorthwindTables 选择新建项目( Add New Item)
在模板对话框中选择WEB服务(Web Service)
在命名框中把这个项目命名为: NorthwindTable.asmx
取消“将代码放在单独的文件中”,点击确定。
Step 3: 添加WEB方法
注意: 在这个示例中, 假设 SQL Server 数据库是与Microsoft Office SharePoint Server安装在同一台机器中的。
给代码添加“using” 如下:
using System.Data;
using System.Data.SqlClient;
添加Web 方法如下,从Northwind 库的 Customers 表中读取CustomerID的值:
[WebMethod]
public DataSet GetCustomers() {
// 创建到Northwind 数据库的连接
SqlConnection cn = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=Northwind");
// 创建一个data adapter 对象来执行SQL
// statement to retrieve the customer ID values
SqlDataAdapter da = new SqlDataAdapter("SELECT Customers.CustomerID FROM Customers Order By CustomerID", cn);
// 创建DataSet来存储
DataSet ds = new DataSet();
// 打开连接
cn.Open();
// 填充数据
da.Fill(ds, "Customers");
// 关闭相关连接
cn.Close();
cn = null;
da = null;
return ds;
}
如下添加web方法,从传入的已选择的客户(Customer)中去读取相关订单信息:
[WebMethod]
public DataSet GetOrdersForSelectedCustomer(string strCustID) {
// 创建到库的连接
SqlConnection cn = new SqlConnection("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 = new SqlDataAdapter(strOrdersSQL, cn);
// 创建DataSet存储数据
DataSet Ds = new DataSet();
// 打开连接
cn.Open();
// 填充数据
daOrders.Fill(Ds, "Orders");
// 清理内存
cn.Close();
cn = null;
daOrders = null;
return Ds;
}
生成(Build)并保存项目。
Step 4: 测试这个Web Service
注意: 这个网站的应用程序池的标识帐户,必须对SQL SERVER这个数据库具有访问权限才可以。
打开浏览器并访问http://%3cserver%3e/_layouts/WebServices/NorthwindTables/NorthwindTables.asmx (把 <server> 替换成你服务器名称)
你可以看到刚才我们创建的2个方法,和系统默认的 HelloWorld :
单击 GetCustomers 然后点击Invoke – 它会返回一组客户ID的值。
单击 GetOrdersForSelectedCustomer ,在 strCustID 文本框中输入: BERGS 然后点击查询 – 它会返回 BERGS的所有订单号。
Step 5: 创建INFOPATH表单
设计一个新的、空的、浏览器兼容的INFOPATH表单。
添加一个下拉列表框并且命名为: SelectCustomer
添加另一个下拉列表框并且命名为: SelectOrder
如下添加2个 “仅接受数据”类型的数据连接,并且连接到NorthwindTables 的 Web Service中去。
GetCustomers:
打开选项“在表单打开时自动检索数据” (“Automatically retrieve data when the form is opened”)
GetOrdersForSelectedCustomer:
当需要使用示例值时,填入 ALFKI 作为 strCustID 参数
取消选项“在表单打开时自动检索数据” (“Automatically retrieve data when the form is opened”)
设置SelectCustomer这个下拉框的属性,其列表框项从外部数据源 GetCustomers 查找值,字段CustomerID 同时为其值和显示名称。
设置 SelectOrder 这个下拉框属性,其列表框项从 GetOrdersForSelectedCustomer数据源查找值,同时使用 OrderID 字段作为其值和显示名称。
在SelectCustomer这个下拉框上创建一个规则(Rule) 应用如下的操作:
设置域值:设置SelectOrder 域值为空
设置域值:设置数据源GetOrdersForSelectedCustomer 中的参数域(strCustID) 为主数据源SelectCustomer 域的值。
使用数据连接进行查询GetOrdersForSelectedCustomer
保存这个模板到本地,文件名为FilteredDrop-downs_IPFS.XSN
Step 6: 发布这个模板
发布这个模板到运行 InfoPath Form Services的服务器
使用浏览器在点击文件库中的新建
在SelectCustomer 控件中选择BERGS
点击 SelectOrder – 只有 BERGS 的订单被显示出来
选择不同的客户ID注意订单下拉框是否改变。
由Dosboy倾情翻译
相关文章推荐
- Infopath自定义表单实现列表字段联动
- Infopath自定义表单实现列表字段联动
- 如何在启用SharePoint浏览器功能的InfoPath 表单中添加托管代码以动态地加载并显示图片
- Infopath自定义表单实现列表字段联动
- 基于xml 实现动态加载权限功能树列表---EFSFrame企业级开发架构
- 基于ASP.NET+EasyUI框架实现图片上传提交表单功能(js提交图片)
- [置顶] 基于Echarts插件的省市区多级地图下钻和返回功能实现
- BaseRecyclerViewAdapterHelper之BaseMultiItemQuickAdapter实现多级列表功能
- Python基于列表list实现的CRUD操作功能示例
- Android仿美团淘宝实现多级下拉列表菜单功能
- jQuery实现多级联动下拉列表查询框
- 一步步学习微软InfoPath2010和SP2010--第二章节--表单需求:使用决策矩阵(6)--结合基于客户端和基于浏览器的控件
- 基于ASP.NET+easyUI框架实现图片上传功能(表单)
- 一步步学习微软InfoPath2010和SP2010--第二章节--表单需求:使用决策矩阵(6)--结合基于客户端和基于浏览器的控件
- 实现word的多级列表功能
- InfoPath 表单服务 实现级联功能
- 利用js+php的技术,实现全国地址多级联动的功能
- 基于Spinner实现的三级联动、多级联动
- 多级联动下拉列表Ajax方案实现
- python基于selenium+PhantomJS实现用提交表单,并点击按钮功能,获取返回的页面源码和ur等信息l。