ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

WPF表格复选框(全选、反选)

2020-12-30 11:33:49  阅读:258  来源: 互联网

标签:CheckBox 表格 objElement 反选 Memberes 复选框 全选 objChk WPF


开发工具与关键技术: Visual Studio 2017、C#语言、WPF
作者:邓李庆
撰写时间: 2019年12月18日
下面写一个表格数据复选框(全选、反选),在表格中添加CheckBox 然后在复选框标签中添加一个Click按钮。直接上代码:

  <DataGrid x:Name="Memberes" VerticalAlignment="Top" AutoGenerateColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" 
                              RowHeaderWidth="0" CanUserReorderColumns="False" AlternationCount="2" CanUserAddRows="False" EnableColumnVirtualization="False"
                              Height="480" SelectionChanged="Memberes_SelectionChanged">
                        <DataGrid.Columns>
                            <DataGridCheckBoxColumn Binding="{Binding Path=IsSelected,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}}" ElementStyle="{StaticResource DataGridCheckBox}">
                                <DataGridCheckBoxColumn.HeaderTemplate>
                                    <DataTemplate>
                                        <CheckBox Margin="5" x:Name="ckbSelectedAll" Click="CheckAll_Click"/>
                                    </DataTemplate>
                                </DataGridCheckBoxColumn.HeaderTemplate>
                            </DataGridCheckBoxColumn>
                            <DataGridTextColumn Visibility="Collapsed" Binding="{Binding MemberID}"></DataGridTextColumn>
                            <DataGridTextColumn Header="姓名" IsReadOnly="True" ElementStyle="{StaticResource DataGridSytle}" Binding="{Binding MemberName}" Width="2*"></DataGridTextColumn>
                            <DataGridTextColumn Header="性别" IsReadOnly="True" ElementStyle="{StaticResource DataGridSytle}" Binding="{Binding Sex}" Width="1*"></DataGridTextColumn>
                            <DataGridTextColumn Header="出生日期" IsReadOnly="True" ElementStyle="{StaticResource DataGridSytle}" Binding="{Binding Birthday,StringFormat=\{0:yyyy-MM-dd\}}" Width="2*"></DataGridTextColumn>
                            <DataGridTextColumn Header="身份证" IsReadOnly="True" ElementStyle="{StaticResource DataGridSytle}" Binding="{Binding Certificatetypenumber}" Width="4*"></DataGridTextColumn>
                            <DataGridTextColumn Header="电话" IsReadOnly="True" ElementStyle="{StaticResource DataGridSytle}" Binding="{Binding Phonenumber}" Width="3*"></DataGridTextColumn>
                            <DataGridTextColumn Header="地址" IsReadOnly="True" ElementStyle="{StaticResource DataGridSytle}" Binding="{Binding Site}" Width="7*"></DataGridTextColumn>
                            <DataGridTextColumn Header="登记日期" IsReadOnly="True" ElementStyle="{StaticResource DataGridSytle}" Binding="{Binding Datetime,StringFormat=\{0:yyyy-MM-dd\}}" Width="2*"></DataGridTextColumn>
                            <DataGridTemplateColumn Header="状态" Width="2*">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding Whethere}"
                                       Foreground="{Binding Whethere,Converter={StaticResource DataColorConverterStyle}}"></TextBlock>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
                        </DataGrid.Columns>
                    </DataGrid>

然后在后端的Click的方法里面写,用for循环进行循环表格的条数、DataGrid里面的Name值:Memberes。看代码:

  /// <summary>
        /// 复选框(全选、反选)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CheckAll_Click(object sender, RoutedEventArgs e)
        {
            for (int i = 0; i < this.Memberes.Items.Count; i++)
            {
                var cntr = Memberes.ItemContainerGenerator.ContainerFromIndex(i);
                DataGridRow ObjROw = (DataGridRow)cntr;
                if (ObjROw != null)
                {
                    FrameworkElement objElement = Memberes.Columns[0].GetCellContent(ObjROw);
                    if (objElement != null)
                    {
                        System.Windows.Controls.CheckBox objChk = (System.Windows.Controls.CheckBox)objElement;
                        if (objChk.IsChecked == false)
                        {
                            objChk.IsChecked = true;
                        }
                        else
                        {
                            objChk.IsChecked = false;
                        }
                    }
                }
            }
        }

然后运行的效果:
在这里插入图片描述

标签:CheckBox,表格,objElement,反选,Memberes,复选框,全选,objChk,WPF
来源: https://blog.csdn.net/weixin_44547508/article/details/111951952

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有