65.9K
CodeProject 正在变化。 阅读更多。
Home

在移动设备上创建过滤后的客户列表

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2008年2月29日

CPOL

7分钟阅读

viewsIcon

33110

downloadIcon

199

在创建业务应用程序时,创建客户列表是一项非常常见的任务。本文演示了使用 Resco MobileForms Toolkit 创建一个移动应用程序是多么简单,该应用程序显示了一个具有搜索功能和专业外观的客户列表。

这是我们对 The Code Project 赞助商的展示性评测。这些评测旨在为您提供我们认为对开发人员有用且有价值的产品和服务信息。

引言

创建客户列表是一项非常常见的任务。在 Windows Mobile 环境中创建应用程序时,程序员面临着一个棘手的任务,即应对内存小、显示屏小、处理器慢的设备。因此,为移动设备设计应用程序比桌面应用程序设计要复杂得多。在本文中,我将演示在 Microsoft .NET Compact Framework 平台上设计和编程 Resco AdvancedList 控件是多么容易,在一个显示客户列表的应用程序中。此应用程序的主要功能将是:

  • 加载时间短(尽快显示列表)
  • 能够在列表中搜索特定客户
  • 能够在应用程序中使用硬件按键
  • 突出显示列表中的搜索结果
  • 能够选择列表中的详细程度
  • 所有这些都在几十行代码中实现

设计 AdvancedList

包含 AdvancedList 控件的 Resco MobileForms Toolkit 可以在此处下载。成功安装后,AdvancedList 控件应该会出现在 Visual Studio 的工具箱中。将其与一个 TextBox 一起拖到表单上,并设计主菜单,使其看起来如下图所示:

one.png

现在我们将利用 AdvancedList 对 Visual Studio 设计器的强大支持,从而生成大部分代码。转到 AdvancedList 控件的属性并编辑其 Templates 属性。

在 Row Template 集合编辑器中,将一个 Row Template 添加到 AdvancedList。将其高度设置为 16,并命名为“Simple”。从现在开始,我将把这个 Row Template 称为简单 Row Template。编辑 CellTemplates 属性。将一个 TextCell 添加到这个简单的 Row Template。将其 CellSourceName 属性设置为“ContactName”,并将 TextFont 更改为粗体。这个简单的 Row Template 将只显示我们客户的姓名。

一旦用户选择了一行,我们希望显示有关该客户的附加信息。除了姓名,我们还想显示地址、城市和国家。我们需要创建一个新的 Row Template,用于显示该行中的这些数据。返回 Row Template 集合编辑器,再添加一个 Row Template。将其命名为“Selected”。将 ForeColor 更改为“HighlightText”,将 BackColor 更改为“HighLight”。将其高度更改为 48。向此 Row Template 添加四个 TextCells。将它们命名为:

  • ContactName
  • 地址
  • 城市
  • 国家

默认情况下,所用字体的大小为 8 磅。一行高 16 像素足以显示使用 8 磅大小字体的文本。因此,我们将使 4 个 TextCells 高 16 像素。现在由您来设置它们的 Bounds 属性,使它们不会重叠(尽管它们可能),并且每个 TextCell 的 Text 都可读。我使用了这些 Bounds 值:

  • 0; 0; -1; 16
  • 0; 16; 100; 16
  • 100; 16; -1; 16
  • 0; 32; -1; 16

在此示例中,我们将显示来自名为 Northwind.sdf 的 SqlCe 数据库文件中的数据,您可以在此处下载该文件。然后将其作为内容添加到您的解决方案中。

您现在可以在 Visual Studio 的服务器资源管理器工具中检查 Northwind.sdf 数据库。您会发现它包含一个“customers”表,该表包含与我们在 Selected Row Template 中赋予 TextCells 的列名相同的列名。CellSource 属性定义了将用于从 TextCells 中获取数据的列的名称。相应地分配 Selected Row Template 中 TextCells 的 CellSource 属性。同时将其 TextFont 属性更改为粗体样式。确认更改。

现在我们需要让 AdvancedList 知道我们希望使用简单 Row Template 显示未选定的行,并使用选定的 Row Template 显示选定的行。将 AdvancedList 的 TemplateIndex 属性设置为 0,并将 SelectedTemplateIndex 属性设置为 1。这些是我们的 Row Template 在其 RowTemplate 集合中的索引。

AdvancedList 现在已准备好加载数据。

加载数据

要从 SQL CE 数据库加载数据,请创建 SqlCeConnection 对象和 aSqlCeCommand 对象。使用此 SQL 命令:

SELECT
ContactName, Address, City, Country FROM customers

以下是使 AdvancedList 加载数据的代码。您可以将其放入表单的构造函数中,紧接在 InitializeComponent() 调用下方:

Me.AdvancedList1.DbConnector.Command = m_Command
Me.AdvancedList1.LoadData()

m_Command 是您的 SqlCeCommand 对象的名称。结果可以在以下屏幕截图中看到:

2.png

这两行代码(除了您用于创建 SqlCeConnectionSqlCeCommand 对象的那些代码)允许我们显示客户列表。现在我们想缩短加载时间。

Me.AdvancedList1.DbConnector.Command = m_Command
Me.AdvancedList1.LoadData()

延迟加载

到目前为止,我们创建的只是一个简单的列表,允许用户滚动它并选择客户以查看有关他们的更多信息。让我们通过使用 AdvancedList 的 DelayLoad 功能来使列表更复杂。只需转到表单的设计器,并在 AdvancedList 的属性窗格中,打开 DelayLoad 属性。重新运行应用程序并观察结果。列表加载速度快得多,因为它只加载一屏幕记录。一旦用户向下滚动,AdvancedList 就会加载其他记录并显示它们。

添加筛选器

表单顶部的 TextBox 将用作筛选器输入文本框。一旦用户在文本框中输入任何字符串,筛选器将只显示包含所输入字符串的记录。筛选器将使用 SQL CE 数据库来获取结果。我们现在将处理 TextBox 的 TextChanged 事件。以下代码将实现此功能:

Me.AdvancedList1.DataRows.Clear()
m_Command.CommandText = "SELECT ContactName, Address, City,
    Country FROM customers WHERE ContactName LIKE '%" + 
Me.TextBox1.Text + "%'"
Me.AdvancedList1.DbConnector.Command = m_Command
Me.AdvancedList1.LoadData()
CType(Me.AdvancedList1.Templates(0)(0),TextCell).SelectedText = Me.TextBox1.Text
CType(Me.AdvancedList1.Templates(1)(0),TextCell).SelectedText = Me.TextBox1.Text

three.pngfour.png

优化应用程序

为了提高用户舒适度并使应用程序可在智能手机平台上使用,我们将添加对硬件按键的支持。要使 AdvancedList 支持硬件按键,只需使用 Visual Studio 的设计器打开 KeyNavigation 属性。由于我们希望用户即使在 TextBox 具有焦点时也能使用硬件按键,我们将在 TextBox 的 KeyDown 事件处理程序中使用此代码:

Select Case e.KeyCode
    Case Keys.Down
        If (Me.AdvancedList1.DataRows.Count - 1 >
            Me.AdvancedList1.ActiveRowIndex) Then
                Me.AdvancedList1.ActiveRowIndex += 1
        End If
        e.Handled = True
    Case Keys.Up
        If (Me.AdvancedList1.ActiveRowIndex > 0) Then
            Me.AdvancedList1.ActiveRowIndex -= 1
        End If

        e.Handled = True
End Select

我们还将为应用程序添加最后一个功能。我们不知道应用程序将在其上运行的设备的显示屏大小。如果显示屏很大,那么用户可以使用它来显示每个记录的一些附加信息,并且他不会介意行高一点。另一方面,如果显示屏很小,他可能会希望记录尽可能简洁,以便许多记录可以显示在显示屏上。我们现在将处理用户单击“显示简单行”和“显示详细行”菜单项时发生的事件,以便用户可以选择每个记录中显示的详细程度。第一个处理程序的代码将是:

Me.AdvancedList1.LoadXml(m_sPath + "\SimpleRows.xml")

第二个处理程序的代码将是:

Me.AdvancedList1.LoadXml(m_sPath + "\DetailedRows.xml")

XML 文件定义 AdvancedList 的设置(所有属性的值)。您可以随时在 Visual Studio 的设计器中右键单击 AdvancedList 并选择“保存”来将其设置保存到 XML 文件中。

five.pngsix.png

为了使整个应用程序看起来更具吸引力,您可以使用 AdvancedList 的能力来渐变填充 Row Template 对象的背景:

seven.pngeight.png

结论

我们现在创建的应用程序满足了我们在一开始指定的所有要求。它实现了一个客户列表,该列表:

  • 无论您的数据库包含多少记录,都显示得很快
  • 提供与移动 SqlCe 服务器一样快的筛选功能
  • 可视化筛选后的输出
  • 响应按下的按键
  • 可以选择显示的详细程度

关于 Resco .NET

Resco 是为运行 Microsoft Windows Mobile 操作系统的移动设备提供开发人员组件和工具的主导供应商。从开发目前最畅销的最终用户应用程序开始,Resco 转向创建开发人员组件、库和工具,为开发公司提供设计专业、易于使用和舒适的界面。要了解有关 Resco 开发工具的更多信息,请单击此处。要了解有关 Resco 的更多信息,请单击此处。您可以在此处下载 Resco MobileForms Toolkit 的评估版。

© . All rights reserved.