Silverlight WCF RIA服务(二十七)Silverlight 客户端 8
演練:在Silverlight商業應用程序中顯示數據
在本演示中,我們將創建一個顯示數據的Silverlight商業應用程序。Visual Studio提供了幾個設計時工具來幫助我們創建SL商業應用程序。這個演練將展現如何使用DataSources窗口在RIA中創建與數據一起工作的用戶界面。
演示將會滿足下面的任務:
1. 創建SL商業應用程序,它包含SL客戶端和ASP.NET Web應用兩個項目。
2. 通過更改應用程序名字來修改應用程序資源,它存貯為資源字符。
3. 創建一個AdventureWorksClassLibrary示例數據庫的實體數據模型。
4. 創建一個向客戶端公開實體數據模型中數據的域服務。
5. 在域服務中添加和修改自定義查詢。
6. 創建額外的SL頁面來向用戶顯示數據。
7. 在默認的導航欄中添加按鈕來訪問SL中的頁面。
8. 通過從Data Sources窗口向Silverlight設計器中拖拽條目來配置SL頁面顯示數據。
9. 排序和分頁數據。
10. 配置用戶界面來接受查詢參數。
這個演練是在VS2010中進行的,如果是其他版本會有不同。
創建SL商業應用程序
1. 打開文件->新建->項目
2. 展開Visual c#或Visual Basic,并選擇Silverlight。
3. 選擇Silverlight Business Application
4. 在名字文本框內,輸入AdventureWorksApp并點擊OK。
這個解決方案包含兩個項目:一個AdventureWorksApp客戶端項目和一個AdventureWorksApp.Web Web應用項目。
命名和測試應用程序
Silverlight Business Application有內置功能。默認的,它有一個主頁,一個關于頁,一個導航欄,以及注冊功能。提供了一個資源字符來作為默認的應用程序名字,我們可以更改它。
1. 在客戶端解決方案資源管理器中,展開Resources文件夾。(VS2008中打開Assets文件夾下的Resources文件夾)
2. 雙擊ApplicationStrings.resx,打開資源編輯器。
3. 把資源字符串ApplicationName的值改為Adventure Works Application.
4. 保存并關閉ApplicationStrings.resx文件。
5. 運行應用程序。
主頁會打開并顯示默認的設計,包括已經更改過的應用程序名稱。
為應用程序創建一個數據模型
1. 在解決方案資源管理器中,右鍵點擊AdventureWorksApp.Web,并添加一個新項。
2. 在"添加新項"對話框中,選擇ADO.NET Entity Data Model項。
3. 命名為AdventureWorksEDM.edmx,然后點擊添加。實體數據模型向導會打開。
4. 在"選擇模型內容"的頁面上,點擊"從數據庫生成",然后點擊"下一步"。
5. 在"選擇數據連接"的頁面上,選擇或創建對AdventureWorks數據庫的鏈接。
6. 確保選擇了"Save entity connection settings in Web.Config as"選項,然后點擊"下一步"。
7. 在"選擇數據庫對象"的頁面上,重新命名模型命名空間Model為AdventureWorksDataModel。
8. 展開"表"節點,選擇Customer表。
9. 點擊"完成"。
10. 生成解決方案。
創建域服務
一個域服務會把數據模型中的數據實體和操作公開給客戶端。它是添加在服務端項目中的。
1. 在"解決方案資源管理器"中,右鍵點擊AdventureWorksApp.Web,并添加一個新項。
2. 在"添加新項"對話框中,選擇"Domain Service Class"。
3. 命名為AdventureWorksService。
4. 點擊"添加"。 "添加新項"對話框出現。
5. 選擇下面的復選框:
. Enable client access
. Customer 和 Enable editing
. Generate associated classes for metadata.
6. 點擊OK
7. 生成解決方案。
更改域服務的查詢
域服務提供默認的操作,我們應該為我們特定的應用而修改它們。這個演練中,我們更改默認的查詢,來返回按CustomerID排序的客戶。
1. 在"解決方案資源管理器"中,雙擊AdventureWorksSercice.cs或AdventureWorksService.vb.
2. 更改GetCustomers方法,如下:
?
| 1 2 3 4 5 6 | public?IQueryable<CUSTOMER> GetCustomer() ????????{ ????????????return?this.ObjectContext.Customer.OrderBy(c=>c.CustomerID); ????????} |
3. 生成解決方案。
創建Silverlight頁面來顯示數據
從Customer表返回的數據顯示在自己的頁面上,不顯示在應用程序的首頁上。
1. 在"解決方案資源管理器"中,右鍵點擊客戶端項目中的Views文件夾,并添加新項。
2. 在"添加新項"對話框中,選擇Silverlight Page項。
3. 更改名字為CustomerList.xaml,并點擊"添加"。
4. 從工具欄拖拽一個TextBlock放在CustomerList.xaml頁面的頂部。
5. 把Text屬性改為Customer List。
6. 保存CustomerList.xaml頁面。
在首頁上添加導航按鈕
我們在應用程序的首頁上添加一個導航到CustomerList頁面的按鈕。
1. 在"解決方案資源管理器"中,雙擊MainPage.xaml.
2. 在XAML視圖里,在行下面添加如下代碼:
?
| 1 2 3 4 5 | <RECTANGLE x:Name="Divider3"?/> <HYPERLINKBUTTON x:Name="Link3"?<br Content="Customers"?/>NavigateUri="/CustomerList"TargetName="ContentFrame"/> |
3. 運行應用程序,確認Customers按鈕顯示在導航欄上,并點擊的時候顯示CustomerList頁面。
在CustomerList頁面上顯示客戶數據
在DataGrid中顯示客戶數據。下面,我們就創建和配置一個DataGrid來顯示客戶數據,需要從Data Sources窗口拖拽一個Customer實體到設計窗口內。
1. 雙擊CustomerList.xaml。
2. 打開Data Sources窗口。可以在Data菜單中,選擇Show Data Sources。注意Data Sources窗口已經包含了可用的實體。
3. 從Data Sources窗口中把Customer節點拖到設計器中,在TextBlock下面。
4. 運行應用程序并點擊導航欄上的Customers按鈕。
5. 核實在CustomerList頁面上顯示了Customer數據。
(我在VS2008中使用Data source有問題,生成不了數據節點。好像在Silverlight3中沒有了ComponentModel.dll,所以直接使用域上下文來查詢數據)
在域服務中添加自定義查詢
1. 雙擊AdventureWorksService.cs。
2. 在類中添加如下代碼:
?
| 1 2 3 4 5 6 7 8 9 10 11 | public?IQueryable<CUSTOMER> GetCustomersByTitle() { ???return?this.ObjectContext.Customer.Where(c => c.Title ==?"Mr.").OrderBy(c => c.CustomerID); } public?IQueryable<CUSTOMER> GetCustomersByLastName(string?lastName) { ??return?this.ObjectContext.Customer.Where(c => c.LastName==lastName).OrderBy(c=>c.CustomerID); } |
3. 生成解決方案。
顯示自定義查詢返回的數據
1. 雙擊CustomerList.xaml。
2. 在"數據源"窗口,選擇Customer并點擊下拉菜單。
3. 在查詢列表中選擇GetCustomersByTitle。
4. 把Customer節點拖拽到已經存在于設計器中的DataGrid。
5. 運行應用程序,并驗證只有Title等于Mr.的顧客顯示在頁面上。
添加排序功能
VS2008中實現如下:
1. 雙擊CustomerList.xaml。
2. 在XAML視圖中,在DomainDataSource控件中,添加SortDescriptors。
3. 設置PropertyPath屬性為"LastName"。設置Direction屬性為Ascending。
4. 運行應用程序,注意到顧客數據已經按LastName排序了。
添加分頁功能
VS2008中實現如下:
1. 雙擊CustomerList.xaml。
2. 在XAML視圖中,在DomainDataSource控件中,添加PageSize屬性,并設置為15.添加LoadSize屬性,并設置為30.
3. 添加DataPager控件。
?
| 1 2 3 | <?xml:namespace?prefix = data ns =?"http://www.google.com/2005/gml/data"?/><data:DataPager Source="{Binding Data, ElementName=source}"></data:DataPager> |
4. 運行應用程序,注意到頁面裝載的速度已經大大加快了。并且可以通過DataPager控件瀏覽數據。
創建一個頁面來根據LastName進行查詢
1. 在AdventureWorksApp中的Views文件夾下,添加新項。
2. 在"添加新項"對話框中,選擇Silverlight Page項。
3. 命名為CustomerSearchByLastName.xaml,并點擊"添加"。
4. 保存這個頁面。
在首頁中添加一個導航按鈕
1. 雙擊MainPage.xaml。
2. 在XAML視圖中,在Link3的HyperlinkButton下面添加如下代碼。
?
| 1 2 3 4 5 | <RECTANGLE x:Name="Divider4"?/> <HYPERLINKBUTTON x:Name="Link4"?Content="Customer Search"?TargetName="ContentFrame"NavigateUri="/CustomerSearchByLastName"?/> |
創建用戶界面來運行GetCustomerByLastName查詢
VS2008中實現如下:
1. 雙擊CustomerSearchByLastName.xaml
2. 添加命名空間引用
?
| 1 2 3 4 5 6 | xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Ria" xmlns:riaData="clr-namespace:System.Windows.Data;assembly=System.Windows.Controls.Ria" xmlns:domain ="clr-namespace:AdventureWorksApp.Web" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" |
3. 然后在Grid中添加數據源、DataGrid、文本框和按鈕(實際代碼中不需SL:前綴),如下代碼:
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <GRID x:Name="LayoutRoot"> <RIACONTROLS:DOMAINDATASOURCE x:Name="source"?LoadSize="30"?PageSize="15"?AutoLoad="True"QueryName="GetCustomersByLastName"> ????????????<RIACONTROLS:DOMAINDATASOURCE.DOMAINCONTEXT> ????????????????<DOMAIN:ADVENTUREWORKSCONTEXT /> ????????????</RIACONTROLS:DOMAINDATASOURCE.DOMAINCONTEXT> ????????????<RIACONTROLS:DOMAINDATASOURCE.QUERYPARAMETERS> ????????????????<RIACONTROLS:CONTROLPARAMETER RefreshEventName="LostFocus"PropertyName="Text"?ControlName="lastName"?ParameterName="lastName"?/> ????????????</RIACONTROLS:DOMAINDATASOURCE.QUERYPARAMETERS> ????????</RIACONTROLS:DOMAINDATASOURCE> ????????<STACKPANEL> ????????????<TEXTBLOCK Text="Customer Searched By LastName List"?/> ????????????<SL:TEXTBOX x:Name="lastName"?HorizontalAlignment="Left"?Width="200"?/> ????????????<SL:BUTTON Content="Load"?HorizontalAlignment="Left"?Width="50"?/> ????????????<DATAC:DATAGRID ItemsSource="{Binding Data, ElementName=source}"> ????????????</DATAC:DATAGRID> ????????</STACKPANEL> ?</GRID> |
測試應用程序
1. 生成解決方案。
2. 運行應用程序。
3. 點擊"Customer Search"。
4. 在文本框中輸入想要查詢的LastName,例如"liu"。
5. 點擊Load按鈕。
6. 將會顯示名為"liu"的客戶。
轉載于:https://www.cnblogs.com/Areas/archive/2011/09/09/2172190.html
總結
以上是生活随笔為你收集整理的Silverlight WCF RIA服务(二十七)Silverlight 客户端 8的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++重载一些需要注意的地方
- 下一篇: 【转】好的学习方法