开发工具与关键技术: 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;
}
}
}
}
}
然后运行的效果: