综合应用WPF/WCF/WF/LINQ之十九:实现页面中的记录列表

简介:
稍稍增加一点难度,我们让记录列表中嵌入一组CheckBox,以便用户选择,之后,用户就可以编辑或者删除所选择的记录了。其效果如下:

  这里,我们使用一个DataTemplate来容纳CheckBox控件。注意,公布的源代码中,使用的是Click事件,但使用这个事件可能会导致一些小Bug,所以现在改成了Checked和Unchecked。
  为了实现绑定数据,我们可以在GridView控件的GridViewColumn中加入DisplayMemberBinding="{Binding Path=FunctionName}"这样的属性。
  下面的翻页控件是一个自定义的UserControl。关于UserControl的编写,将在后续文章中介绍。
    1       < Page.Resources >
    2           < DataTemplate  x : Key ="CheckBox">
    3               < CheckBox  Name ="chkSelect"  Checked ="chkSelect_Checked"  Unchecked ="chkSelect_Unchecked" />
    4           </ DataTemplate >
    5       </ Page.Resources >
    6       < Grid  VerticalAlignment ="Top">
    7           < ListView  Name  ="grdGrid"  Margin ="4,86,0,24"  MinHeight ="155"  MouseDoubleClick ="grdGrid_MouseDoubleClick"  ItemsSource ="{ Binding }">
    8               < ListView.View >
    9                   < GridView >
   10                       < GridViewColumn  CellTemplate ="{ StaticResource  CheckBox }"  Width ="25" />
   11                       < GridViewColumn  Header ="Function Name"  DisplayMemberBinding ="{ Binding  Path =FunctionName}"  Width ="200" />
   12                       < GridViewColumn  Header ="Function Description"  DisplayMemberBinding ="{ Binding  Path =FunctionDescription}"  Width ="525" />
   13                   </ GridView >
   14               </ ListView.View >
   15           </ ListView >
   16           < common : Pager  Name ="ctlPager"  PageChanged ="ctlPager_PageChanged"  Height ="22" VerticalAlignment ="Bottom"  HorizontalAlignment ="Right" />
   17       </ Grid >
  后台代码如下:
  我们用一个_SelectedItems变量保存已选择的对象,避免遍历循环控件去判断哪些被选中了。
  这里有多个事件中加入了if (this.grdGrid.IsInRow() == false) return;这样的语句,这是因为在很少的情况下,如果鼠标正好处在两行之间的微小空隙中,系统会认为选中了整个Grid,所以我们需要做一些判断。其中IsInRow是一个扩展方法,将在下一篇文章中介绍。另外,GetControl也是一个扩展方法,用于找到模板列中的控件,将在下一篇文章中介绍。
    1          private  ArrayList _SelectedItems =  new  ArrayList();
    2 
    3          private  void chkSelect_Checked( object sender,  RoutedEventArgs e)
    4         {
    5              try
    6             {
    7                  if ( this.grdGrid.IsInRow() ==  false)  return;
    8 
    9                  this.SetEnabled(( CheckBox)sender, (( FunctionInfo) this.grdGrid.GetItem()).FunctionId);
   10 
   11                 e.Handled =  false;
   12             }
   13              catch
   14             {
   15                  throw;
   16             }
   17         }
   18 
   19          private  void chkSelect_Unchecked( object sender,  RoutedEventArgs e)
   20         {
   21              try
   22             {
   23                  if ( this.grdGrid.IsInRow() ==  false)  return;
   24 
   25                  this.SetEnabled(( CheckBox)sender, (( FunctionInfo) this.grdGrid.GetItem()).FunctionId);
   26 
   27                 e.Handled =  false;
   28             }
   29              catch
   30             {
   31                  throw;
   32             }
   33         }
   34 
   35          private  void grdGrid_MouseDoubleClick( object sender,  MouseButtonEventArgs e)
   36         {           
   37              try
   38             {
   39                  if ( this.grdGrid.IsInRow() ==  false)  return;
   40 
   41                  CheckBox control = ( CheckBox) this.grdGrid.GetControl( "chkSelect");
   42 
   43                 control.IsChecked = (control.IsChecked ==  false);
   44             }
   45              catch
   46             {
   47                  throw;
   48             }
   49         }
   50 
   51          private  void SetEnabled( CheckBox control,  object value)
   52         {
   53              try
   54             {
   55                  if (control.IsChecked ==  true)  this._SelectedItems.Add(value);
   56                  if (control.IsChecked !=  true)  this._SelectedItems.Remove(value);
   57             }
   58              catch
   59             {
   60                  throw;
   61             }
   




本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/79023,如需转载请自行联系原作者
目录
相关文章
|
C#
WPF 界面实现多语言支持 中英文切换 动态加载资源字典
原文:WPF 界面实现多语言支持 中英文切换 动态加载资源字典 1、使用资源字典,首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面【注意:添加xmlns:s="clr-namespace:System;assembly=mscorlib】 zh-cn.
3843 0
|
C# 数据可视化 开发工具
WPF实现选项卡效果(1)——使用AvalonDock
原文:WPF实现选项卡效果(1)——使用AvalonDock 简介   公司最近一个项目,软件采用WPF开发,需要实现类似于VS的选项卡(或者是浏览器的选项卡)效果。
2773 0
|
IDE C# 开发工具
WPF钟表效果实现
中WPF中的RotateTransform实现UI元素的旋转,并模拟钟表的秒针、分针和时针。
1492 0
WPF钟表效果实现
|
IDE 编译器 C#
WPF实现强大的动态公式计算
数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题。本文就探讨一下如何在WPF中实现一种基于行字段的动态公式计算。
1432 0
WPF实现强大的动态公式计算
|
网络协议 C# 移动开发
C# WPF上位机实现和下位机TCP通讯
C# WPF上位机实现和下位机TCP通讯下位机使用北京大华程控电源DH1766-1,上位机使用WPF。实现了电压电流实时采集,曲线显示。上午在公司调试成功,手头没有程控电源,使用TCP服务端模拟。昨天写的TCP服务端正好排上用场。
2868 0
|
C#
WPF特效-实现3D足球效果
原文:WPF特效-实现3D足球效果 WPF 实现 3D足球效果,效果图如下:  每个面加载不同贴图。                                                          ...
1117 0
|
算法 C# 容器
WPF特效-实现弧形旋转轮播图
原文:WPF特效-实现弧形旋转轮播图        项目遇到,琢磨并实现了循环算法,主要处理循环替换显示问题       (如:12张图组成一个圆弧,但总共有120张图需要呈现,如何在滑动中进行显示块的替换,并毫无卡顿)        处理的自己感觉比较满意,记录一下。
2429 0
|
C#
wpf采用Xps实现文档显示、套打功能
原文:wpf采用Xps实现文档显示、套打功能 近期的一个项目需对数据进行套打,用户要求现场不允许安装office、页面预览显示必须要与文档完全一致,xps文档来对数据进行处理。Wpf的DocumentView 控件可以直接将数据进行显示,xps也是一种开放式的文档,如果我们能够替换里面的标签就最终实现了我们想要的效果。
2085 0
|
C# 开发工具 git
WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容
原文:WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容 简介   在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任何有用的功能。
1839 0
|
C# 开发工具 git
WPF实现选项卡效果(2)——动态添加AvalonDock选项卡
原文:WPF实现选项卡效果(2)——动态添加AvalonDock选项卡 简介   在前面一篇文章里面,我们使用AvalonDock实现了类似于VS的选项卡(或者浏览器的选项卡)效果。
2212 0