Wpf DataGrid 数据绑定 排序 删除
2011-05-26 10:49
357 查看
初学wpf今天做一个菜鸟级别实例,只适合菜鸟.
先上图
说明一下功能:显示总条数,选中条数.全选.点击datagrid勾选,也可多选
datagrid绑定的数据是用的一个数据过渡类,如有一个Student类,类中有Id,Name...
但没有总条数也没有当前选中条数(当然还有其他情况会跟这种情况类似时也会用到)
所以我就构造一个数据过渡类StudentData
//数据实体类代码
数据实体已经写好,则需要绑定数据了,绑定数据代码
既然数据已经绑定好了,那就贴出xmal的代码,注意datagrid的 CanUserAddRows属性得置为false,不然DataGrid会
在尾部多出一行,意思为是否允许用户增加行.
以下是页面中的事件处理
先上图
说明一下功能:显示总条数,选中条数.全选.点击datagrid勾选,也可多选
datagrid绑定的数据是用的一个数据过渡类,如有一个Student类,类中有Id,Name...
但没有总条数也没有当前选中条数(当然还有其他情况会跟这种情况类似时也会用到)
所以我就构造一个数据过渡类StudentData
//数据实体类代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | public class PropertyChangedBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void Notify(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } public class StudentData : PropertyChangedBase { private Student _student; public Student student { get { return _student; } set { _student = value; Notify("student"); } } private int _Count=0; /// <summary> /// 总条数 /// </summary> public int Count { get { return _Count; } set { _Count = value; Notify("Count"); } } private int _IsCheckedCount=0; /// <summary> /// 当前选中条数 /// </summary> public int IsCheckedCount { get { return _IsCheckedCount; } set { _IsCheckedCount = value; Notify("IsCheckedCount"); } } } public class Student : PropertyChangedBase { private string _Id; public string Id { get { return _Id; } set { _Id = value; Notify("Id"); } } private string _Name; public string Name { get { return _Name; } set { _Name = value; Notify("Name"); } } public bool _IsChecked; /// <summary> /// 是否选中 /// </summary> public bool IsChecked { get { return _IsChecked; } set { _IsChecked = value; Notify("IsChecked"); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /// <summary> /// 数据过渡类集合 /// </summary> List<StudentData> LStudentData = new List<StudentData>(); List<Student> stuList { get; set; } public void GetData() { //获取学生数据集合 stuList = new List<Student> { new Student{Id="001",Name="zenghai1",IsChecked=false}, new Student{Id="002",Name="zenghai2",IsChecked=false}, new Student{Id="003",Name="zenghai3",IsChecked=false}, new Student{Id="004",Name="zenghai4",IsChecked=false}, new Student{Id="005",Name="zenghai5",IsChecked=false}, }; //循环学生数据,并添加到数据过渡集合中 foreach (var item in stuList) { StudentData listStu = new StudentData(); listStu.student = item; listStu.Count = stuList.Count; listStu.IsCheckedCount = stuList.Count(p => p.IsChecked == true); LStudentData.Add(listStu); } //绑定 Grid_Data.DataContext = LStudentData; } |
在尾部多出一行,意思为是否允许用户增加行.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <Grid Name="Grid_Data"> <Grid.RowDefinitions> <RowDefinition Height="30" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid Grid.Row="0"> <StackPanel Orientation="Horizontal"> <TextBlock VerticalAlignment="Center"> <TextBlock Text="当前总条数"></TextBlock> <TextBlock Text="{Binding Path=Count}"></TextBlock> <TextBlock Text="条"></TextBlock> </TextBlock> <TextBlock VerticalAlignment="Center" Margin="10,0,0,0" > <TextBlock Text="当前选中条数"></TextBlock> <TextBlock x:Name="Tb_SelectCount" Text="{Binding Path=IsCheckedCount}"></TextBlock> <TextBlock Text="条"></TextBlock> </TextBlock> <Button Name="btn_delete" Click="btn_delete_Click" Content="删除选中" VerticalAlignment="Center" Margin="10,0,0,0"></Button> </StackPanel> </Grid> <Grid Grid.Row="1"> <DataGrid Name="DgQuestion" ItemsSource="{Binding }" Margin="0" Background="White" SelectionChanged="DgQuestion_SelectionChanged" CanUserAddRows="False" AutoGenerateColumns="False" HorizontalGridLinesBrush="#FFD1CFCF" VerticalGridLinesBrush="#FFD1CFCF"> <DataGrid.CellStyle> <Style TargetType="DataGridCell"> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="#DBEDF8"/> <Setter Property="BorderBrush" Value="#DBEDF8"/> <Setter Property="Foreground" Value="Black"/> </Trigger> </Style.Triggers> </Style> </DataGrid.CellStyle> <DataGrid.Columns> <DataGridTemplateColumn> <DataGridTemplateColumn.Header> <CheckBox Content="全 选" x:Name="cBox_All" Click="cBox_All_Click"></CheckBox> </DataGridTemplateColumn.Header> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding Path=student.IsChecked}"></CheckBox> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTextColumn Header="名称" Width="*" Binding="{Binding Path=student.Name}" IsReadOnly="True"/> </DataGrid.Columns> </DataGrid> </Grid> </Grid> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | //全选按钮事件 private void cBox_All_Click(object sender, RoutedEventArgs e) { CheckBox cb = sender as CheckBox; LStudentData.FindAll(p => { p.student.IsChecked = cb.IsChecked.Value; p.Count = stuList.Count; return true; }); LStudentData.FindAll(p => { p.IsCheckedCount = stuList.Count(t => t.IsChecked == true); return true; }); } //DataGrid SelectionChanged private void DgQuestion_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (DgQuestion.SelectedItems.Count > 1) { foreach (var item in e.AddedItems) { if (item is StudentData) { bool isChecked = (item as StudentData).student.IsChecked; (item as StudentData).student.IsChecked = true; } } } else { if (e.AddedItems.Count ==1) { if (e.AddedItems[0] is StudentData) { bool isChecked = (e.AddedItems[0] as StudentData).student.IsChecked; if (isChecked) (e.AddedItems[0] as StudentData).student.IsChecked = false; else (e.AddedItems[0] as StudentData).student.IsChecked = true; } } } LStudentData.FindAll(p => { p.IsCheckedCount = stuList.Count(t => t.IsChecked == true); return true; }); } //删除选中按钮事件 private void btn_delete_Click(object sender, RoutedEventArgs e) { LStudentData = LStudentData.FindAll(p => { if (p.student.IsChecked) { p.student.IsChecked = false; return p.student.Id!=p.student.Id;} return true; }); LStudentData.FindAll(p => { p.Count = LStudentData.Count; return true; }); LStudentData.FindAll(p => { p.IsCheckedCount = LStudentData.Count(t => t.student.IsChecked == true); return true; }); if (LStudentData.Count == 0) Tb_SelectCount.Text = "0"; Grid_Data.DataContext = LStudentData; } } |
相关文章推荐
- Wpf DataGrid 数据绑定 排序 删除
- wpf datagrid绑定数据中每行都有删除按钮
- wpf datagrid中的 DataGridComboBoxColumn数据绑定
- WPF DataGrid 数据绑定
- WPF使用MVVM完成DataGrid数据绑定带全选
- WPF 数据绑定TreeView+DataGrid+XML
- WPF的DataGrid数据源中的数据更新后,如何保持视图正确排序
- WPF快速指导13:数据绑定之集合绑定之视图(排序、过滤、分组)
- WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- WPF DataGrid 之数据绑定
- WPF中DataGrid数据绑定(泛型和datatable)
- WPF DataGrid 绑定DataSet数据 自动生成行号
- WPF入门(四)-WPF+LINQ实现数据绑定、交互及简单datagrid样式
- WPF学习1 DataGrid 采用模板列进行数据绑定
- Flex中DataGrid绑定ComboBox ,自动显示行号,增加行,删除行,保存数据
- WPF,DataGrid数据绑定
- WPF Datagrid Header数据绑定,表头复选框实现全选、全否、部分选中,根据条目动态变化
- wpf datagrid 数据绑定
- WPF DataGrid 数据绑定、样式、分页、增删改查,连接Access数据库
- WPF ListView点击删除某一行并获取绑定数据