easyui中datagrid设置了一个复选框选择当前页数据,现在要用这个复选框选择所有页数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了easyui中datagrid设置了一个复选框选择当前页数据,现在要用这个复选框选择所有页数据相关的知识,希望对你有一定的参考价值。

选择所有页数据而不要翻页选,我们的分页不是每翻一页到数据库中查,而是一次全查出来初始化时loadFilter:pagerFilter,在pagerFilter函数中改变data数据的rows,求大神支招

参考技术A 想要选择所有页数据时不可能的。不过你写操作数据代码的时候,检查一下当前复选框是否被全部选中,如果被全部选中,你就操作所有数据不就行了?追问

操作数据的代码在pagerFilter(data)函数中,只有datagrid初始化和数据变化时才会经过pagerFilter,其他地方调用不了啊,再者,即使能够这样,复选框选中还不能马上生效。

追答

你选择所有数据是要进行什么操作?进行操作的代码不可能会在pagerFilter里面吧?

追问

pagerFilter只是处理分页,也就是传进data,根据当pagenum,pagesize什么的改变data.rows,达到分页的效果,选择所有数据是页面上的操作,跟后台代码没什么关系,他们要选择之后做批量跑命令什么的,现在就是前台要能全选所有,刚刚跟他们建议了把每页显示数据最大为500

追答

“选择之后做批量跑命令什么的”,选择之后调命令的地方不就可以执行全部选择的操作?每页500条数据显示,你比较狠。。。。。。

本回答被提问者采纳

c# wpf datagrid中选择所有复选框的代码

【中文标题】c# wpf datagrid中选择所有复选框的代码【英文标题】:c# code for select all checkbox in wpf datagrid 【发布时间】:2010-10-19 20:29:36 【问题描述】:

我需要一些 c# 代码来选择/取消选择 WPF 3.5 框架中数据网格中的所有复选框。 我想通过单击网格中的单个标题复选框来执行此操作。

请帮忙。

【问题讨论】:

【参考方案1】:

这可以通过声明方式完成。下面为每一行创建一个复选框列,并且可以切换行选择。可以单击复选框列的标题以选择所有行。

xaml 中的相关部分

<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit">
    <toolkit:DataGrid Name="dataGrid" 
     ItemsSource="Binding" AutoGenerateColumns="True" 
     SelectionMode="Extended" CanResizeRows="False">
    <toolkit:DataGrid.RowHeaderTemplate>
       <DataTemplate>
           <Grid>
               <CheckBox IsChecked="
                  Binding Path=IsSelected, 
                  Mode=TwoWay, 
                  RelativeSource=RelativeSource FindAncestor, 
                  AncestorType=x:Type toolkit:DataGridRow"
            />
           </Grid>
       </DataTemplate>
    </toolkit:DataGrid.RowHeaderTemplate>
    </toolkit:DataGrid>
</Window>

【讨论】:

【参考方案2】:

这是我们在 .Net 4.0 XAML 文件中使用的示例数据网格:

<DataGrid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Name="dgMissingNames" ItemsSource="Binding Path=TheMissingChildren" Style="StaticResource NameListGrid" SelectionChanged="DataGrid_SelectionChanged">
    <DataGrid.Columns>
        <DataGridTemplateColumn CellStyle="StaticResource NameListCol">
            <DataGridTemplateColumn.HeaderTemplate>
                <DataTemplate>
                    <CheckBox Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" />
                </DataTemplate>                            
            </DataGridTemplateColumn.HeaderTemplate>
            <DataGridTemplateColumn.CellTemplate>                        
                <DataTemplate>
                    <CheckBox IsChecked="Binding Path=Checked, UpdateSourceTrigger=PropertyChanged" Name="theCheckbox"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>                            
        </DataGridTemplateColumn>
        <DataGridTextColumn Binding="Binding Path=SKU" Header="Album" CellStyle="StaticResource NameListCol"/>
        <DataGridTextColumn Binding="Binding Path=Name" Header="Name" CellStyle="StaticResource NameListCol"/>
        <DataGridTextColumn Binding="Binding Path=Pronunciation" Header="Pronunciation" CellStyle="StaticResource NameListCol"/>
    </DataGrid.Columns>
</DataGrid>

下面是代码:

private void HeadCheck(object sender, RoutedEventArgs e, bool IsChecked)

    foreach (CheckedMusicFile mf in TheMissingChildren)
    
        mf.Checked = IsChecked;
    
    dgMissingNames.Items.Refresh();


private void CheckBox_Checked(object sender, RoutedEventArgs e)

    HeadCheck(sender, e, true);


private void CheckBox_Unchecked(object sender, RoutedEventArgs e)

    HeadCheck(sender, e, false);

TheMissingChildren 是一个简单的对象结构,具有一些字符串属性和一个 ischecked 布尔值。

HTH。

【讨论】:

如果您不打算在 HeadCheck 中使用 sender 对象或 routedeventargs,则不应将它们传入 UpdateSourceTrigger=PropertyChanged 确实对我有帮助。谢谢。【参考方案3】:

这是基于我不记得的其他人的来源,但我们使用它来帮助查找某种类型的视觉子项。对于这种情况,它可能不是最有效的用法,但它可能会帮助您走上正轨。

    public static childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
    
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        
            DependencyObject child = VisualTreeHelper.GetChild(obj, i);
            if (child != null && child is childItem)
                return (childItem)child;

            childItem childOfChild = FindVisualChild<childItem>(child);
            if (childOfChild != null)
                return childOfChild;
        
        return null;
    

[编辑 4.16.09] 在此基础上,试试这个方法。应该找到所有 CheckBox 并更改提供的状态,可从您的事件处理程序对 Checked/Unchecked 事件调用。

   public static void CheckAllBoxes(DependencyObject obj, bool isChecked)
    
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        
            // If a checkbox, change IsChecked and continue.
            if (obj is CheckBox)
            
                ((CheckBox) obj).IsChecked = isChecked;
                continue;
            

            DependencyObject child = VisualTreeHelper.GetChild(obj, i);
            CheckAllBoxes(child, isChecked);
        
    

【讨论】:

【参考方案4】:

我会使用 WPF 中的新数据绑定功能。为所有复选框的 IsChecked 属性提供单向绑定,绑定源是主复选框的 IsChecked 属性。

另一种选择是使用触发器

【讨论】:

【参考方案5】:
DataColumn dt = null;            
        for (int i = 0; i < dataGrid.Columns.Count; i++)
        

     dt = new DataColumn("Column Name");

            dt.DataType = typeof(Boolean);
            dt.DefaultValue = false;
             dataTable.Add(dt);
        

dataGied.DataContext = dataTable;



<Custom:DataGrid x:Name="dataGrid" AutoGenerateColumns="True" ItemsSource="Binding" />                    

这只是一个粗略的想法,希望这可行

【讨论】:

以上是关于easyui中datagrid设置了一个复选框选择当前页数据,现在要用这个复选框选择所有页数据的主要内容,如果未能解决你的问题,请参考以下文章

解决easyui datagrid单选时复选框不取消问题

easyui的datagrid如何去除复选框

求助Easyui datagrid 的默认选中问题

求教一个easyui的问题 datagrid中怎么加复选框

easyui 的复选框问题!!!

easyui datagrid 怎么去除单击行选中事件