且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)

更新时间:2022-09-28 08:22:11

[索引页]

[源码下载]


稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)


作者:webabcd


介绍
Silverlight 2.0 调用 ADO.NET Data Services (数据服务)。本文以 Northwind 数据库为示例数据库,做一个添加、查询、更新和删除的Demo 
    在 Silverlight 2.0 中调用数据服务只能使用异步方式调用。另外,数据服务要与 Silverlight 宿主放在相同的域上
    System.Data.Services.Client.DataServiceContext - 数据服务上下文
    System.Data.Services.Client.DataServiceQuery - 以指定的 URI 语法查询数据服务
    AddObject(), UpdateObject(), DeleteObject() - 本别用于添加, 更新, 删除实体
    BeginExecute()/EndExecute(), BeginExecuteBatch()/EndExecuteBatch - 用于执行某一个 DataServiceQuery 查询或批量执行(将一组查询一次性地提交到数据服务)
    BeginSaveChanges()/EndSaveChanges() - 用于提交对实体的修改(增,删,改)
    BeginLoadProperty()/EndLoadProperty() - 用于加载指定的属性的值,加载导航属性的时候需要用到它
    AddLink(), SetLink(), DeleteLink() - 分别为创建连接,Added状态(一对多);创建连接,Added状态(多对一);删除连接,Deleted状态


在线DEMO
http://webabcd.blog.51cto.com/1787395/342779 


示例
1、数据服务
NorthwindDataService.svc
<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="Silverlight20.Web.DataService.NorthwindDataService" %>
 
NorthwindDataService.svc.cs
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Collections.Generic; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Data.Services; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Linq; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.ServiceModel.Web; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Web; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)namespace Silverlight20.Web.DataService 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)        public class NorthwindDataService : DataService<NorthwindEntities> 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                public static void InitializeService(IDataServiceConfiguration config) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        config.SetEntitySetAccessRule("*", EntitySetRights.All); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)}
 
 
2、Silverlight 调用数据服务
DataService.xaml
<UserControl x:Class="Silverlight20.Communication.DataService" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"> 

        <StackPanel HorizontalAlignment="Left" Margin="5"> 

                <TextBlock x:Name="lblMsg" Margin="10" Foreground="Red" /> 

                <StackPanel Orientation="Horizontal"> 
                        <TextBlock x:Name="lblCategoryName" Text="类别名称" Margin="10" /> 
                        <TextBox x:Name="txtCategoryName" Width="100" Margin="10" /> 
                        <TextBlock x:Name="lblDescription" Text="类别备注" Margin="10" /> 
                        <TextBox x:Name="txtDescription" Width="100" Margin="10" /> 
                        <Button x:Name="btnAdd" Content="添加" Margin="10" Click="btnAdd_Click" /> 
                </StackPanel> 

                <StackPanel Orientation="Horizontal"> 
                        <Button x:Name="btnUpdate" Content="更新选中" Margin="10" Click="btnUpdate_Click" /> 
                        <Button x:Name="btnDelete" Content="删除选中" Margin="10" Click="btnDelete_Click"    /> 
                </StackPanel> 

                <data:DataGrid Name="dataGrid1" Margin="10" AutoGenerateColumns="False" ItemsSource="{Binding}" 
                        SelectionChanged="DataGrid_SelectionChanged"> 
                        <data:DataGrid.Columns> 
                                <data:DataGridTextColumn Header="类别ID" Binding="{Binding CategoryID}" /> 
                                <data:DataGridTextColumn Header="类别名称" Binding="{Binding CategoryName}" /> 
                                <data:DataGridTextColumn Header="类别备注" Binding="{Binding Description}" /> 
                        </data:DataGrid.Columns> 
                </data:DataGrid> 

                <data:DataGrid Name="dataGrid2" Margin="10" AutoGenerateColumns="False" ItemsSource="{Binding}"> 
                        <data:DataGrid.Columns> 
                                <data:DataGridTextColumn Header="产品ID" Binding="{Binding ProductID}" /> 
                                <data:DataGridTextColumn Header="产品名称" Binding="{Binding ProductName}" /> 
                        </data:DataGrid.Columns> 
                </data:DataGrid> 

        </StackPanel> 

</UserControl>
 
DataService.xaml.cs
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Collections.Generic; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Linq; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Net; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Windows; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Windows.Controls; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Windows.Documents; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Windows.Input; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Windows.Media; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Windows.Media.Animation; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Windows.Shapes; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Data.Services.Client; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using System.Collections.ObjectModel; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)using Silverlight20.NorthwindDataService; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)namespace Silverlight20.Communication 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)        public partial class DataService : UserControl 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                // 配置服务地址,数据服务要与 Silverlight 宿主放在相同的域上 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                Uri uri = new Uri("DataService/NorthwindDataService.svc", UriKind.Relative); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                NorthwindEntities ctx; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                ObservableCollection<Categories> categories; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                ObservableCollection<Products> products; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                public DataService() 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        InitializeComponent(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        this.Loaded += new RoutedEventHandler(DataService_Loaded); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                void DataService_Loaded(object sender, RoutedEventArgs e) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        // 实例化 DataServiceContext 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        ctx = new NorthwindEntities(uri); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        // 初始化 Categories 集合,为了做 OneWay ,所以是 ObservableCollection<Categories> 类型 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        categories = new ObservableCollection<Categories>(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        // 初始化 Products 集合,为了做 OneWay ,所以是 ObservableCollection<Products> 类型 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        products = new ObservableCollection<Products>(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        BindCategory(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                private void BindCategory() 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        DataServiceQuery<Categories> query = ctx.Categories; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        // IAsyncResult BeginExecute(AsyncCallback callback, object state) - 以异步方式发出请求 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        //         AsyncCallback callback - 经典的 AsyncCallback 委托,指定回调方法 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        //         object state - 传递给回调方法的自定义对象,此处必须是 DataServiceQuery<T> 类型 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        query.BeginExecute(OnBindCategoryCompleted, query); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        // RequestUri - 请求服务的地址,因为数据服务发布的是REST,所以也可以用自己构造 URI 的方式去调用数据服务,详细的 URI 语法请参看 MSDN 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        lblMsg.Text = "读取类别数据中。。。" + query.RequestUri.ToString(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                void OnBindCategoryCompleted(IAsyncResult ar) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        try 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                var query = ar.AsyncState as DataServiceQuery<Categories>; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                // EndExecute(IAsyncResult ar) - 获取异步查询的结果 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                var result = query.EndExecute(ar); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                foreach (var item in result) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        categories.Add(item); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                this.Dispatcher.BeginInvoke(() => 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        dataGrid1.DataContext = categories; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        lblMsg.Text = ""; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                }); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        catch (DataServiceRequestException ex) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                lblMsg.Text = ex.ToString(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                private void btnAdd_Click(object sender, RoutedEventArgs e) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        Categories category = new Categories(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        category.CategoryName = txtCategoryName.Text; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        category.Description = txtDescription.Text; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        ctx.AddToCategories(category); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        for (int i = 0; i < 10; i++) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                var product = new Products() { ProductName = "测试用" + i.ToString() }; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                product.Categories = category; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                ctx.AddToProducts(product); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                // 多对一关系,使用 SetLink 建立连接,BeginSaveChanges() 的时候会一起发送到数据服务 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                ctx.SetLink(product, "Categories", category); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        ctx.BeginSaveChanges(OnAddCompleted, category); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        lblMsg.Text = "新增数据中。。。"
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                void OnAddCompleted(IAsyncResult ar) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        try 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                var x = ctx.EndSaveChanges(ar); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                categories.Add(ar.AsyncState as Categories); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                this.Dispatcher.BeginInvoke(() => 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        lblMsg.Text = ""; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                }); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        catch (DataServiceRequestException ex) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                lblMsg.Text = ex.ToString(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        var category = e.AddedItems[0] as Categories; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        BindProduct(category.CategoryID); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                private void BindProduct(int categoryId) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        // 可以使用 Lambda 表达式或查询语法,然后将其转换为 DataServiceQuery<T> 再使用 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        DataServiceQuery<Products> query = 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                (from p in ctx.Products where p.Categories.CategoryID == categoryId select p) as DataServiceQuery<Products>; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        lblMsg.Text = "读取产品数据中。。。"
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        query.BeginExecute(OnBindProductCompleted, query); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                void OnBindProductCompleted(IAsyncResult ar) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        try 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                var query = ar.AsyncState as DataServiceQuery<Products>; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                var result = query.EndExecute(ar); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                products.Clear(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                foreach (var item in result) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        products.Add(item); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                this.Dispatcher.BeginInvoke(() => 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        dataGrid2.DataContext = products; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        lblMsg.Text = ""; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                }); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        catch (DataServiceRequestException ex) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                lblMsg.Text = ex.ToString(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                private void btnDelete_Click(object sender, RoutedEventArgs e) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        if (dataGrid1.SelectedItem != null
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                try 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        Categories category = dataGrid1.SelectedItem as Categories; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        DeleteCategory(category); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        lblMsg.Text = "删除中。。。"
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                catch (DataServiceRequestException ex) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        lblMsg.Text = ex.ToString(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                private void DeleteCategory(Categories category) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        try 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                // BeginLoadProperty(object entity, string propertyName, AsyncCallback callback, object state) - 开始加载指定属性的值的异步操作 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                //         object entity - 需要加载属性的所属实体    
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                //         string propertyName - 需要加载属性的名称 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                //         AsyncCallback callback - 经典的 AsyncCallback 委托,指定回调方法 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                //         object state - 传递给回调方法的自定义对象 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                ctx.BeginLoadProperty(category, "Products", OnLoadPropertyCompleted, category); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        catch (DataServiceRequestException ex) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                lblMsg.Text = ex.ToString(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                void OnLoadPropertyCompleted(IAsyncResult ar) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        Categories category = ar.AsyncState as Categories; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        try 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                // EndLoadProperty(IAsyncResult ar) - 完成加载指定属性的值的这个异步操作 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                ctx.EndLoadProperty(ar); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                foreach (Products product in category.Products) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        // 在指定的对象上删除指定的连接,BeginSaveChanges() 的时候会一起发送到数据服务 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        ctx.DeleteLink(category, "Products", product); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                ctx.DeleteObject(category); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                ctx.BeginSaveChanges(OnDeleteCategoryCompleted, null); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                categories.Remove(category); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        catch (DataServiceRequestException ex) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                lblMsg.Text = ex.ToString(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                void OnDeleteCategoryCompleted(IAsyncResult ar) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        try 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                ctx.EndSaveChanges(ar); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                lblMsg.Text = ""; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        catch (DataServiceRequestException ex) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                lblMsg.Text = ex.ToString(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                private void btnUpdate_Click(object sender, RoutedEventArgs e) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        if (dataGrid1.SelectedItem != null
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                try 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        Categories category = dataGrid1.SelectedItem as Categories; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        ctx.UpdateObject(category); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        ctx.BeginSaveChanges(OnUpdateCategoryCompleted, category); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        lblMsg.Text = "更新中。。。"
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                catch (DataServiceRequestException ex) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                        lblMsg.Text = ex.ToString(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                void OnUpdateCategoryCompleted(IAsyncResult ar) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        try 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                ctx.EndSaveChanges(ar); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                lblMsg.Text = ""; 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        catch (DataServiceRequestException ex) 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        { 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                                lblMsg.Text = ex.ToString(); 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)                } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)        } 
稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)}
 
 
OK
[源码下载]




     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/343917,如需转载请自行联系原作者