其他分享
首页 > 其他分享> > WPF表格复选框(全选、反选)

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