专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »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服务

Silverlight 2 (beta1)数据操作(6)——使用LINQ to SQL进行数据CRUD操作(下)

  第 2步:添加个用户Control控件

Silverlight 2 (beta1)数据操作(6)——使用LINQ to SQL进行数据CRUD操作(下)

  第 3步:编辑用户Control控件界面

  为了演示方面我没有做任何界面美化仅仅把数据库相应字段在TextBox上实现双向绑定即在任何时候都可以同时更新源数据和目标提供了保存删除添加按钮实现数据操作事件

Silverlight 2 (beta1)数据操作(6)——使用LINQ to SQL进行数据CRUD操作(下)

  绑定代码像这样类似可以写出其它代码

<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;
}
  最后来个整个项目截图



Silverlight 2 (beta1)数据操作(6)——使用LINQ to SQL进行数据CRUD操作(下)

  结语  本篇分为3层架构在数据访问层LINQ to SQL在Web Service层使用WCF最后在客户端Silverlight完成

  这个Silverlight项目被我弄好像复杂了这下顺便学习了用户Control控件事件不过这样增强了用户体验不像上几篇所说各个用户Control控件好像很独立没有很好结合起来这仅仅提供这个思路方法很好结合用户Control控件把这个整合很完善了最后说这里全部代码都贴出来了大家只要按步骤来可以完成这个源代码就不提供下载了我这个项目在使用中还在扩充大家也可以扩充比如在DataGrid中嵌套些Control控件显示图片类型等等



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: