Silverlight WCF RIA服务(二十七)Silverlight 客户端 8
演練:在Silverlight商業(yè)應(yīng)用程序中顯示數(shù)據(jù)
在本演示中,我們將創(chuàng)建一個(gè)顯示數(shù)據(jù)的Silverlight商業(yè)應(yīng)用程序。Visual Studio提供了幾個(gè)設(shè)計(jì)時(shí)工具來幫助我們創(chuàng)建SL商業(yè)應(yīng)用程序。這個(gè)演練將展現(xiàn)如何使用DataSources窗口在RIA中創(chuàng)建與數(shù)據(jù)一起工作的用戶界面。
演示將會(huì)滿足下面的任務(wù):
1. 創(chuàng)建SL商業(yè)應(yīng)用程序,它包含SL客戶端和ASP.NET Web應(yīng)用兩個(gè)項(xiàng)目。
2. 通過更改應(yīng)用程序名字來修改應(yīng)用程序資源,它存貯為資源字符。
3. 創(chuàng)建一個(gè)AdventureWorksClassLibrary示例數(shù)據(jù)庫的實(shí)體數(shù)據(jù)模型。
4. 創(chuàng)建一個(gè)向客戶端公開實(shí)體數(shù)據(jù)模型中數(shù)據(jù)的域服務(wù)。
5. 在域服務(wù)中添加和修改自定義查詢。
6. 創(chuàng)建額外的SL頁面來向用戶顯示數(shù)據(jù)。
7. 在默認(rèn)的導(dǎo)航欄中添加按鈕來訪問SL中的頁面。
8. 通過從Data Sources窗口向Silverlight設(shè)計(jì)器中拖拽條目來配置SL頁面顯示數(shù)據(jù)。
9. 排序和分頁數(shù)據(jù)。
10. 配置用戶界面來接受查詢參數(shù)。
這個(gè)演練是在VS2010中進(jìn)行的,如果是其他版本會(huì)有不同。
創(chuàng)建SL商業(yè)應(yīng)用程序
1. 打開文件->新建->項(xiàng)目
2. 展開Visual c#或Visual Basic,并選擇Silverlight。
3. 選擇Silverlight Business Application
4. 在名字文本框內(nèi),輸入AdventureWorksApp并點(diǎn)擊OK。
這個(gè)解決方案包含兩個(gè)項(xiàng)目:一個(gè)AdventureWorksApp客戶端項(xiàng)目和一個(gè)AdventureWorksApp.Web Web應(yīng)用項(xiàng)目。
命名和測(cè)試應(yīng)用程序
Silverlight Business Application有內(nèi)置功能。默認(rèn)的,它有一個(gè)主頁,一個(gè)關(guān)于頁,一個(gè)導(dǎo)航欄,以及注冊(cè)功能。提供了一個(gè)資源字符來作為默認(rèn)的應(yīng)用程序名字,我們可以更改它。
1. 在客戶端解決方案資源管理器中,展開Resources文件夾。(VS2008中打開Assets文件夾下的Resources文件夾)
2. 雙擊ApplicationStrings.resx,打開資源編輯器。
3. 把資源字符串ApplicationName的值改為Adventure Works Application.
4. 保存并關(guān)閉ApplicationStrings.resx文件。
5. 運(yùn)行應(yīng)用程序。
主頁會(huì)打開并顯示默認(rèn)的設(shè)計(jì),包括已經(jīng)更改過的應(yīng)用程序名稱。
為應(yīng)用程序創(chuàng)建一個(gè)數(shù)據(jù)模型
1. 在解決方案資源管理器中,右鍵點(diǎn)擊AdventureWorksApp.Web,并添加一個(gè)新項(xiàng)。
2. 在"添加新項(xiàng)"對(duì)話框中,選擇ADO.NET Entity Data Model項(xiàng)。
3. 命名為AdventureWorksEDM.edmx,然后點(diǎn)擊添加。實(shí)體數(shù)據(jù)模型向?qū)?huì)打開。
4. 在"選擇模型內(nèi)容"的頁面上,點(diǎn)擊"從數(shù)據(jù)庫生成",然后點(diǎn)擊"下一步"。
5. 在"選擇數(shù)據(jù)連接"的頁面上,選擇或創(chuàng)建對(duì)AdventureWorks數(shù)據(jù)庫的鏈接。
6. 確保選擇了"Save entity connection settings in Web.Config as"選項(xiàng),然后點(diǎn)擊"下一步"。
7. 在"選擇數(shù)據(jù)庫對(duì)象"的頁面上,重新命名模型命名空間Model為AdventureWorksDataModel。
8. 展開"表"節(jié)點(diǎn),選擇Customer表。
9. 點(diǎn)擊"完成"。
10. 生成解決方案。
創(chuàng)建域服務(wù)
一個(gè)域服務(wù)會(huì)把數(shù)據(jù)模型中的數(shù)據(jù)實(shí)體和操作公開給客戶端。它是添加在服務(wù)端項(xiàng)目中的。
1. 在"解決方案資源管理器"中,右鍵點(diǎn)擊AdventureWorksApp.Web,并添加一個(gè)新項(xiàng)。
2. 在"添加新項(xiàng)"對(duì)話框中,選擇"Domain Service Class"。
3. 命名為AdventureWorksService。
4. 點(diǎn)擊"添加"。 "添加新項(xiàng)"對(duì)話框出現(xiàn)。
5. 選擇下面的復(fù)選框:
. Enable client access
. Customer 和 Enable editing
. Generate associated classes for metadata.
6. 點(diǎn)擊OK
7. 生成解決方案。
更改域服務(wù)的查詢
域服務(wù)提供默認(rèn)的操作,我們應(yīng)該為我們特定的應(yīng)用而修改它們。這個(gè)演練中,我們更改默認(rèn)的查詢,來返回按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. 生成解決方案。
創(chuàng)建Silverlight頁面來顯示數(shù)據(jù)
從Customer表返回的數(shù)據(jù)顯示在自己的頁面上,不顯示在應(yīng)用程序的首頁上。
1. 在"解決方案資源管理器"中,右鍵點(diǎn)擊客戶端項(xiàng)目中的Views文件夾,并添加新項(xiàng)。
2. 在"添加新項(xiàng)"對(duì)話框中,選擇Silverlight Page項(xiàng)。
3. 更改名字為CustomerList.xaml,并點(diǎn)擊"添加"。
4. 從工具欄拖拽一個(gè)TextBlock放在CustomerList.xaml頁面的頂部。
5. 把Text屬性改為Customer List。
6. 保存CustomerList.xaml頁面。
在首頁上添加導(dǎo)航按鈕
我們?cè)趹?yīng)用程序的首頁上添加一個(gè)導(dǎo)航到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. 運(yùn)行應(yīng)用程序,確認(rèn)Customers按鈕顯示在導(dǎo)航欄上,并點(diǎn)擊的時(shí)候顯示CustomerList頁面。
在CustomerList頁面上顯示客戶數(shù)據(jù)
在DataGrid中顯示客戶數(shù)據(jù)。下面,我們就創(chuàng)建和配置一個(gè)DataGrid來顯示客戶數(shù)據(jù),需要從Data Sources窗口拖拽一個(gè)Customer實(shí)體到設(shè)計(jì)窗口內(nèi)。
1. 雙擊CustomerList.xaml。
2. 打開Data Sources窗口??梢栽贒ata菜單中,選擇Show Data Sources。注意Data Sources窗口已經(jīng)包含了可用的實(shí)體。
3. 從Data Sources窗口中把Customer節(jié)點(diǎn)拖到設(shè)計(jì)器中,在TextBlock下面。
4. 運(yùn)行應(yīng)用程序并點(diǎn)擊導(dǎo)航欄上的Customers按鈕。
5. 核實(shí)在CustomerList頁面上顯示了Customer數(shù)據(jù)。
(我在VS2008中使用Data source有問題,生成不了數(shù)據(jù)節(jié)點(diǎn)。好像在Silverlight3中沒有了ComponentModel.dll,所以直接使用域上下文來查詢數(shù)據(jù))
在域服務(wù)中添加自定義查詢
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. 生成解決方案。
顯示自定義查詢返回的數(shù)據(jù)
1. 雙擊CustomerList.xaml。
2. 在"數(shù)據(jù)源"窗口,選擇Customer并點(diǎn)擊下拉菜單。
3. 在查詢列表中選擇GetCustomersByTitle。
4. 把Customer節(jié)點(diǎn)拖拽到已經(jīng)存在于設(shè)計(jì)器中的DataGrid。
5. 運(yùn)行應(yīng)用程序,并驗(yàn)證只有Title等于Mr.的顧客顯示在頁面上。
添加排序功能
VS2008中實(shí)現(xiàn)如下:
1. 雙擊CustomerList.xaml。
2. 在XAML視圖中,在DomainDataSource控件中,添加SortDescriptors。
3. 設(shè)置PropertyPath屬性為"LastName"。設(shè)置Direction屬性為Ascending。
4. 運(yùn)行應(yīng)用程序,注意到顧客數(shù)據(jù)已經(jīng)按LastName排序了。
添加分頁功能
VS2008中實(shí)現(xiàn)如下:
1. 雙擊CustomerList.xaml。
2. 在XAML視圖中,在DomainDataSource控件中,添加PageSize屬性,并設(shè)置為15.添加LoadSize屬性,并設(shè)置為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. 運(yùn)行應(yīng)用程序,注意到頁面裝載的速度已經(jīng)大大加快了。并且可以通過DataPager控件瀏覽數(shù)據(jù)。
創(chuàng)建一個(gè)頁面來根據(jù)LastName進(jìn)行查詢
1. 在AdventureWorksApp中的Views文件夾下,添加新項(xiàng)。
2. 在"添加新項(xiàng)"對(duì)話框中,選擇Silverlight Page項(xiàng)。
3. 命名為CustomerSearchByLastName.xaml,并點(diǎn)擊"添加"。
4. 保存這個(gè)頁面。
在首頁中添加一個(gè)導(dǎo)航按鈕
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"?/> |
創(chuàng)建用戶界面來運(yùn)行GetCustomerByLastName查詢
VS2008中實(shí)現(xiàn)如下:
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中添加數(shù)據(jù)源、DataGrid、文本框和按鈕(實(shí)際代碼中不需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> |
測(cè)試應(yīng)用程序
1. 生成解決方案。
2. 運(yùn)行應(yīng)用程序。
3. 點(diǎn)擊"Customer Search"。
4. 在文本框中輸入想要查詢的LastName,例如"liu"。
5. 點(diǎn)擊Load按鈕。
6. 將會(huì)顯示名為"liu"的客戶。
轉(zhuǎn)載于:https://www.cnblogs.com/Areas/archive/2011/09/09/2172190.html
總結(jié)
以上是生活随笔為你收集整理的Silverlight WCF RIA服务(二十七)Silverlight 客户端 8的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++重载一些需要注意的地方
- 下一篇: 【转】好的学习方法