怎样使用.NET RIA Services 创建 Silverlight Business Application(一)

HRApp 项目是.NET RIA Services MSDN  上的案例,一个使用Silverlight 3.0 + .Net RIA Service 构建的完整商业应用程序,

学习英文版的开发手册总是比较费力的,所以顺带着简略翻译一下,也有部分自己心得体会,不足之处还望大家多多交流。

1 安装

1. 卸载以前的版本

a. Microsoft Silverlight (任何Silverlight 3 RTW之前的版本)

b. Microsoft Silverlight SDK

c. Microsoft Silverlight Tools for Visual Studio 2008

2. 安装.NET Framework 3.5 SP1 和Visual Studio 2008 SP1 (带 SQL Express),参考:

http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx.

3. 顺序安装以下最新版本软件:

a. Silverlight 3

b. Silverlight 3 SDK

c. Silverlight 3 Tools for Visual Studio 2008 SP1

4.  .NET RIA Services July Preview

2 创建工程

clip_image002[4]

选择创建Silverlight Business Application ,会自动添加所需.net RIA引用,并生成一个Silverlight项目和一个web项目。其中的web项目已经集成了登录和注册功能模块。按F5运行查看演示。默认的注册功能需要确保本机已经安装SQLSERVER 2005 EXPRESS ,第一次运行会提示更改配置文件以启用客户端调试。

clip_image004[4]

2.1 创建界面

1. 打开客户端工程中的MainTest.xaml文件,找到下面的代码

<TextBlock x:Name="ApplicationNameTextBlock" Style="{StaticResource ApplicationNameStyle}" Text="Application Name"/>

替换为

<TextBlock x:Name="ApplicationNameTextBlock" Style="{StaticResource ApplicationNameStyle}" Text="HR Application"/>

2. 选择HRApp项目,右击添加 New File.

3. 弹出对话框,选择Page ,命名为EmployeeList.

clip_image006[4]

4. 打开 EmployeeList.xaml 在<Grid>标记下添加下面的代码。

Code

5. 在项目面板中将EmployeeList.xaml拖动到 Views 文件夹中.

6. 打开MainPage.xaml 找到Home 链接按钮并在旁边再添加如下按钮<!-- XAML -->

Code

7. 运行后如下图

clip_image008[4]

3 添加业务逻辑到 .NET RIA Services 工程

3.1 添加数据源

1. 将AdventureWorks_Data.mdfAdventureWorks_Log.ldf添加到App_Data目录下

2. 在web工程上右击添加新项ADO.NET Entity Data Model

3. 命名为 AdventureWorks.edmx。

clip_image010[4]

4. 在实体模型向导中, 选择generate the Model 后Next.

5. 选择 AdventureWorks 数据库 并设置实体集名称为 AdventureWorks_DataEntities.

clip_image012[4]

6. 为了简单起见,这里我们从所有表中选择Employee表作为实体模型. 设置命名空间为AdventureWorks_DataModel ,完成。

clip_image014[4]

7. 随后我们编译一下整个项目。

3.2 添加Domain Service Object and Query for Data

1. 在web工程上右击添加新建项(New Item)

2. 选择Web分类下, Domain Service Class,命名为OrganizationService。

clip_image016[4]

3. 在弹出的对话框中选择实体集中的Employee 表, 选中 Enable editingGenerate associated classes for metadataEnable Client Access 三个CheckBox。

clip_image018[4]

4. 从刚建的服务类中,我们可以看到,因为选中了Enabled Edit,所以VS为我们加入了增,删,改等功能接口。

5. 为了程序演示效果,我们让GetEmployee()返回已排序的对象列表。
将下面代码:

// C# 

public IQueryable<Employee> GetEmployee() 

    
return this.Context.Employee; 

替换为

// C# 
public IQueryable<Employee> GetEmployee() 

      
return this.Context.Employee.OrderBy(e => e.EmployeeID); 

6. 按F6, 我们编译一下整个项目。(因为只有在每次编译时,.net Service 才会将DomainContext和所有实体对象类自动生成到客户端工程中)

7. 打开 EmployeeList.xaml. 从工具箱拖动一个DataGrid控件xaml. 并放在TextBlock下方。并向客户端工程中手动添加System.Windows.Controls.Data引用,在xaml中添加

xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"


如果是在Blend 中则可以直接拖动,不用麻烦了。构建成如下这样一个DataGrid。

<data:DataGrid x:Name="dataGrid1" MinHeight="100" IsReadOnly="True"></data:DataGrid> 

8. 打开EmployeeList.xaml.cs后台代码,加入下面的命名空间引用。

// C# 
using HRApp.Web; 
using System.Windows.Ria.Data; 

9. 当客户端自动生成服务类代码后,可以看到OrganizationContext 已经可以被智能识别了。那么怎样载入服务器端的数据呢并绑定到DataGrid呢?只需简单的几行代码。

Code

10. 按F5 运行程序,点击EmployeeList 按钮,可以看到DataGrid和加载的数据.

clip_image020[4]

3.2.1 使用DomainDataSource控件

1. 在ASP.net中我们看到过LinqDataSource,在这里我们将添加一个新的控件DomainDataSource,其原理大致是一样的。

2. 首先在客户端工程中需要添加程序集引用,System.Windows.Ria.Controls.dll

3. 如果使用VS2005请如果没有请手动导入,在系统目录 ‘%ProgramFiles%\Microsoft SDKs\RIA Services\v1.0\Libraries\Silverlight’ 下 . clip_image022[4]

4. 如果使用Blend 3.0开发,只需要拖动,在VS2008中要手动写界面代码。

5. 在XAML文件中添加程序集引用

<!-- XAML -->

xmlns:ds="clr-namespace:HRApp.Web"

xmlns: riaControls ="clr-namespace:System.Windows.Controls;assembly=System.Windows.Ria.Controls"

6. 命名DomainDataSource 为employeeDataSource’ 并作如下设置

Code

7. 同时修改 DataGrid 代码:

<data:DataGrid Height="Auto" MinHeight="100" IsReadOnly="True" ItemsSource="{Binding Data, ElementName=employeeDataSource}" 
x:Name
="dataGrid1" /> 

8. 代开 EmployeeList.xaml.cs ,将代码如下全部注释。和LinqDataSource是不是很像?哈哈

Code

9. 可以运行程序了,看看数据是否显示?It’s Great e, No Code!

3.2.2 给数据源添加排序,过滤,分页功能

1. 向EmployeeList.xaml:中添加引用

xmlns:riaData="clr-namespace:System.Windows.Data;assembly=System.Windows.Ria.Controls" 

2. SortDescriptorsDomainDataSource提供的专门用于排序的接口属性. 可以提供针对某个属性列上的排序,PropertyPath是对应的对象属性。

Code

3. 运行程序即可看到EmployeeList按VacationHours 升序.

4. 下面看怎样使用过滤器.

Code

这里蓝色部分为过滤器提供了一个参数,这个参数值被绑定到一个TextBox控件的Text属性值。

Operator为一个FilterOperator枚举类型.RefreshEventName是使用Filter更新后的回调函数,这里我们让文本框在按下回车后就自动更新。

5. 运行程序,在“Min Vacation Hours Filter”旁的 TextBox中填入最小值,按回车。

clip_image024[4]

6. 下面我们给DataGrid 增加分页功能,从工具箱拖动一个 DataPager 控件EmployeeList.xaml.放在DataGrid的下面,

<data:DataPager PageSize="5" Source="{Binding Data, ElementName=employeeDataSource}" Margin="0,-1,0,0"></data:DataPager>

PageSize为页面大小,这里显示5行,并绑定数据。

7. 运行程序点击 employee list 链接. 嘿嘿,效果不错。clip_image026[6]

时间有限,今天就到译这里,下一篇将加入数据绑定及绑定验证。

原文地址:https://www.cnblogs.com/ysisl/p/1594213.html