综合应用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() ==  falsereturn;
    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() ==  falsereturn;
   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() ==  falsereturn;
   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 ==  truethis._SelectedItems.Add(value);
   56                  if (control.IsChecked !=  truethis._SelectedItems.Remove(value);
   57             }
   58              catch
   59             {
   60                  throw;
   61             }
   




本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/79023,如需转载请自行联系原作者
目录
相关文章
|
缓存 C# 虚拟化
WPF列表性能提高技术
WPF数据绑定系统不仅需要绑定功能,还需要能够处理大量数据而不会降低显示速度和消耗大量内存,WPF提供了相关的控件以提高性能,所有继承自`ItemsControl`的控件都支持该技术。
|
C#
WPF 界面实现多语言支持 中英文切换 动态加载资源字典
原文:WPF 界面实现多语言支持 中英文切换 动态加载资源字典 1、使用资源字典,首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面【注意:添加xmlns:s="clr-namespace:System;assembly=mscorlib】 zh-cn.
3194 0
|
3月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
|
3月前
|
开发框架 前端开发 JavaScript
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表TreeView的使用
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表TreeView的使用
|
3月前
|
C# UED 开发者
WPF打印功能实现秘籍:从页面到纸张,带你玩转WPF打印技术大揭秘!
【8月更文挑战第31天】在WPF应用开发中,打印功能至关重要,不仅能提升用户体验,还增强了应用的实用性。本文介绍WPF打印的基础概念与实现方法,涵盖页面元素打印、打印机设置及打印预览。通过具体案例,展示了如何利用`PrintDialog`和`PrintDocument`控件添加打印支持,并使用`PrinterSettings`类进行配置,最后通过`PrintPreviewWindow`实现打印预览功能。
337 0
|
3月前
|
存储 设计模式 开发框架
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(7) -- 图标列表展示和选择处理
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(7) -- 图标列表展示和选择处理
|
3月前
|
开发框架 前端开发 JavaScript
在WPF应用中使用GongSolutions.WPF.DragDrop实现列表集合控件的拖动处理
在WPF应用中使用GongSolutions.WPF.DragDrop实现列表集合控件的拖动处理
|
C#
WPF登录跳转到指定页面
WPF登录跳转到指定页面
197 0
WPF 获取列表中控件的同时,选中其所在行
WPF 获取列表中控件的同时,选中其所在行
|
IDE C# 开发工具
WPF钟表效果实现
中WPF中的RotateTransform实现UI元素的旋转,并模拟钟表的秒针、分针和时针。
1197 0
WPF钟表效果实现