首页 »Flash教程 » silverlightsql:Silverlight 2 (beta1)数据操作(6)——使用LINQ to SQL进行数据CRUD操作(下) »正文
silverlightsql:Silverlight 2 (beta1)数据操作(6)——使用LINQ to SQL进行数据CRUD操作(下)
来源: 发布时间:星期五, 2009年1月23日 浏览:16次 评论:0
目录 导言 软件Software需求 数据库实现 Data Access层实现 Web Service层实现 Silverlight客户端实现 结语 在上 篇 我们完成了这个 前面部分 这 篇 我们继续下面 操作 Silverlight客户端实现 这个部分主要完成Silverlight客户端 操作 首先引用WCF服务 然后在Page页面中 我们使用DataGridControl控件来实现对数据 绑定 另外 添加 个用户Control控件实现增加、删除、修改操作处理 下面 步 步来实现这些步骤吧 第 步:引用WCF服务 第 2步:添加 个用户Control控件 第 3步:编辑用户Control控件界面 为了演示方面 我没有做任何 界面美化 仅仅把数据库相应 字段在TextBox上实现双向绑定 即在任何时候都可以同时更新源数据和目标 提供了保存 删除 添加按钮实现数据操作事件 绑定代码像这样 类似 可以写出其它 代码 <TextBox x:Name="txtProductType" Text="{Binding ProductType, Mode=TwoWay}" /> 第 4步:编辑用户Control控件事件
这 步比较复杂 这里分小点讨论 为了 WCF服务 先定义 下全局变量 AcademeServiceClient academeSClient; 1.定义事件 由于实时需要Page页 DataGridControl控件和用户Control控件 更新 这里引用事件委托机制 所以先对外定义 些公共 事件和绑定数据思路方法 在Page页上实现 些思路方法 比如添加、删除、更新数据的后刷新列表 //添加Product事件 public delegate void ProductUpdatedHandler (object source, Product product); public event ProductUpdatedHandler ProductUpdated; //删除Product事件 public delegate void ProductDeletedHandler(object source); public event ProductDeletedHandler ProductDeleted; //编辑取消事件 public delegate void ProductEditCancelHandler(object source); public event ProductEditCancelHandler ProductEditCancel; //绑定数据思路方法 public void SetProduct(Product product) { this.DataContext = product; } 2.更新数据 这是保存按钮触发 事件 利用DataContext属性获取TextBox上面 值 异步 SaveProduct思路方法实现更新和添加数据操作 这里更新和添加数据就是利用ProductID 值 添加数据 时候ProductID默认为0 不为0 时候就是更新数据 在SaveProduct思路方法中已经强调过了 txtMessage.Text = "正在保存"; Product product = (Product)this.DataContext; academeSClient.SaveProductCompleted EventHandler<SaveProductCompletedEventArgs> (academeSClient_SaveProductCompleted); academeSClient.SaveProductAsync(product); 在完成 思路方法后 给出了 些提示性 文字 ProductUpdated思路方法刷新列表
void academeSClient_SaveProductCompleted (object sender, SaveProductCompletedEventArgs e) { txtMessage.Text = "更新成功"; ProductUpdated(this, e.Result); } 3.添加数据 点击添加按钮 新建Product 例子 然后点击保存按钮 实现保存操作 在保存事件中 既可以用于保存又可以用户新建 这里 添加数据事件仅仅给用户 个提示 但是需要保存到数据库 还需要点击上面 保存按钮 (btnAddNew.Content "取消") { btnAddNew.Content = "添加"; btnDelete.IsEnabled = true; (ProductEditCancel != null) ProductEditCancel(this); }
{ Product product = Product; this.DataContext = product; btnDelete.IsEnabled = false; btnAddNew.Content = "取消"; } 4.删除数据 同添加数据 样 获取数据 然后异步 DeleteProduct思路方法删除这条数据 txtMessage.Text = "正在删除"; Product product=(Product)this.DataContext; academeSClient.DeleteProductCompleted EventHandler<.ComponentModel.AsyncCompletedEventArgs> (academeSClient_DeleteProductCompleted); academeSClient.DeleteProductAsync(product); 在完成 的后 给出了 些提示 ProductUpdated思路方法刷新列表 void academeSClient_DeleteProductCompleted (object sender, .ComponentModel.AsyncCompletedEventArgs e) { txtMessage.Text = "删除成功"; (ProductDeleted != null) ProductDeleted(this); } 第 5步:编辑Page页面
1.前台页面 前台显示页面 非常简单 我就放置了DataGridControl控件和 个用户Control控件 <Grid x:Name="LayoutRoot" Background="White"> <Grid.RowDefinitions> <RowDefinition Height="200"/> <RowDefinition Height="400"/> </Grid.RowDefinitions> <my:DataGrid x:Name="grdProducts" IsReadOnly="True" Margin="14" Grid.Row="0" AutoGenerateColumns="True" GridlinesVisibility="All" RowDetailsVisibility="Visible" SelectionChanged="grdProducts_SelectionChanged"/> <Academe:ProductDetail x:Name="ProductDetailShow" Grid.Row="1"/> </Grid> 2.查询数据 在Page 思路方法中 直接异步 GetAllProducts思路方法获取数据 绑定到DataGridControl控件上面 academeSClient.GetAllProductsCompleted EventHandler<GetAllProductsCompletedEventArgs> (academeSClient_GetAllProductsCompleted); academeSClient.GetAllProductsAsync; 在完成 的后 获取数据 绑定到Control控件上面 void academeSClient_GetAllProductsCompleted(object sender, GetAllProductsCompletedEventArgs e) { Product products = e.Result; grdProducts.ItemsSource = products; } 3.SelectionChanged事件
当选中某 项时 触发这个事件 获取选中 项 用户Control控件对外提供 SetProduct思路方法绑定到TextBox上 private void grdProducts_SelectionChanged (object sender, EventArgs e) { Product productEntity = (Product)grdProducts.SelectedItem; ProductDetailShow.SetProduct(productEntity); } 4.完善 接下来 我们还需要写 些事件完善这个 首先我们完成在用户Control控件中定义 3个公共 事件 ProductDetailShow.ProductUpdated ProductDetail.ProductUpdatedHandler (ProductDetailShow_ProductUpdated); ProductDetailShow.ProductEditCancel ProductDetail.ProductEditCancelHandler (ProductDetailShow_ProductEditCancel); ProductDetailShow.ProductDeleted ProductDetail.ProductDeletedHandler (ProductDetailShow_ProductDeleted); 实现这些事件思路方法 这些思路方法就是起到刷新列表 获取选中项 作用 void ProductDetailShow_ProductDeleted(object source) { //删除选中Product重新绑定数据源 List<Product> products = List<Product> (grdProducts.ItemsSource as Product); products.Remove(grdProducts.SelectedItem as Product); grdProducts.ItemsSource = products.ToArray<Product>; } void ProductDetailShow_ProductEditCancel(object source) { //获取选择Product Product productEntity = (Product)grdProducts.SelectedItem; } void ProductDetailShow_ProductUpdated (object source, Product product) { //刷新列表 academeSClient.GetAllProductsAsync; } 最后来个整个项目截图 结语 本篇 分为3层架构 在数据访问层LINQ to SQL 在Web Service层使用WCF 最后在客户端Silverlight完成 这个Silverlight项目被我弄 好像复杂了 这下顺便学习了用户Control控件事件 不过这样增强了用户体验 不像上几篇所说 各个用户Control控件好像很独立 没有很好 结合起来 这仅仅提供这个思路方法很好 结合用户Control控件把这个 整合 很完善了 最后说 下 这里全部 代码都贴出来了 大家只要按步骤来 可以完成这个 源代码就不提供下载了 我这个项目在使用中 还在扩充 大家也可以扩充 比如在DataGrid中嵌套 些Control控件显示图片 类型等等
相关文章
读者评论
发表评论
|
|