本文主要是介绍DataGrid中的全选和单选的功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在WPF中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中已选择的行数和总行数的比较来实现的
,方式比较简单,但是基本上可以实现目标要求的。在此仅作记录,以方便自己后续的
学习。如有更好的实现方案,还望各位大神不吝赐教。
这篇关于DataGrid中的全选和单选的功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!