<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的更多相关文章

  1. WPF gridcontrol 后台代码清除过滤筛选条件

    WPF 后台清除gridcontrol过滤筛选条件: ColumnName:列名 user_GridControl:gridcontrol控件名 user_GridControl.ClearColum ...

  2. WPF GridControl单元格值与过滤值相同时,改变单元格背景色

    DataTrigger的Value不可绑定,所以我们需要用MultiBinding来实现这个功能. <dxg:TableView.CellStyle> <Style TargetTy ...

  3. DevExpress v17.2新版亮点—WPF篇(二)

    用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WPF v17.2 新的Hamburger Menu.Sched ...

  4. 【WPF】GridControl的使用

    一.前言 在WPF中我们常常使用DataGrid来显示数据,在Dev中也有一个类似的控件—GridControl. 二.范例 <dxg:GridControl Grid.Row=" I ...

  5. WPF界面开发:DevExpress WPF在GridControl中固定行时处理时刻

    DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...

  6. WPF datagrid/gridcontrol 中选中多行,复制粘贴到excel或其他文本编辑器中

    wpf中 data grid 开启自带的选中,然后复制,可以到excel中直接粘贴,在某些业务场景中很实用,方便.开启也很简单: SelectionMode="Row" 加上这个, ...

  7. [Irving] Wpf DevexPress GridControl 获取选中行

    WPF前台绑定事件代码: <RelayAction TargetControl="{Binding ElementName=GCInstoragePart}" MethodN ...

  8. 为WPF版的GridControl控件添加行序号功能

    废话不多数,先上效果图和代码: 包装GridControl控件 cs using DevExpress.Xpf.Data; using DevExpress.Xpf.Grid; using Syste ...

  9. WPF DEV gridcontrol 自定义计算列(TotalSummary)

    /// <summary> /// 自定义计算列 /// </summary> /// <param name="sender"></pa ...

随机推荐

  1. VS/Qt C++和Matlab混合编程

    最近两天在搞C++和Matlab混合编程,这个中间过程真是让人心酸啊,最后还是搞定成功!现在把这个过程记录一下. 首先自己的电脑本来就安装着matlab2013b,按着网上的说法首先需要输入!mcc, ...

  2. Ubuntux下简单设置vim

    我自己在vim下的设置,基本写简单脚本用的,在~/.vimrc作出如下设置 syntax on "高亮 set nu "行号显示 set smartindent "基于a ...

  3. guava笔记

    ​guava是在原先google-collection 的基础上发展过来的,是一个比较优秀的外部开源包,最近项目中使用的比较多,列举一些点.刚刚接触就被guava吸引了... ​    ​这个是gua ...

  4. Java Web系统常用的第三方接口

    1.    Web Service 接口 1.1 接口方式说明和优点 在笔者的开发生涯中,当作为接口提供商给第三方提供接口时,以及作为客户端去调用第三方提供的接口时,大部分时候都是使用 Web  Se ...

  5. R-codes-tips

    1. 在shell执行R文件 chmod 0755 file.R Rscript file.R 2.  载入数据 data(dune) 3. attach() 将data.frame添加到R的搜索路径 ...

  6. LeetCode(154) Find Minimum in Rotated Sorted Array II

    题目 Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are allowed? W ...

  7. bash之条件测试if/else

    bash之条件测试:     if/then结构         条件测试(CONDITION):         test EXPRESSION:测试条件表达式正确否         [ EXPRE ...

  8. 关于前台jsp页面的js取值问题

    在后程序中传一个字符串到前台页面上,后台代码model.addAttribute("ccc", "cccc"); 在页面js上用下面两种方法取值 1. var ...

  9. 全网最详细python中socket套接字send与sendall的区别

    将数据发送到套接字. 套接字必须连接到远程套接字.  返回发送的字节数. 应用程序负责检查是否已发送所有数据; 如果仅传输了一些数据, 则应用程序需要尝试传递剩余数据.(需要用户自己完成) 将数据发送 ...

  10. [POJ 1008] Maya Calendar C++解题

        Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 62297   Accepted: 192 ...