1. 程式人生 > >關於怎樣獲取DevExpress GridView過濾後或排序後的資料集問題

關於怎樣獲取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();           
        }