wpf GridControl selectAll UnSelect
<Window x:Class="WpfApplication1.GridControlView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
Title="GridControlView" >
<Grid>
<StackPanel>
<Button Click="BtnInvert_Click">Invert selection</Button>
<Button Click="BtnGetSelected_Click">Get selection</Button>
<dxg:GridControl x:Name="grid" CustomUnboundColumnData="grid_CustomUnboundColumnData" Height="" ItemsSource="{Binding List}">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Id" />
<dxg:GridColumn FieldName="Number" />
<dxg:GridColumn FieldName="Selected" UnboundType="Boolean" AllowSorting="False">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxe:CheckEdit IsChecked="{Binding Data.Selected}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView x:Name="view" AutoWidth="True" />
</dxg:GridControl.View>
</dxg:GridControl>
</StackPanel>
</Grid>
</Window>
GridControlView.xaml
/// <summary>
/// GridControlView.xaml 的交互逻辑
/// </summary>
public partial class GridControlView : Window
{
public GridControlView()
{
InitializeComponent();
//Dxsl.LoginManage.ViewModels.LookupControlViewModel viewModel = new Dxsl.LoginManage.ViewModels.LookupControlViewModel(); //this.DataContext = viewModel;
DataContext = data;
} TestData data = new TestData();
SelectionHelper<Guid> selectionHelper = new SelectionHelper<Guid>(); /// <summary>
/// Grid触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void grid_CustomUnboundColumnData(object sender, GridColumnDataEventArgs e)
{
if (e.Column.FieldName != "Selected") return;
Guid key = (Guid)e.GetListSourceFieldValue("Id");
if (e.IsGetData)
e.Value = selectionHelper.GetIsSelected(key);
if (e.IsSetData)
selectionHelper.SetIsSelected(key, (bool)e.Value);
}
/// <summary>
/// 全选或者反选
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnInvert_Click(object sender, RoutedEventArgs e)
{
for (int i = ; i < data.List.Count; i++)
{
int rowHandle = this.grid.GetRowHandleByListIndex(i);
bool newIsSelected = !selectionHelper.GetIsSelected(data.List[i].Id);
grid.SetCellValue(rowHandle, "Selected", newIsSelected);
}
}
/// <summary>
/// 获取选中项
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnGetSelected_Click(object sender, RoutedEventArgs e)
{
string caption = string.Format("Selected rows (Total: {0})", selectionHelper.GetSelectionCount());
MessageBox.Show(selectionHelper.GetSelectedKeysAsString(), caption);
}
}
GridControlView
/// <summary>
/// 选择帮助类
/// </summary>
/// <typeparam name="KeyType">类型</typeparam>
public class SelectionHelper<KeyType>
{
/// <summary>
/// 选中集合字典
/// </summary>
Dictionary<KeyType, bool> selectedValues = new Dictionary<KeyType, bool>();
/// <summary>
/// 获取key是否被选中
/// </summary>
/// <param name="key">key 值</param>
/// <returns></returns>
public bool GetIsSelected(KeyType key)
{
//声明是否选择变量,默认为false
bool isSelected;
if (selectedValues.TryGetValue(key, out isSelected))
return isSelected;
return false;
}
/// <summary>
/// 设置选中项的值
/// </summary>
/// <param name="key">key 值</param>
/// <param name="value">true or false</param>
public void SetIsSelected(KeyType key, bool value)
{
if (value)
selectedValues[key] = value;
else
selectedValues.Remove(key);
}
/// <summary>
/// 获取集合字典中的选中项
/// </summary>
/// <returns></returns>
public List<KeyType> GetSelectedKeys()
{
List<KeyType> list = new List<KeyType>();
//遍历集合
foreach (KeyType key in selectedValues.Keys)
list.Add(key);
return list;
}
/// <summary>
/// 获取集合中项 加入StringBuilder 仅测试用
/// </summary>
/// <returns></returns>
public string GetSelectedKeysAsString()
{
List<KeyType> list = GetSelectedKeys();
StringBuilder str = new StringBuilder();
for (int i = ; i < list.Count; i++)
str.AppendLine(list[i].ToString());
return str.ToString();
}
/// <summary>
/// 获取选择数量
/// </summary>
/// <returns></returns>
public int GetSelectionCount()
{
return selectedValues.Count;
}
}
SelectionHelper
public class TestData
{
public List<TestDataItem> List { get; private set; }
public TestData()
{
List<TestDataItem> list = new List<TestDataItem>();
for (int i = ; i < ; i++)
{
list.Add(new TestDataItem() { Id = Guid.NewGuid(), Number = i });
}
List = list;
}
}
TestData
public class TestDataItem
{
public Guid Id { get; set; }
public int Number { get; set; }
}
TestDataItem
wpf GridControl selectAll UnSelect的更多相关文章
- WPF gridcontrol 后台代码清除过滤筛选条件
WPF 后台清除gridcontrol过滤筛选条件: ColumnName:列名 user_GridControl:gridcontrol控件名 user_GridControl.ClearColum ...
- WPF GridControl单元格值与过滤值相同时,改变单元格背景色
DataTrigger的Value不可绑定,所以我们需要用MultiBinding来实现这个功能. <dxg:TableView.CellStyle> <Style TargetTy ...
- DevExpress v17.2新版亮点—WPF篇(二)
用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WPF v17.2 新的Hamburger Menu.Sched ...
- 【WPF】GridControl的使用
一.前言 在WPF中我们常常使用DataGrid来显示数据,在Dev中也有一个类似的控件—GridControl. 二.范例 <dxg:GridControl Grid.Row=" I ...
- WPF界面开发:DevExpress WPF在GridControl中固定行时处理时刻
DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...
- WPF datagrid/gridcontrol 中选中多行,复制粘贴到excel或其他文本编辑器中
wpf中 data grid 开启自带的选中,然后复制,可以到excel中直接粘贴,在某些业务场景中很实用,方便.开启也很简单: SelectionMode="Row" 加上这个, ...
- [Irving] Wpf DevexPress GridControl 获取选中行
WPF前台绑定事件代码: <RelayAction TargetControl="{Binding ElementName=GCInstoragePart}" MethodN ...
- 为WPF版的GridControl控件添加行序号功能
废话不多数,先上效果图和代码: 包装GridControl控件 cs using DevExpress.Xpf.Data; using DevExpress.Xpf.Grid; using Syste ...
- WPF DEV gridcontrol 自定义计算列(TotalSummary)
/// <summary> /// 自定义计算列 /// </summary> /// <param name="sender"></pa ...
随机推荐
- 【Mysql】Mysql主从库搭建过程(爬完坑后整理所得)
Mysql主从数据库搭建流程 新手开始学习mysql主从库,遇到一些问题,总结后写出以下流程 下面以5.7.23版本为例介绍 第一步:去官网下载5.7.23版本的免安装压缩包形式的mysql文件,贴上 ...
- 不依赖Hibernate的万能BaseDao---模仿了Hibernate底层的原理
今天写了个万能的BaseDao:有了这个BaseDao以后的Dao层直接继承这个BaseDao就能直接操作数据库了,增删改查,这是一个简易的Hibernate模型.写这个BaseDao的原因是最近在学 ...
- Python中关于函数的介绍
一.什么是函数 当我们在日常工作中编写代码时,有没有发现这种情况,写了一套代码,却发现里面有很多段代码出现了有规律的重复,这样就不符合一个合格程序员的标准了,一个合格的程序员编写的代码最重 ...
- LeetCode(278)First Bad Version
题目 You are a product manager and currently leading a team to develop a new product. Unfortunately, t ...
- stm32F4中断分析-HAL库
详细可以参考: STM32使用HAL库操作外部中断——实战操作 https://www.cnblogs.com/wt88/p/9624103.html /** ******************** ...
- python format 用法详解
format 用法详解 不需要理会数据类型的问题,在%方法中%s只能替代字符串类型 单个参数可以多次输出,参数顺序可以不相同 填充方式十分灵活,对齐方式十分强大 官方推荐用的方式,%方式将会在后面的版 ...
- Mysql新建数据库、删除数据库
新建数据库 create database db_name; //db_name为新建数据库的名字 mysql> create database db_name; Query OK, row a ...
- MiniProfiler监控调试MVC5以及EntityFramework6性能
想要通过在MVC中view中直观的查看页面加载以及后台EF执行情况,可以通过MiniProfiler小工具来实现. 但是从网上搜索的相关信息要么是MVC4下的老版本的MiniProfiler,要么就是 ...
- 1512 Monkey King
Monkey King Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- OO第四单元博客
第四单元博客 这个单元的作业,emmmm助教们做的工作还是一如既往的多,我们只负责添一添代码,最后一次作业了,感谢各位助教和老师,同时也希望我能顺利通过这最后一关. 架构设计 第一次作业架构展示 第一 ...