DataGrid中的全选和单选的功能
2015-11-28 10:20
309 查看
在WPF中DataGrid和CheckBox的联合使用是非常常见的,但是在DataGrid中怎
么实现全选和部分选择的功能并没有现成的控件去使用。要想实现该功能,必须人工通
过代码来完成。关于实现的方式,网上有很多,有的很简单有的比较复杂。现参考了网
上大牛的代码又结合了自己目前的项目自己手工写了一个实现全选和单选的控件。罗列
如下:
前台代码:主要是在DataGrid中添加一列CheckBox,另外通过双向绑定的方式实现
随着前后台的一致。
后台:
总结:该实例主要通过判断DataGrid中已选择的行数和总行数的比较来实现的
,方式比较简单,但是基本上可以实现目标要求的。在此仅作记录,以方便自己后续的
学习。如有更好的实现方案,还望各位大神不吝赐教。
么实现全选和部分选择的功能并没有现成的控件去使用。要想实现该功能,必须人工通
过代码来完成。关于实现的方式,网上有很多,有的很简单有的比较复杂。现参考了网
上大牛的代码又结合了自己目前的项目自己手工写了一个实现全选和单选的控件。罗列
如下:
前台代码:主要是在DataGrid中添加一列CheckBox,另外通过双向绑定的方式实现
随着前后台的一致。
<DataGridTemplateColumn Header="全è?选?"> <DataGridTemplateColumn.HeaderTemplate> <DataTemplate> <CheckBox x:Name="CheckAll" Click="CheckAll_Click" IsChecked="{Binding IsAllChecked,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> </DataTemplate> </DataGridTemplateColumn.HeaderTemplate> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox Name="itemCheck" IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Click="IsCheckAll_Click" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
后台:
private void IsCheckAll_Click(object sender, RoutedEventArgs e) { switch (tabDBF.SelectedIndex) { case 0: //基ù表±í var dfJB = FindChild<CheckBox>(dgJB, "CheckAll"); int _count = dgJB.Items.Cast<JBClass>().Where(t => t.IsChecked).Count(); int total = dgJB.Items.Count; if (_count == total) { dfJB.IsChecked = true; isAllCheckedJB = false; } else { dfJB.IsChecked = false; isAllCheckedJB = true; } break; case 1: //综×?表±í var dfZB = FindChild<CheckBox>(dgZB, "CheckAll"); int _countZB = dgZB.Items.Cast<ZBClass>().Where(t => t.IsChecked).Count(); int totalZB = dgZB.Items.Count; if (_countZB == totalZB) { dfZB.IsChecked = true; isAllCheckedZB = false; } else { dfZB.IsChecked = false; isAllCheckedZB = true; } break; case 2: //分·?析?表±í var dfFXB = FindChild<CheckBox>(dgFXB, "CheckAll"); int _countFXB = dgFXB.Items.Cast<FXBClass>().Where(t => t.IsChecked).Count(); int totalFXB = dgFXB.Items.Count; if (_countFXB == totalFXB) { dfFXB.IsChecked = true; isAllCheckedFXB = false; } else { dfFXB.IsChecked = false; isAllCheckedFXB = true; } break; case 3: //过1y录?表±í
var dfGLB = FindChild<CheckBox>(dgGLB, "CheckAll");
int _countGLB = dgGLB.Items.Cast<GLBClass>().Where(t => t.IsChecked).Count(); int totalGLB = dgGLB.Items.Count; if (_countGLB == totalGLB) { dfGLB.IsChecked = true; isAllCheckedGLB = false; } else { dfGLB.IsChecked = false; isAllCheckedGLB = true; } break; case 4: //代′ú码?表±í var dfDMB = FindChild<CheckBox>(dgDMB, "CheckAll"); int _countDMB = dgDMB.Items.Cast<DMBClass>().Where(t => t.IsChecked).Count(); int totalDMB = dgDMB.Items.Count; if (_countDMB == totalDMB) { dfDMB.IsChecked = true; isAllCheckedGLB = false; } else { dfDMB.IsChecked = false; isAllCheckedDMB = true; } break; } //_DbfsjdcViewModel_2015.IsAllChecked = true; }
总结:该实例主要通过判断DataGrid中已选择的行数和总行数的比较来实现的
,方式比较简单,但是基本上可以实现目标要求的。在此仅作记录,以方便自己后续的
学习。如有更好的实现方案,还望各位大神不吝赐教。
相关文章推荐
- 地图定位
- 最长单调子序列问题
- 130 In your production database, users report that they are unable to generate reports on an importa
- iOS 视图控制器(ViewController)中的代码规范
- SPI 调试遇到的一个问题
- 三方登录
- php在apache中运行模式
- 基于Nodejs+express4+Mongodb+Angularjs建立web项目
- J2EE Specification level指的是什么和J2EE规范讲解
- HTML5后台管理模板
- 完全卸载oracle步骤
- ios 常见问题总结
- Linux驱动开发笔记总结(一)
- 【Android】【设计】Android 架构设计
- 【Android】【设计】Android 架构设计
- 【Android】【设计】Android 架构设计
- 【Android】【设计】Android 架构设计
- 【Android】【设计】Android 架构设计
- 【Android】【设计】Android 架构设计
- 【Android】【设计】Android 架构设计