关于怎样获取DevExpress GridView过滤后或排序后的数据集问题(转)

GridView用自带的过滤功能过滤数据后,想要获取过滤后的数据集,有两种方式:

一、笨办法就是循环遍历GridView,根据gridView.GetRow()或者gridView.GetDataRow()(该方法返回DataRow类型,使用于数据源是DataTable)去获取指定handle对应的数据对象。

1、若GridControl绑定的数据源是List类型,可以调用以下方法

/// <summary>
/// 获取GridView过滤或排序后的数据集
/// </summary>
/// <typeparam name="T">泛型对象</typeparam>
/// <param name="view">GridView</param>
/// <returns></returns>
public IEnumerable<T> GetGridViewFilteredAndSortedData<T>(DevExpress.XtraGrid.Views.Grid.GridView view) where T : class
{
var list = new List<T>();
for (int i = 0; i < view.RowCount; i++)
{
if (view.IsGroupRow(i))
continue;
var entity = view.GetRow(i) as T;
if (entity == null)
continue;
list.Add(entity);
}
return list;
}

2、若GridControl绑定的数据源是DataTable类型,可以调用以下方法:
<pre name="code" class="csharp"> /// <summary>
/// 获取GridView过滤或排序后的数据集
/// </summary>
/// <param name="view">GridView</param>
/// <returns></returns>
public DataTable GetGridViewFilteredAndSortedDataToDataTable(DevExpress.XtraGrid.Views.Grid.GridView view)
{
DataTable _dt = view.GridControl.DataSource as DataTable;
if (_dt == null)
return null;
DataTable dt = _dt.Clone();
for (int i = 0; i < view.RowCount; i++)
{
if (view.IsGroupRow(i))
continue;
var dr = view.GetDataRow(i);
if (dr == null)
continue;
dt.Rows.Add(dr.ItemArray);
}
return dt;
}

第二种方法:估计大伙很难找到,DevExpress 的GridView竟然提供了相应的方法,但是奇怪的是编译器竟然没有显示,就是在GridView的基类BaseView中提供了DataController这个对象,查看了这个属性后发现竟然真的被屏蔽了,EditorBrowsable竟然是Never状态(我也表示一脸懵逼)

当然,屏蔽了,不代表他没有这个属性,那就一脸懵逼的使用吧,DataController提供一个获取过滤后和排序后的数据集的方法:GetAllFilteredAndSortedRows()

为了不每次都懵逼的去这样直接调用,最好还是写一个公用方法去调用吧

<pre name="code" class="csharp"> /// <summary>
/// 获取GridView过滤或排序后的数据集
/// </summary>
/// <param name="view"></param>
/// <returns></returns>
public System.Collections.IList GetGridViewFilteredAndSortedData(DevExpress.XtraGrid.Views.Grid.GridView view)
{
return view.DataController.GetAllFilteredAndSortedRows();
}

---------------------
作者:涛神-Dev
来源:CSDN
原文:https://blog.csdn.net/u012097590/article/details/52777437
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/xihong2014/p/10757369.html

时间: 2024-10-20 02:22:00

关于怎样获取DevExpress GridView过滤后或排序后的数据集问题(转)的相关文章

让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出

题目: 让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出 (1)方法1 方法1:先将数组元素原先的对应位置记录在另一个数组中       并在进行选择排序的过程中,交换数组元素的同时也交换对应位置数组中的对应元素值 /* 选择法排序 并在排序后的数组元素在原先数组的对应位置输出 方法1:先将数组元素原先的对应位置记录在另一个数组中 并在进行选择排序的过程中,交换数组元素的同时也交换对应位置数组中的对应元素值 */ #include <iostream> using name

DevExpress gridview获取单元格坐标

获取坐标(在RowCellClick事件中)的代码如下: private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) { //获取点击单元格左上角的坐标 GridViewInfo info = gridView1.GetViewInfo() as GridViewInfo; GridCellInfo cellInfo = info.GetGri

DevExpress gridview下拉框repositoryItemComboBox的使用

本以为DevExpress gridview中的下拉框会像比原来的datatgridview中的下拉框绑定数据简单好用,没想到费了老大劲,查阅各种资料总算是绑定上了数据,并且能够实现想要的效果.下面就详细写一下这个实现的过程,分享一下,同时也是对这个知识再次熟悉一遍. 一.绑定前准备 这一部分基本上是一些基础的知识,但也有些地方要注意的. 1.添加下拉框列 在Grid Designer中,添加一列,在这列的ColumnEdit熟悉中,可以选择这列的编辑样式,比如让这列是一个按钮或者选择框等等,这

DevExpress gridview下拉框(三)

经过前两次的探索和研究(DevExpress gridview下拉框repositoryItemComboBox的使用 ,DevExpress gridview下拉框的再次研究),今天实习工作上终于用到了,但发现并不能满足我的需求. 当我们绑定了数据源(如:bindingSource1.DataSource = dt)之后,只要我们对gridview单元格数据进行操作,dt也会跟着变.但是我的repositoryItemComboBox绑定了一个Item,Item包含显示值和实际值.Item中的

DevExpress GridView 列标题点击事件

GridView有RowCellClick事件,即单元格点击事件,但是针对列标题行以及列标题单元格却没有相应的事件. 在这里使用GridView的MouseDown事件.这里同样使用的是GridHitInfo来获取点击位置的信息,来判断是否在列标题上.GridHitInfo根据鼠标点击的x.y坐标获取该点的相关信息,判断是否点击在列标题行内. private void gridView_MouseDown(object sender, MouseEventArgs e) { //鼠标左键点击 i

DevExpress gridview下拉框的再次研究

前几天写了一篇关于研究DevExpress gridview下拉框的随笔(DevExpress gridview下拉框repositoryItemComboBox的使用),被大神(@爱编程的大叔)评论为:成功用世界上最繁琐的方法来使用Devexpress中的Gridview控件中的下拉框,之后就一直在想那肯定是还有更加简便的办法,刚好今天有空闲时间,就去了官网研究起了gridControl的属性(https://documentation.devexpress.com/#WindowsForms

DevExpress GridView 那些事儿

1:去除 GridView 头上的 "Drag a column header here to group by that column" -->  点击 Run Designer  -> 找到:OptionView ->  将 ShowGroupPanel : 设置为 false ; 2:如何 显示出 GridView 自带的 搜索功能 -->  点击 Run Designer  ->  找到: OptionsFind -> 将AlwaysVisi

Devexpress GridView.CustomSummaryCalculate 实现自定义Group Summary

--首发于博客园, 转载请保留此链接  博客原文 DevExpress Documentation官方地址:GridView.CustomSummaryCalculate Event 1. 概要 界面上 GridView 显示的数据里某些字段在读出来的时候已经 SUM By FieldA ,在界面上统计时就不能简单累计总和,条件是 FieldA 相同不能重复相加. 2. 问题 view SalesOrderLineList 中,RealTimeStockTotalQuantity 与 RealT

js获取给定月份的N个月后的日期

1.在讲js获取给定月份的N个月后的日期之前,小颖先给大家讲下getFullYear().getYear()的区别. ①getYear() var d = new Date() console.log(d.getYear()); 打印结果为:116 小颖百度了下,js中Date对象getYear()方法和getFullYear()方法区别,比如:JS中Date对象getYear()方法和getFullYear()方法区别发现很多人写的是: 在IE中是可以正确获取年份:2016,但是在FF等浏览器