DataGrid 简单自定义表头使用CheckBox实现全选/全不选_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > DataGrid 简单自定义表头使用CheckBox实现全选/全不选

DataGrid 简单自定义表头使用CheckBox实现全选/全不选

 2013/8/30 19:09:17  tailss  博客园  我要评论(0)
  • 摘要:有这样的一个DataGrid:想要实现选择列全选/全不选功能,应该在表头也加个CheckBox最合适。问Google,写成了下面的样子:<data:DataGridTemplateColumn.Header><CheckBoxx:Name="dgSelectAll"Content="全选"></CheckBox></data:DataGridTemplateColumn.Header>运行起来直接抛异常,继续问Google,也有人提到同样的问题
  • 标签:全选 实现 使用 tag 自定义

有这样的一个DataGrid:

想要实现选择列全选/全不选功能,应该在表头也加个CheckBox最合适。问Google,写成了下面的样子:

<data:DataGridTemplateColumn.Header>
  <CheckBox x:Name="dgSelectAll" Content="全选"></CheckBox>
</data:DataGridTemplateColumn.Header>

运行起来直接抛异常,继续问Google,也有人提到同样的问题,给出的办法是改用:DataGridTemplateColumn.HeaderStyle,如法炮制:

<data:DataGridTemplateColumn.HeaderStyle>
  <Style TargetType="localprimitives:DataGridColumnHeader">
    <Setter Property="ContentTemplate">
      <Setter.Value>
        <DataTemplate>
          <CheckBox x:Name="dgSelectAll" Content="全选"/>
        </DataTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</data:DataGridTemplateColumn.HeaderStyle>

localprimitives的名字空间为:

xmlns:localprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"

这回果然正常运行,最终的代码:

<data:DataGrid.Columns>
    <data:DataGridTemplateColumn>
        <data:DataGridTemplateColumn.HeaderStyle>
            <Style TargetType="localprimitives:DataGridColumnHeader" BasedOn="{StaticResource DataGridColumnHeaderStyle}">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <CheckBox x:Name="dgSelectAll" Content="全选" Checked="dgSelectAll_Checked" Unchecked="dgSelectAll_Unchecked" />
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </data:DataGridTemplateColumn.HeaderStyle>
        <data:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <CheckBox x:Name="ckXQ" IsChecked="{Binding Select,Mode=TwoWay}" Click="ckXQ_Click"  VerticalAlignment="Center" HorizontalAlignment="Center"/>
            </DataTemplate>
        </data:DataGridTemplateColumn.CellTemplate>
    </data:DataGridTemplateColumn>
    <data:DataGridTextColumn Header="2G/TD" Binding="{Binding Beizhu}" />
    <data:DataGridTextColumn Header="小区名称" Binding="{Binding Zh_label}" />
    <data:DataGridTextColumn Header="CI" Binding="{Binding Cell_id}" />
    <data:DataGridTextColumn Header="微蜂窝宏蜂窝" Binding="{Binding Btslx}" />
</data:DataGrid.Columns>

效果图:

题外话,<CheckBox x:Name="ckXQ" IsChecked="{Binding Select,Mode=TwoWay}" Click="ckXQ_Click",这个Click事件,开始也是使用的Checked和Unchecked事件,奇怪的是后台List数据改变有差,我选择一个,在Checked事件中查找List数据变化,竟然无变化。我选择二个,第一次选中的List数据变了,绑定的Select变为1,第二次选中的依然无变。选择三个,第二次选中的变为1,第三次选中的无变,以此类推。改用Click事件才算正常,很奇怪呀。

 

 

 

发表评论
用户名: 匿名