演练:创建 Vision Clinic 应用程序

本演练演示在 Visual Studio LightSwitch 中创建应用程序的端到端过程。您将使用多种 LightSwitch 功能来创建虚构的视觉临床应用程序。该应用程序包括安排预约和创建发票的功能。

系统必备

下载 PrescriptionContoso 数据库。MSDN 代码库

步骤

  • 创建项目

    创建应用程序项目。

  • 定义表

    添加患者、发票、发票详细信息实体。

  • 创建选择列表

    创建值的列表。

  • 定义关系

    链接相关表。

  • 添加其他实体

    添加预约实体。

  • 创建屏幕

    创建屏幕以显示患者。

  • 运行应用程序

    运行该应用程序并输入数据。

  • 连接至数据库

    连接到外部数据库。

  • 对实体进行更改

    修改产品和产品退税实体。

  • 创建列表和详细信息屏幕

    创建屏幕以显示产品。

  • 更改屏幕布局

    修改产品列表屏幕上布局。

  • 运行时更改

    在运行的应用程序中进行更改。

  • 创建查询

    创建参数化的查询,并将其绑定到屏幕。

  • 添加计算的字段

    创建计算的字段,并将其添加到屏幕。

  • 创建跨数据库关系

    创建不同数据库中的实体之间的关系。

  • 创建发票屏幕

    创建屏幕以显示发票。

  • 修改发票屏幕

    更改正在运行的应用程序中的发票屏幕的布局。

  • 添加屏幕逻辑

    编写代码以计算日期。

  • 添加更多计算的字段

    创建更多计算的字段,并将其添加到发票屏幕。

  • 部署应用程序

    将该应用程序发布为 2 层桌面应用程序。

创建项目

创建 LightSwitch 应用程序的第一步是打开新项目。

创建项目

  1. 在 Windows **“启动”**菜单中单击 Visual Studio 2012。

    随即显示 LightSwitch 设计器。

  2. 在**“文件”菜单上,单击“新建项目”**。

    将打开**“新建项目”**对话框。

  3. 在**“已安装的模板”**列表中,选择 LightSwitch 节点。

  4. 在中央窗格中,选择 LightSwitch“应用程序 (VB)”LightSwitch应用程序 (C#)

  5. 在**“名称”字段,键入“Vision Clinic”,然后单击“确定”**。

    出现**“Vision Clinic 设计器”窗口,您的项目的必要文件夹将添加到“解决方案资源管理器”**窗口。

    Vision Clinic 项目

定义表

在 LightSwitch 中,表被称为“实体”;这些表会为数据所表示的对象建模,在这种情况下,该对象是患者。LightSwitch 应用程序使用“forms over data”模型,即窗体或屏幕,可显示来自一个或多个源的数据。LightSwitch 包括内部数据库,可以用来存储您的应用程序的数据。在接下来的步骤中,您将创建数据库表来存储的患者信息。

创建患者实体

  1. 在**“Vision Clinic 设计器”窗口中,单击“创建新表”**。

    数据设计器会出现,并且**“Table1Items”节点会出现在 Solution Explorer 中的“数据源”**下面。

  2. 在**“属性”窗口中,选择“名称”**属性并键入患者,然后按 Enter。

    **“数据设计器”标题栏中的名称会更改为“患者”,并且“在、解决方案资源管理器”**中的名称会更改为“多位患者”。

  3. 在**“名称”**列,单击 <Add property>,然后键入“FirstName”,然后按 Enter。

    请注意,相应的数据类型 String 会出现在**“类型”列,同时会选中“必需”**复选框。患者必须有一个姓名。

  4. 单击**“名称”**列中的 <添加属性>,然后键入“姓”。

  5. 单击**“名称”**列中的 <添加属性>,然后键入“街道”。

  6. 单击**“名称”**列中的 <添加属性>,然后键入“街道2”。

  7. 在**“必需”**列中,清除复选框。

    街道地址的第二行可以选择填写。

  8. 单击**“名称”**列中的 <添加属性>,然后键入“城市”。

  9. 单击**“名称”**列中的 <添加属性>,然后键入“省/州”。

  10. 单击**“名称”**列中的 <添加属性>,然后键入“邮政编码”。

  11. 单击**“名称”**列中的 <添加属性>,然后键入 PrimaryPhone。

  12. 在“类型”列中,从下拉列表中选择“PhoneNumber”。

    PhoneNumber 是表示用于输入和格式化电话号码的通用模式的“自定义业务类型”。

  13. 在**“必需”**列中,清除复选框。

  14. 单击**“名称”**列中的 <添加属性>,然后键入 SecondaryPhone。

  15. 在“类型”列中,从下拉列表中选择“PhoneNumber”。

  16. 在**“必需”**列中,清除复选框。

  17. 单击**“名称”**列中的 <添加字段>,然后键入“电子邮件”。

  18. 在“类型”列中,从下拉列表中选择“EmailAddress”。

    EmailAddress 是表示格式正确的电子邮件地址的另一种自定义业务类型。

  19. 在**“必需”**列中,清除复选框。

  20. 单击**“名称”**列中的 <添加属性>,然后键入 PolicyNumber。

  21. 在**“属性”窗口中,选择“最大长度”**属性并键入 12。

    这会防止用户输入与超过 12 个字符的保险单编号。

    Patient 实体

  22. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

下一步,您将再创建两个实体,表示发票和发票行项。

创建发票和 InvoiceDetail 实体

  1. 在**“解决方案资源管理器”**中,单击 Data Sources。在“项目”菜单上,单击“添加表格”。

    随即显示新的**“数据设计器”**实例。

  2. 在**“属性”窗口中,选择“名称”**属性。键入 Invoice,然后按“Enter”。

  3. 在**“名称”**列,单击 <Add property>。键入 InvoiceDate,然后按 Enter。

  4. 在**“类型”**列中,从下拉列表中选择 DateTime

  5. 在**“名称”**列,单击 <Add property>。键入 InvoiceDue,然后按 Enter。

  6. 在**“类型”**列中,从下拉列表中选择 DateTime

  7. 在**“必需”**列中,清除复选框。

  8. 在**“名称”**列,单击 <Add property>。键入 InvoiceStatus,然后按 Enter。

  9. 在**“类型”**列中,从下拉列表中选择 “整型”

  10. 在**“名称”**列,单击 <Add property>。键入 ShipDate,然后按 Enter。

  11. 在**“类型”**列中,从下拉列表中选择 DateTime

    Invoice 实体

  12. 在**“解决方案资源管理器”中,单击 Data Sources。在“项目”菜单上,单击“添加表格”**。

  13. 在**“属性”窗口中,选择“名称”**属性。键入 InvoiceDetail,然后按 Enter。

  14. 在**“名称”**列,单击 <Add property>,然后键入“Quantity”,然后按 Enter。

  15. 在**“类型”**列中,从下拉列表中选择 “整型”

  16. 单击**“名称”**列中的 <添加属性>,然后键入 UnitPrice。

  17. 在**“类型”**列中,从下拉列表中选择 Money

    Money 是表示格式正确的货币的另一种自定义业务类型。

    InvoiceDetails 实体

  18. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

创建选择列表

在接下来的步骤中,您将创建 Invoice 实体的“选择列表”。您可以使用选择列表向用户显示一组固定的值以供选择。

创建选择列表

  1. 在**“解决方案资源管理器”中双击“发票”**。

  2. 在**“数据设计器”中,选择“InvoiceStatus”**字段。

  3. 在**“属性”窗口中,单击“选择列表”**链接。

    “选择列表”对话框

    出现**“选择列表”**对话框。

  4. 在**“选择列表”对话框中,输入下面的值,然后单击“确定”**。

    显示名称

    0

    活动

    1

    已付

    2

    过期

    当屏幕上显示此字段时,该字段将向用户显示包含您输入的三个**“显示名称”**值的下拉列表。

  5. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

定义关系

在接下来的步骤中,您将定义**“患者”“发票”以及“InvoiceDetail”**实体之间的关系。

定义关系

  1. 在**“解决方案资源管理器”中双击“发票”**。

  2. 在**“数据设计器”工具栏上,单击“关系”**。

    将显示**“添加新关系”**对话框。

  3. 在**“添加新关系”对话框中,选择“姓名:”行中的“到”列。选择“患者”,然后单击“确定”**。

    在 Patient 和 Invoice 实体之间创建了一对多的关系;患者可以有多个发票。

  4. 在**“数据设计器”工具栏上,单击“关系”**。

    将显示**“添加新关系”**对话框。

  5. 在**“添加新关系”对话框中,选择“姓名:”行中的“到”列,然后选择“InvoiceDetail”**。

  6. 选择**“多重性:”行中的“从”列,然后选择“一个”**。

  7. 选择**“多重性:”行中的“到”列,然后选择“多个”,然后单击“确定”**。

    在 Invoice 和 InvoiceDetail 实体之间创建了一对多的关系;发票可以有多个发票的详细信息。

    Invoice 和 InvoiceDetail 之间的关系

  8. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

创建预约实体

在接下来的步骤中,您将再添加一个实体,以表示预约,然后添加关系和选择列表。

添加预约实体

  1. 在**“解决方案资源管理器”中,单击 Data Sources,然后在“项目”菜单上,单击“添加表”**。

  2. 在**“属性”窗口中,将“名称”**更改为预约。

  3. 在**“数据设计器”中,单击“名称”列中的“<添加属性>”**,然后键入 AppointmentTime。

  4. 在**“类型”**列中,从下拉列表中选择 DateTime

  5. 单击**“名称”**列中的 <添加属性>,然后键入 AppointmentType。

  6. 在**“类型”**列中,从下拉列表中选择 “短整型”

  7. 单击**“名称”**列中的 <添加属性>,然后键入 DoctorNotes。

  8. 接受默认的类型,“字符串”,并清除**“必需”**复选框。

  9. 在**“数据设计器”工具栏上,单击“关系”**。

  10. 在**“添加新关系”对话框中,选择“姓名:”行中的“到”列。选择“患者”,然后单击“确定”**。

    在 Patient 和 Appointment 实体之间创建了一对多的关系;患者可以有多个预约。

  11. 在**“数据设计器”**中,选择 AppointmentType 字段。

  12. 在**“属性”窗口中,单击“选择列表”**链接。

    出现**“选择列表”**对话框。

  13. 在**“选择列表”对话框中,输入下面的值,然后单击“确定”**。

    显示名称

    0

    年度

    1

    后续行动

    2

    紧急情况

    Appointment 实体

  14. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

创建屏幕

在接下来的步骤中,您将创建屏幕以显示患者列表。

创建屏幕

  1. 在**“解决方案资源管理器”中,单击“屏幕”节点,然后在“项目”菜单上,单击“添加屏幕”**。

    打开**“添加新屏幕”**对话框。

  2. 选择**“选择屏幕模板”列表中的“可编辑的网格屏幕”**。

  3. 在**“屏幕名称”**文本框中,键入 PatientList。

  4. 选择**“屏幕数据”下拉列表,然后选择“患者”。单击“确定”**。

    定义 PatientList 屏幕

    **“屏幕设计器”**将打开,并显示屏幕布局的层级结构。

  5. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

运行该应用程序并输入数据

您现在正在运行一个应用程序。在本接下来的步骤中,您将运行该应用程序,并输入一些数据。

运行应用程序

  1. F5 键启动该应用程序。

  2. 在正在运行的应用程序中,选择**“PatientList”屏幕,然后单击添加“+…**” 按钮。

    随即出现**“添加新患者”**对话框。

  3. 输入新患者的数据。在**“电子邮件”**字段,输入一个无效的值,例如 john#example.com。

    无效的电子邮件地址

    当您远离该字段时,将出现红色边框。EmailAddress 业务类型具有内置的验证规则,可以检测到格式不正确的电子邮件地址。

  4. 更正错误,完成该数据输入,然后单击**“确定”**。

    应用程序工具栏上的**“保存”**按钮现已启用。

  5. 单击添加 +… 按钮。添加第二个患者的数据,然后单击**“确定”**。

  6. 单击**“保存”**保存您的数据。

    您现在可以重新排列**“PatientList”**网格中的列,并可以对任何列进行排序。

  7. 单击运行应用程序右上角的**“关闭”**按钮,返回到设计模式。

  8. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

连接至数据库

在接下来的步骤中,您将连接到外部数据库,其中包含产品信息。

说明说明

在执行此步骤之前,您必须下载并安装 PrescriptionContoso 数据库。该数据库可以下载自 MSDN 代码库。按照 Install.htm 文件中的说明安装该数据库。

附加到数据源

  1. 在**“解决方案资源管理器”中,选择“数据源”**节点。

  2. 在**“项目”菜单上,单击“添加数据源”**。

    “附加数据源”向导将打开。

  3. 在“附加数据源”向导中,单击“数据库”,再单击“下一步”。

    随即出现**“选择数据源”**对话框。

    说明说明

    如果您之前已连接到 LightSwitch 中的数据库,则本对话框不会出现,您可以跳过下一步。

  4. 如果出现**“选择数据源”对话框,请单击“Microsoft SQL Server (SQL Client)”,然后单击“继续”**。

    随即出现**“连接属性”**对话框。

  5. 在**“连接属性”对话框中,输入下表中的值,然后单击“确定”**。

    字段

    服务器名称

    (localdb)\v11.0

    登录到服务器

    使用 Windows 身份验证

    选择或输入数据库名称

    C:\Temp\PrescriptionContoso.mdf

    连接属性

    随即显示**“选择数据库对象”**向导。

  6. 展开**“表”**节点。

  7. 选择**“产品”“ProductRebate”表,然后单击“完成”**。

    C_TEMP_PRESCRIPTIONCONTOSO_MDFData 数据源被添加到项目,并且为**“产品”“ProductRebates”**创建实体。

  8. 在**“解决方案资源管理器”中,右键单击“C_TEMP_PRESCRIPTIONCONTOSO_MDFData”,然后单击“重命名”**,键入 PrescriptionContoso

  9. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

修改产品和 ProductRebate 实体

在接下来的步骤中,您将对 ProductRebate 和产品实体进行一些更改。

修改 ProductRebate 和产品实体

  1. 在**“解决方案资源管理器”中,双击“ProductRebates”**节点。

  2. 选择**“退税”字段,并将“类型P”更改为“钱”**。

  3. 在**“解决方案资源管理器”中,双击“产品”**节点。

  4. 在**“数据设计器”中,选择“MSRP”字段,并将“类型”更改为“钱”**。

  5. 选择**“ProductImage”字段,并将“类型”更改为“图像”**。

  6. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

创建列表和详细信息屏幕

在接下来的步骤中,您将创建屏幕以显示产品信息。

创建列表和详细信息屏幕

  1. 在“解决方案资源管理器”中选择“屏幕”节点。在“项目”菜单上,单击“添加屏幕”。

  2. 在**“添加新屏幕”对话框中,选择“选择屏幕模板”列表中的“列表和详细信息屏幕”**。

  3. 在**“屏幕名称”**字段中键入 ProductList。

  4. 选择**“屏幕数据”下拉列表,并选择“PrescriptionContoso.Products”**。

  5. 在**“要包括的其他数据”列表中,选择“产品详细信息”“产品 ProductRebates”复选框,然后单击“确定”**。

更改屏幕布局

在下一步中,您将更改**“ProductList”**屏幕的布局。

自定义布局

  1. 在**“屏幕设计器”中,选择“屏幕内容树”中的“行布局|产品详细信息”**节点。

  2. 在**“行布局”下拉列表中,选择“图片和文本”**。

  3. 从**“图片和文本”**节点下面的每个字段的下拉列表中选择下列值:

    字段

    (图片)

    产品图像

    (标题)

    产品名称

    (副标题)

    MSRP

    (说明)

    描述

    图片和文本布局

  4. F5 运行应用程序并查看结果。

  5. 在正在运行的应用程序中,单击**“ProductList”**菜单,以显示该屏幕。

    保持应用程序打开。在接下来的步骤中,您将在运行的应用程序中进行更改。

在正在运行的应用程序中进行更改

在接下来的步骤中,您将在应用程序运行时修改**“产品列表”**屏幕。

自定义在运行时的屏幕

  1. 产品列表 屏幕上,单击在右下角的 设计屏幕 按钮。

  2. 在左侧窗格中,选择**“数据网格|产品退税”**节点。

  3. 在**“属性”窗口中,将“显示名称”**属性更改为“Contoso 退税”。

    名称也会在应用程序窗口中更改。

  4. 选择**“MSRP”字段,然后将“说明”**属性更改为退税前的建议价格。

    设计时自定义

  5. 单击**“保存”**按钮,以返回到正在运行的应用程序并查看所做的更改。悬停在 MSRP 字段上可查看说明。

  6. 单击运行应用程序右上角的**“关闭”**按钮,返回到设计模式。

  7. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

创建查询

在接下来的步骤中,您将创建参数化的查询,并将其绑定到屏幕。

创建参数化查询

  1. 在“解决方案资源管理器”中选择“产品”节点。在“项目”菜单上,单击“添加查询”。

    显示**“查询设计器”**。

  2. 在**“属性”窗口中,选择“名称”**字段,并键入 RelatedProducts。

  3. 在**“查询设计器”中,单击“添加筛选器”**。

    筛选器条件被添加到**“过滤器”**部分。

  4. 在第二个下拉列表中,选择**“类型”**。

  5. 在第四个下拉列表中,选择**“参数”**。

  6. 在第五个下拉列表中,单击**“添加新建”**。

    新的 Parameter,名为 Category,类型为 String,将被添加到**“参数”**部分。

    RelatedProducts 查询

  7. 在**“解决方案资源管理器”中,双击“ProductList”节点,以打开“屏幕设计器”**。

  8. 在**“屏幕设计器”工具栏中,单击“添加数据项”**。

    此时将出现“添加数据项”对话框。

  9. 在**“添加数据项”对话框中,单击“查询”。在“名称”列中,选择PrescriptionContoso.RelatedProducts**,然后单击**“确定”**。

    RelatedProducts 节点将出现在左侧窗格。

  10. 在**“查询参数”下,选择“类别”**节点。

  11. 在**“属性”窗口中,选择“参数绑定”**属性,并键入 Products.SelectedItem.Category。

  12. 在中心窗格中,展开**“DataGrid|Contoso 退税”节点下面的“添加”节点,然后单击“相关产品”**。

    添加相关产品

  13. F5 运行应用程序并查看结果。

    打开**“产品列表”**屏幕,并请注意,相关产品列表会显示每个选定的产品。

  14. 单击运行应用程序右上角的**“关闭”**按钮,返回到设计模式。

  15. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

添加计算的字段

在接下来的步骤中,您将添加使用计算所得的值的字段。应用退税额后的计算的值将作为产品的价格。

添加计算的字段

  1. 在**“解决方案资源管理器”中,双击“产品”**实体节点。

  2. 在**“数据设计器”中,单击“<添加属性>”。键入 CurrentPrice,然后单击“选项卡”**。

  3. 在**“类型”**列中,从下拉列表中选择 Money

    在**“属性”窗口中,默认将选择“常规”下的“计算”**属性。

  4. 在**“属性”窗口中,单击“编辑方法”**链接。

    **“代码编辑器”**将出现,并显示 CurrentPrice_Compute 方法。

  5. 将以下代码添加到事件处理程序中:

    Dim rebates As Decimal
        For Each item In ProductRebates
            If item.RebateStart <= Date.Today And item.RebateEnd >= Date.Today Then
                rebates = rebates + item.Rebate
            End If
        Next
    
        result = Me.MSRP - rebates
    
    decimal rebates = default(decimal);
    
    
                foreach (var item in ProductRebates)
                {
                    if (item.RebateStart <= System.DateTime.Today && item.RebateEnd >= System.DateTime.Today)
                    {
                        rebates += item.Rebate.Value;
                    }
                }
    
                result = this.MSRP - rebates;
    

    用于计算当前价格的代码

  6. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

在接下来的步骤中,您要将计算的字段添加到产品列表屏幕。

将计算的字段添加到屏幕

  1. 在**“解决方案资源管理器”中,双击“ProductList”**屏幕节点。

  2. 在**“屏幕设计器”的左窗格中,选择“现价”节点,并将其拖到中心窗格中“(说明)|说明”**节点下方。

    拖放后的当前价格

  3. F5 运行应用程序并查看结果。

  4. 在**“ProductList”屏幕中,编辑“退税”“MSRP”字段。CurrentPrice 是重新计算。单击“关闭”**按钮,以返回到设计模式。

  5. 单击运行应用程序右上角的**“关闭”**按钮,返回到设计模式。

  6. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

创建跨数据库关系

在接下来的步骤中,您将创建在两个不同的数据库中的实体之间的虚拟关系,并在一个列表和详细信息屏幕中显示来自两个不同源的数据。

创建跨数据库关系

  1. 在**“解决方案资源管理器”中,双击“InvoiceDetails”**实体节点。

  2. 在**“数据设计器”中,单击“关系”**工具栏按钮。

  3. 在**“添加新关系”对话框中,选择“到”列中的“名称”字段,然后选择“产品”**。

    新的部分将出现在该对话框的底部。它会显示两个实体中的相关字段。如有必要,可以将相关字段更改为具有相同数据类型的另一个字段,或者将多个相关字段定义为键。

    跨数据库关系

  4. 单击**“确定”**保存该关系。

    新的关系在设计器中显示为虚线。这表明实体位于不同的数据源,在这种情况下,为内部数据库的 InvoiceDetails 和 PrescriptionContoso 数据库的 Products。

  5. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

创建屏幕以显示发票

在接下来的步骤中,您将创建新的屏幕以显示发票。

创建屏幕

  1. 在**“解决方案资源管理器”中选择“屏幕”**节点。在“项目”菜单上,单击“添加屏幕”。

  2. 在**“添加新屏幕”对话框中,选择“选择屏幕模板”列表中的“列表和详细信息屏幕”**。

  3. 在**“偶们名称”**文本框中,键入 InvoiceScreen。

  4. 选择**“屏幕数据”下拉列表,然后选择“发票”**。

  5. 在**“要包括的其他数据:”列表中,选择“发票详细信息”“发票 InvoiceDetails”,然后单击“确定”**。

    InvoiceScreen 布局

  6. 展开**“数据网格行|发票详细信息”节点。选择“产品 ID”**节点并将其删除。

  7. 若要对字段重新排序,单击**“单价”节点,并将其拖到“产品”**节点下方。

  8. F5 运行应用程序。在**“”菜单中,单击“发票屏幕”**,以显示该屏幕。

  9. 在**“发票”**窗格中,单击添加 +… 按钮。

    输入一些发票数据。请注意**“InvoiceStatus”字段如何提供下拉列表中的值,以及“患者”**字段如何包含打开具有患者列表的对话框的按钮。

  10. 在**“发票详细信息”窗格,单击添加“+…”**按钮。

    输入一些发票明细数据。请注意**“产品”**字段如何提供 PrescriptionContoso 数据库下拉列表中的产品。

  11. 单击**“全部”**按钮,以保存您的发票数据。

  12. 保持应用程序打开。在接下来的步骤中,您将在运行的应用程序中进行更改。

修改发票屏幕

在接下来的步骤中,您将对正在运行的应用程序中的发票屏幕进行一些更改。

在正在运行的应用程序中修改屏幕

  1. 在**“发票屏幕”屏幕中,单击右上角的“设计屏幕”**按钮。

  2. 在左侧窗格中,选择**“列表|发票”节点。从“列表”**下拉列表中选择 DataGrid

  3. 选择**“患者”节点。使用左边距中的“上移”箭头,将其移到“发票日期”**节点上方。

    自定义的“发票”屏幕

  4. 单击**“保存”**,以返回到正在运行的应用程序并查看所做的更改。

  5. 单击运行应用程序右上角的**“关闭”**按钮,返回到设计模式。

  6. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

定义屏幕逻辑

在接下来的步骤中,您将添加代码以定义发票日期的默认逻辑。

定义屏幕逻辑

  1. 在**“解决方案资源管理器”中,双击“发票”**实体节点。

  2. 在**“数据设计器”中,单击工具栏上的“编写代码”**下拉列表。单击 Invoice_Created 链接。

    **“代码编辑器”**将打开,并显示 Invoice_Created 方法。

  3. 在 Invoice_Created 方法中,添加以下代码,以设置数据的默认行为:

    InvoiceDate = Date.Today
    InvoiceDue = Date.Today.AddDays(30)
    ShipDate = Date.Today.AddDays(3)
    
    InvoiceDate = System.DateTime.Today;
    InvoiceDue = System.DateTime.Today.AddDays(30);
    ShipDate = System.DateTime.Today.AddDays(3);
    
  4. 在**“解决方案资源管理器”中,双击“发票”**实体节点。

  5. 在**“数据设计器”**中,选择 InvoiceDate 字段。

  6. 单击工具栏上的**“编写代码”**下拉列表,然后单击 InvoiceDate_Changed 链接

  7. 在 InvoiceDate_Changed 方法中,添加以下代码以在 InvoiceDate 更改时,更新日期:

    InvoiceDue = InvoiceDate.AddDays(30)
    ‘ If the ShipDate is earlier than the new InvoiceDate, update it.
    If ShipDate < InvoiceDate Then
        ShipDate = InvoiceDate.AddDays(2)
    End If
    
    InvoiceDue = InvoiceDate.AddDays(30); 
        // If the ShipDate is earlier than the new InvoiceDate, update it
    if (ShipDate < InvoiceDate)
        {
            ShipDate = InvoiceDate.AddDays(2);
        }
    
  8. 在**“解决方案资源管理器”中,双击“InvoiceDetails”**节点。

  9. 在**“数据设计器”中,选择“产品”字段,单击工具栏上的“编写代码”下拉列表,然后单击“Product_Changed”**链接。

  10. 在**“代码编辑器”**中,添加以下代码以设置单位价格和默认的数量:

    UnitPrice = Product.CurrentPrice
    Quantity = 1
    
    UnitPrice = Product.CurrentPrice;
    
    Quantity = 1;
    
  11. 按**“F5”**,以运行该应用程序并窗口所做的更改。

    打开**“发票”**屏幕并添加新的发票。日期字段、价格和数量此时会自动更新。

  12. 单击**“全部”**按钮,以保存您的更改。

  13. 单击运行应用程序右上角的**“关闭”**按钮,返回到设计模式。

  14. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

添加更多计算的字段

在接下来的步骤中,您将小计、税款和总计的计算的字段添加到**“InvoiceDetails”“发票”**实体。

添加计算的字段

  1. 在**“解决方案资源管理器”中,双击“InvoiceDetails”**实体节点。

  2. 在**“数据设计器”中,单击“<添加属性>”。键入小计,然后单击“选项卡”**。

  3. 在**“类型”**列中,从下拉列表中选择 Money

  4. 在**“属性”窗口中,选择“常规属性”下的“IsComputed”**复选框。

  5. 单击**“编辑方法”**链接。

    **“代码编辑器”**将出现,并显示 SubTotal_Compute 方法。

  6. 添加下面的代码以计算 SubTotal:

    result = Quantity * UnitPrice
    
    result = Quantity * UnitPrice;
    
  7. 在**“解决方案资源管理器”中,双击“发票”**实体节点。

  8. 在**“数据设计器”中,单击“<添加属性>”。键入税,然后单击“选项卡”**。

  9. 在**“类型”**列中,从下拉列表中选择 Money

  10. 在**“属性”窗口中,选择“IsComputed”**复选框。

  11. 单击**“编辑方法”**链接。

    **“代码编辑器”**将打开,并显示 Tax_Compute 方法。

  12. 使用以下代码替换 Tax_Compute 方法,以计算 Tax:

    Private Sub Tax_Compute(ByRef result As Decimal)
        Result =  GetSubTotal() * 0.095
    End Sub
    Protected Function GetSubTotal() As Decimal
        GetSubtotal = 0
        For Each item In InvoiceDetails
            GetSubTotal = GetSubTotal + item.SubTotal
        Next
    End Function
    
    partial void Tax_Compute(ref decimal result)
        {
            result = GetSubTotal() * (decimal)0.095;
        }
    protected decimal GetSubTotal()
        {
            return this.InvoiceDetails.Sum(i => i.SubTotal);
        }
    
  13. 在**“解决方案资源管理器”中,双击“发票”**实体节点。

  14. 在**“数据设计器”中,单击“<添加属性>”。键入总计,然后单击“选项卡”**。

  15. 在**“类型”**列中,从下拉列表中选择 Money

  16. 在**“属性”窗口中,选择“IsComputed”**复选框。

  17. 单击**“编辑方法”**链接。

    **“代码编辑器”**将打开,并显示 Total_Compute 方法。

  18. 添加下面的代码以计算 Tax:

    result = GetSubTotal() + Tax
    
    result = GetSubTotal() + Tax;
    
  19. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

在接下来的步骤中,您要将新字段添加到**“发票”**屏幕。

将字段添加到屏幕

  1. 在**“解决方案资源管理器”中,双击“InvoiceScreen”**屏幕节点。

  2. 在中央窗格中,选择并展开**“行布局|发票详细信息”**节点。

  3. 选择并展开**“添加”下拉列表,然后选择“税”**。

    **“税”字段将被添加到“垂直堆叠| InvoiceDetails”**部分。

  4. 再次选择**“添加”下拉列表,并选择“总计”**字段。

  5. F5 运行应用程序并查看结果。

    打开**“发票屏幕”屏幕。此时,每个发票都会显示“税”“总计”**字段。

  6. 单击**“设计屏幕”**按钮,以更改为自定义模式。

  7. 在左侧窗格中,选择**“数据网格行|发票详细信息”**节点并将其展开。

  8. 单击**“添加”**下拉菜单,再选择 SubTotal

  9. 单击**“保存”保存此更改。“小计”字段此时会显示在“发票详细信息”**网格中。

    更新的“发票”屏幕

  10. 单击运行应用程序右上角的**“关闭”**按钮,返回到设计模式。

  11. 在**“文件”菜单上,单击“全部保存”**以保存所做的工作。

部署应用程序

在接下来的步骤中,您要将该应用程序部署为 2 层的桌面应用程序。

发布 2 层桌面应用程序

  1. 在**“解决方案资源管理器”中,选择“Vision Clinic”节点,然后在“生成”菜单上,单击“发布 Vision Clinic”**。

    随即显示**“LightSwitch 发布应用程序向导”**。

  2. 在**“欢迎使用 LightSwitch 发布向导”也,验证“桌面”是否已选中,然后单击“下一步”**。

  3. 在**“应用程序服务”页上,验证“本地”是否已选中,然后单击“下一步”**。

  4. 在**“指定发布首选项”页,选择“您要将应用程序文件放在哪里?”**字段,并键入 C:\Publish。

  5. 在**“您想要如何发布默认数据库?”部分,单击“现在直接发布到数据库”,然后单击“下一步”**。

  6. 在**“LightSwitch 应用程序数据库 - SQL 数据库连接”页上,接受默认连接字符串值,然后单击“下一步”**。

  7. 在“安装系统必备组件”页上,接受默认设置,然后单击“下一步”。

  8. 在**“其他连接信息”页上,接受默认设置,然后单击“发布”**。

  9. 在**“文件资源管理器”**中,查找 C:\Publish 目录并双击 Setup.exe 文件将应用程序安装到本地计算机上。

    说明说明

    若要在不同的计算机上安装该应用程序,请复制发布文件夹及其所有子文件夹的内容。在安装之前,您必须完成在 Install.htm 文件中列出的步骤,这些步骤可以在发布文件夹中找到。

  10. 如果**“应用程序安装 - 安全警告”** 对话框出现,则单击**“安装”**。

    Vision Clinic 应用程序将安装并启动。

    完成的应用程序

  11. 输入一些数据,并验证该应用程序是否按预期方式工作。

    提示提示

    如果您要再次运行 Vision Clinic 应用程序,可以从“开始”菜单打开它。

这就完成了 Vision Clinic 应用程序的演练。现在,您应该对创建 LightSwitch 应用程序的端对端过程有了一个基本了解。

本演练演示了 LightSwitch 的基本功能,但您还可以使用 LightSwitch 完成更多工作。当您开始构建自己的应用程序时,您可以了解产品文档中的更多功能。

请参见

概念

LightSwitch 指导教程

Visual Studio LightSwitch

其他资源

LightSwitch 入门