技术开发 频道

从移动应用程序访问数据

 绑定字段

 创建和测试 CustomerPicker 窗体后,我创建了另一个名为 CustomerDetail 的窗体。这会显示选中的客户。我更改了数据源设置,以便在将 Customer 数据源拖到窗体时创建详细信息控件,然后自定义在“数据源”窗口显示的属性。随后我将控件拖到 CustomerDetail 窗体。图 5 显示了自定义之后的数据源。

 

Figure 5 Customized Data Source

 现在我必须从 Web 服务的 GetCustomer Web 方法获取选中的 Customer 记录。我使用在前一窗体选中的 CustomerID,并调用 GetCustomer Web 方法。然后,返回的 Customer 实体会设为 CustomerDetail 窗体上 customerBindingSource 控件的数据源。现在我在仿真器中再次测试应用程序,即可看到图 6 所示的屏幕。

 

Figure 6 Application Running in the Emulator

 移动绑定选项

 通过在移动设备应用程序中使用 BindingSource 控件,实现自动绑定便轻而易举。这与 BindingSource 控件在 Windows Forms 应用程序中的工作原理类似,最显著的区别在于缺少 BindingNavigator 控件。由于移动应用程序没有 BindingNavigator 控件,因此,如果您需要从一个记录导航到下一个记录的功能,则必须编写代码。我倾向于避免此类功能,因为它通常是在检索大型项目列表时使用的。在移动应用程序中它会影响性能,因为移动设备通常具有有限的带宽。因此,缺少 BindingNavigator 并非是件坏事,因为它可以提醒您节约带宽。

 BindingSource 解决了从实体手动获取值并将其填入窗体控件的难题。保存记录时,BindingSource 还消除了从窗体控件检索值并将其导回实体的麻烦。BindingSource 的缺点在于,手动加载数据时加载过程会有些慢。

 如果测试中性能差异不是很大,我仍建议使用 BindingSource 控件。但是,我经常发现其性能已经足够。在需要将同一组数据绑定到多个控件时,您使用 BindingSource 控件所获得的自动绑定也非常有帮助。

 更改为手动绑定十分简单。只需删除 BindingSource 控件,清除窗体上控件的数据源设置,并编写一些代码将每个值从实体加载到相应控件即可,如下所示:

 using (RemoteService.CustomerWebService svc =

 new RemoteService.CustomerWebService()) {

 RemoteService.Customer customer = svc.GetCustomer(_customerID);

 companyNameTextBox.Text = customer.CompanyName;

 customerIDLabel1.Text = customer.CustomerID;

 ...

 }

 请注意,使用手动方法时,还必须考虑用户要保存数据时如何从控件提取数据。从控件捕获数据并将其导入实体的过程相当简单,但是要让用户保存信息则还需要处理两个额外的步骤。手动绑定常见做法是将 Customer 实体存储为 CustomerDetail 窗体的私有字段,这样在需要提取控件数据或将数据导回实体时可以轻松访问该实体。

 微调移动应用程序

 由于带宽可能有限,移动设备上的处理器比台式计算机慢,因此,只传递应用程序所需的最低数据量是至关重要的。在示例应用程序中,我检索了 Customer 实体列表,但只使用了每个实体中的两个属性。这浪费了 CustomerPicker 屏幕的大量带宽,因为它必须去获取所有客户的所有数据。

 更有效的方法是创建仅检索每个客户 CustomerID 和 CompanyName 的方法。调整移动应用程序时必须牢记此类注意事项,因为诸如此类的性能问题可能不会出现在桌面应用程序中。

 结论

 在着手移动开发之前,进行正确的设置非常重要。您必须确保具备正确的仿真器管理器版本、适当的仿真器、正确的 SDK 以及所需的 ActiveSync 或 Windows Mobile 设备中心版本。当我在 Windows Vista 上运行应用程序时,只有安装 Windows Mobile 设备中心 6.1 和设备仿真器管理器 2 之后,仿真器才会与 Web 服务进行通信。这些是在 Windows Vista 中运行(甚至是面向 Windows Mobile 5.0)时必须安装的重要软件更新。

 如果尝试使用 ActiveSync 查看仿真器时出错,请确保 ActiveSync 已设置为通过 DMA 进行通信。如果尝试访问 Web 服务时出错,则请确保 Web 服务使用您的服务器名称,而不是 localhost。Localhost 在您 PC 上会正常运行,但当仿真器尝试解释 localhost 时,它无法明白您指的是计算机的 Web 服务器。另一个有用提示是,确保您连接仿真设备并插入底座,以便它能够与本地 PC 进行通信。

查看原文地址

0
相关文章