大佬教程收集整理的这篇文章主要介绍了稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_944_68@@H_944_68@using System;
@H_944_68@@H_944_68@using System.Collections.Generic;
@H_944_68@@H_944_68@using System.Data.services;
@H_944_68@@H_944_68@using System.Linq;
@H_944_68@@H_944_68@using System.serviceModel.Web;
@H_944_68@@H_944_68@using System.Web;
@H_944_68@@H_944_68@namespace Silverlight20.Web.Dataservice
@H_944_68@@H_944_68@
public
class NorthwindDataservice : Dataservice<NorthwindEntities>
@H_944_68@@H_944_68@
public
static
void Initializeservice(IDataserviceCon@L_616_36@uration con@L_616_36@)
@H_944_68@@H_944_68@ con@L_616_36@.SetEntitySetAccessRule(
"*",EntitySetrights.All);
@H_944_68@@H_944_68@using System;
@H_944_68@@H_944_68@using System.Collections.Generic;
@H_944_68@@H_944_68@using System.Linq;
@H_944_68@@H_944_68@using System.Net;
@H_944_68@@H_944_68@using System.Windows;
@H_944_68@@H_944_68@using System.Windows.Controls;
@H_944_68@@H_944_68@using System.Windows.Documents;
@H_944_68@@H_944_68@using System.Windows.Input;
@H_944_68@@H_944_68@using System.Windows.Media;
@H_944_68@@H_944_68@using System.Windows.Media.Animation;
@H_944_68@@H_944_68@using System.Windows.Shapes;
@H_944_68@@H_944_68@using System.Data.services.CLIENt;
@H_944_68@@H_944_68@using System.Collections.ObjectModel;
@H_944_68@@H_944_68@using Silverlight20.NorthwindDataservice;
@H_944_68@@H_944_68@namespace Silverlight20.Communication
@H_944_68@@H_944_68@
public partial
class Dataservice : UserControl
@H_944_68@@H_944_68@
// 配置服务地址,数据服务要与 Silverlight 宿主放在相同的域上
@H_944_68@@H_944_68@ Uri uri =
new Uri(
"Dataservice/NorthwindDataservice.svc",UriKind.RelativE);
@H_944_68@@H_944_68@ NorthwindEntities ctx;
@H_944_68@@H_944_68@ ObservableCollection<Categories> categories;
@H_944_68@@H_944_68@ ObservableCollection<Products> products;
@H_944_68@@H_944_68@
public Dataservice()
@H_944_68@@H_944_68@ initializeComponent();
@H_944_68@@H_944_68@
this.Loaded +=
new RoutedEventHandler(Dataservice_Loaded);
@H_944_68@@H_944_68@
void Dataservice_Loaded(
object sender,RoutedEventArgs E)
@H_944_68@@H_944_68@
// 实例化 DataserviceContext
@H_944_68@@H_944_68@ ctx =
new NorthwindEntities(uri);
@H_944_68@@H_944_68@
// 初始化 Categories 集合,为了做 OneWay ,所以是 ObservableCollection<Categories> 类型
@H_944_68@@H_944_68@ categories =
new ObservableCollection<Categories>();
@H_944_68@@H_944_68@
// 初始化 Products 集合,为了做 OneWay ,所以是 ObservableCollection<Products> 类型
@H_944_68@@H_944_68@ products =
new ObservableCollection<Products>();
@H_944_68@@H_944_68@ BindCategory();
@H_944_68@@H_944_68@
private
void BindCategory()
@H_944_68@@H_944_68@ DataserviceQuery<Categories> query = ctx.Categories;
@H_944_68@@H_944_68@
// IAsyncResult BeginExecute(AsyncCallBACk callBACk,object statE) - 以异步方式发出请求
@H_944_68@@H_944_68@
// AsyncCallBACk callBACk - 经典的 AsyncCallBACk 委托,指定回调方法
@H_944_68@@H_944_68@
// object state - 传递给回调方法的自定义对象,此处必须是 DataserviceQuery<T> 类型
@H_944_68@@H_944_68@ query.beginExecute(OnBindCategoryCompleted,query);
@H_944_68@@H_944_68@
// requesturi - 请求服务的地址,因为数据服务发布的是REST,所以也可以用自己构造 URI 的方式去调用数据服务,详细的 URI 语法请参看 MSDN
@H_944_68@@H_944_68@ lblMsg.Text =
"读取类别数据中。。。" + query.requesturi.ToString();
@H_944_68@@H_944_68@
void OnBindCategoryCompleted(IAsyncResult ar)
@H_944_68@@H_944_68@ var query = ar.AsyncState
as DataserviceQuery<Categories>;
@H_944_68@@H_944_68@
// EndExecute(IAsyncResult ar) - 获取异步查询的结果
@H_944_68@@H_944_68@ var result = query.EndExecute(ar);
@H_944_68@@H_944_68@
foreach (var item
in result)
@H_944_68@@H_944_68@ categories.Add(item);
@H_944_68@@H_944_68@
this.Dispatcher.beginInvoke(() =>
@H_944_68@@H_944_68@ dataGrid1.DataContext = categories;
@H_944_68@@H_944_68@ lblMsg.Text = "";
@H_944_68@@H_944_68@
catch (DataservicerequestException eX)
@H_944_68@@H_944_68@ lblMsg.Text = ex.ToString();
@H_944_68@@H_944_68@
private
void btnAdd_Click(
object sender,RoutedEventArgs E)
@H_944_68@@H_944_68@ Categories category =
new Categories();
@H_944_68@@H_944_68@ category.CategoryName = txtCategoryName.Text;
@H_944_68@@H_944_68@ category.Description = txtDescription.Text;
@H_944_68@@H_944_68@ ctx.AddToCategories(category);
@H_944_68@@H_944_68@
for (
int i = 0; i < 10; i++)
@H_944_68@@H_944_68@ var product =
new Products() { ProductName =
"测试用" + i.ToString() };
@H_944_68@@H_944_68@ product.Categories = category;
@H_944_68@@H_944_68@ ctx.AddToProducts(product);
@H_944_68@@H_944_68@
// 多对一关系,使用 SetLink 建立连接,BeginSaveChanges() 的时候会一起发送到数据服务
@H_944_68@@H_944_68@ ctx.SetLink(product,"Categories",category);
@H_944_68@@H_944_68@ ctx.beginSaveChanges(OnAddCompleted,category);
@H_944_68@@H_944_68@ lblMsg.Text =
"新增数据中。。。";
@H_944_68@@H_944_68@
void OnAddCompleted(IAsyncResult ar)
@H_944_68@@H_944_68@ var x = ctx.EndSaveChanges(ar);
@H_944_68@@H_944_68@ categories.Add(ar.AsyncState
as Categories);
@H_944_68@@H_944_68@
this.Dispatcher.beginInvoke(() =>
@H_944_68@@H_944_68@ lblMsg.Text = "";
@H_944_68@@H_944_68@
catch (DataservicerequestException eX)
@H_944_68@@H_944_68@ lblMsg.Text = ex.ToString();
@H_944_68@@H_944_68@
private
void DataGrid_SELEctionChanged(
object sender,SELEctionChangedEventArgs E)
@H_944_68@@H_944_68@ var category = e.AddedItems[0]
as Categories;
@H_944_68@@H_944_68@ BindProduct(category.CategoryID);
@H_944_68@@H_944_68@
private
void BindProduct(
int categoryId)
@H_944_68@@H_944_68@
// 可以使用 Lambda 表达式或查询语法,然后将其转换为 DataserviceQuery<T> 再使用
@H_944_68@@H_944_68@ DataserviceQuery<Products> query =
@H_944_68@@H_944_68@ (from p
in ctx.Products where p.Categories.CategoryID == categoryId SELEct p)
as DataserviceQuery<Products>;
@H_944_68@@H_944_68@ lblMsg.Text =
"读取产品数据中。。。";
@H_944_68@@H_944_68@ query.beginExecute(OnBindProductCompleted,query);
@H_944_68@@H_944_68@
void OnBindProductCompleted(IAsyncResult ar)
@H_944_68@@H_944_68@ var query = ar.AsyncState
as DataserviceQuery<Products>;
@H_944_68@@H_944_68@ var result = query.EndExecute(ar);
@H_944_68@@H_944_68@ products.Clear();
@H_944_68@@H_944_68@
foreach (var item
in result)
@H_944_68@@H_944_68@ products.Add(item);
@H_944_68@@H_944_68@
this.Dispatcher.beginInvoke(() =>
@H_944_68@@H_944_68@ dataGrid2.DataContext = products;
@H_944_68@@H_944_68@ lblMsg.Text = "";
@H_944_68@@H_944_68@
catch (DataservicerequestException eX)
@H_944_68@@H_944_68@ lblMsg.Text = ex.ToString();
@H_944_68@@H_944_68@
private
void btndelete_Click(
object sender,RoutedEventArgs E)
@H_944_68@@H_944_68@
if (dataGrid1.SELEctedItem !=
null)
@H_944_68@@H_944_68@ Categories category = dataGrid1.SELEctedItem
as Categories;
@H_944_68@@H_944_68@ deleteCategory(category);
@H_944_68@@H_944_68@ lblMsg.Text =
"删除中。。。";
@H_944_68@@H_944_68@
catch (DataservicerequestException eX)
@H_944_68@@H_944_68@ lblMsg.Text = ex.ToString();
@H_944_68@@H_944_68@
private
void deleteCategory(Categories category)
@H_944_68@@H_944_68@
// BeginLoadProperty(object entity,String propertyName,AsyncCallBACk callBACk,object statE) - 开始加载指定属性的值的异步操作
@H_944_68@@H_944_68@
// object entity - 需要加载属性的所属实体
@H_944_68@@H_944_68@
// String propertyName - 需要加载属性的名称
@H_944_68@@H_944_68@
// AsyncCallBACk callBACk - 经典的 AsyncCallBACk 委托,指定回调方法
@H_944_68@@H_944_68@
// object state - 传递给回调方法的自定义对象
@H_944_68@@H_944_68@ ctx.beginLoadProperty(category,"Products",OnLoadPropertyCompleted,category);
@H_944_68@@H_944_68@
catch (DataservicerequestException eX)
@H_944_68@@H_944_68@ lblMsg.Text = ex.ToString();
@H_944_68@@H_944_68@
void OnLoadPropertyCompleted(IAsyncResult ar)
@H_944_68@@H_944_68@ Categories category = ar.AsyncState
as Categories;
@H_944_68@@H_944_68@
// EndLoadProperty(IAsyncResult ar) - 完成加载指定属性的值的这个异步操作
@H_944_68@@H_944_68@ ctx.EndLoadProperty(ar);
@H_944_68@@H_944_68@
foreach (Products product
in category.Products)
@H_944_68@@H_944_68@
// 在指定的对象上删除指定的连接,BeginSaveChanges() 的时候会一起发送到数据服务
@H_944_68@@H_944_68@ ctx.deleteLink(category,product);
@H_944_68@@H_944_68@ ctx.deleteObject(category);
@H_944_68@@H_944_68@ ctx.beginSaveChanges(OndeleteCategoryCompleted,null);
@H_944_68@@H_944_68@ categories.Remove(category);
@H_944_68@@H_944_68@
catch (DataservicerequestException eX)
@H_944_68@@H_944_68@ lblMsg.Text = ex.ToString();
@H_944_68@@H_944_68@
void OndeleteCategoryCompleted(IAsyncResult ar)
@H_944_68@@H_944_68@ ctx.EndSaveChanges(ar);
@H_944_68@@H_944_68@ lblMsg.Text = "";
@H_944_68@@H_944_68@
catch (DataservicerequestException eX)
@H_944_68@@H_944_68@ lblMsg.Text = ex.ToString();
@H_944_68@@H_944_68@
private
void btnupdate_Click(
object sender,RoutedEventArgs E)
@H_944_68@@H_944_68@
if (dataGrid1.SELEctedItem !=
null)
@H_944_68@@H_944_68@ Categories category = dataGrid1.SELEctedItem
as Categories;
@H_944_68@@H_944_68@ ctx.updateObject(category);
@H_944_68@@H_944_68@ ctx.beginSaveChanges(OnupdateCategoryCompleted,category);
@H_944_68@@H_944_68@ lblMsg.Text =
"更新中。。。";
@H_944_68@@H_944_68@
catch (DataservicerequestException eX)
@H_944_68@@H_944_68@ lblMsg.Text = ex.ToString();
@H_944_68@@H_944_68@
void OnupdateCategoryCompleted(IAsyncResult ar)
@H_944_68@@H_944_68@ ctx.EndSaveChanges(ar);
@H_944_68@@H_944_68@ lblMsg.Text = "";
@H_944_68@@H_944_68@
catch (DataservicerequestException eX)
以上是大佬教程为你收集整理的稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)全部内容,希望文章能够帮你解决稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。