技术开发 频道

从移动应用程序访问数据

 入门

 我强烈建议对仿真器和设备本身进行测试,从而避免发生应用程序在仿真器上能正常运行但在设备上无法正常运行这样的情形。我的方法是在开发移动程序的整个过程中都使用仿真器,然后在某个检查点将应用程序部署到真实移动设备。

 调试之前,必须确保从 Visual Studio? 的“工具”菜单运行“设备仿真器”。在选择需要的仿真器后,右键单击它并选择“连接”。接着,仿真器将开始引导 Smartphone。当 Smartphone 在仿真器中运行后,再次在“设备管理器”中右键单击该项,然后选择“插入底座”。插入底座将允许仿真器与网络进行通信。最后,在 Visual Studio 中,从“设备”工具栏的下拉列表中选择仿真器(请参见图 2)。

 Figure 2 Selecting a Target Emulator

 为获取数据,我的示例应用程序会与某个 IIS Web 服务器上的 Web 服务进行通信。该 Web 服务对于移动应用程序而言非常好用,因为它可以同时传递 ADO.NET 对象(如 DataSet)和自定义实体。首先,我创建了一个 Web 服务项目并添加名为 CustomerWebService 的 WebService。将三个方法添加到 WebService 并使用 WebMethod 属性分别进行修饰:

 

 [WebMethod]

 public Customer GetCustomer(string customerID) {

 ...

 }

 [WebMethod]

 public DataSet GetCustomerDataSet(string customerID) {

 ...

 }

 [WebMethod]

 public List<Customer> FindCustomerList() {

 ...

 }

 GetCustomer 方法会检索自定义实体形式的单个客户记录。GetCustomerDataSet 方法也会获取单个客户记录,但此方法会以 DataSet 形式返回客户。FindCustomerList 方法会获取客户列表,返回 List<Customer>,因此能够利用客户实体和泛型。此 Web 服务的完整代码包含在可下载代码中。

 创建 Web 服务后,我将 Windows Mobile 5.0 Smartphone 应用程序添加到解决方案。如果您同时安装了 Windows Mobile 5.0 和 Windows Mobile 6 SDK,则可以在此对话框中选择目标应用程序。此项目中,我要创建的是 Windows Mobile 5.0 Smartphone 设备应用程序。

 该 Smartphone 应用程序将具备一个启动窗体,可在下拉列表中显示客户列表。用户可以选择其中一个客户,然后在其他页面上查看该客户的详细信息。客户列表是从 Web 服务的 FindCustomerList Web 方法检索的,后者将一个 List<Customer> 返回给窗体。之后,可以手动或自动将该列表绑定到下拉列表。(我将简要说明这两种方法。)

 自动绑定

 CustomerPicker 窗体是用户看见的第一个屏幕。我在此窗体中添加了一个下拉列表,并命名为 ddlCustomer。我想要利用自动绑定,将下拉列表绑定到会从 FindCustomerList Web 方法返回的 List<Customer>。我将新的数据源添加到项目,选择要绑定下拉列表的实体类型。由于引用了 Web 服务,因此应用程序知道 WebMethods 会返回的实体类型。这让我能够轻松地将强类型化实体绑定到下拉列表。

 转到“数据源”窗口,然后单击“添加新数据源”,这样会弹出向导。我选择添加对象类型,单击“下一步”,然后在提供的列表中找到 Customer 实体(请参见图 3)。如果添加新数据源时在列表中找不到实体,请确保先成功编译 Web 服务项目,然后返回并再次尝试添加数据源。如果实体由 Web 服务提供,那么,只有在编译 DLL 之后才会在列表中显示该实体。

 Figure 3 Creating a Customer Data Source

 添加数据源后,我将新的 Customer 数据源(请参见图 4)从“数据源”窗口拖到下拉列表。这会在名为 customerBindingSource 的窗体上自动创建 BindingSource 控件,并处理 Customer 实体与控件之间的双向绑定。

 Figure 4 Using a Customer Data Source

 在仿真器中测试应用程序之前设置自动绑定还有两个步骤。下一步是设置下拉列表的 DisplayMember 和 ValueMember 属性。我将 DisplayMember 属性设为 CompanyName,ValueMember 属性则设为 CustomerID。由于数据源是强类型化的,因此这些值位于下拉列表控件属性窗口的下拉列表中。

 最后一步是告知 BindingSource 控件去何处获取数据。这就像创建 Web 服务代理类的实例一样简单,即调用适当方法并将其返回的 List<Customer> 设置为 BindingSource 控件的 DataSource 属性,如下所示:

 private void CustomerPicker_Load(object sender, EventArgs e)

 {

 using (RemoteService.CustomerWebService svc =

 new RemoteService.CustomerWebService())

 customerBindingSource.DataSource = svc.FindCustomerList();

 }

 此时,便可以运行和测试应用程序,看它是否在下拉列表中显示客户列表。确保您已经在 Visual Studio 中设置目标设备、(根据需要)运行 ActiveSync? 或 Windows Mobile 设备中心,并且正在模拟的设备已插入底座(使用设备仿真器管理器)。

0
相关文章