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 ...
随机推荐
- C# WPF 粘贴板记录器
工作学习中需要搜索很多资料,有建立文档对遇到过的问题进行记录,但是一来麻烦,二来有些当时认为不重要的事情,也许一段时间后认为是重要的,需要记录的,却又一时找不到,浪费时间做重复的事情.正好借着这个机会 ...
- python3 完全平方数(循环)
题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 代码: for i in range(1,85): if 168 % i == 0: j = 168 ...
- Python基础——模块与包
在Python中,可以用import导入需要的模块.包.库.文件等. 把工作路径导入系统路径 import os#os是工作台 import sys#sys是系统 sys.path.append(os ...
- 这五本Python急速入门必读的书,送给正在学习Python的你!
书籍是人类进步的阶梯,这句话从古至今都是适用的.为什么会这么说呢?书籍,它记录了人们实践的经验,这些经验有助于我们快速的学习,对于编程学习来说也不例外,今天就给大家带来了以下的书籍干货,希望能够帮助到 ...
- POJ - 2250 Compromise (LCS打印序列)
题意:给你两个单词序列,求出他们的最长公共子序列. 多组数据输入,单词序列长度<=100,单词长度<=30 因为所有组成LCS的单词都是通过 a[i] == b[j] 更新的. 打印序列的 ...
- Nordic Collegiate Programming Contest 2015 E. Entertainment Box
Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...
- 算法导论 第七章 快速排序(python)
用的最多的排序 平均性能:O(nlogn){随机化nlogn} 原地址排序 稳定性:不稳定 思想:分治 (切分左右) 学习方式:自己在纸上走一遍 def PARTITION(A,p,r): x = ...
- NAT(地址转换技术)详解(转载)
作者:逃离地球的小小呆 来源:CSDN 原文:https://blog.csdn.net/gui951753/article/details/79593307版权声明:本文为博主原创文章,转载请附上博 ...
- 聊聊、Highcharts 动态数据
最近项目中需要用到图表,找了几个开源框架,最后选择 Highcharts,原因是 Highcharts 功能强大,稳定,方便,而且开源,社区比较成熟. 首先下载 Highcharts,导入项目. 在 ...
- 通过performance schema收集慢查询
MySQL5.6起performance schema自动开启,里面涉及记录 statement event的表 mysql> show tables like '%statement%'; + ...