1. 程式人生 > >DevExpress的GridControl的實時加載數據解決方案(取代分頁)

DevExpress的GridControl的實時加載數據解決方案(取代分頁)

rod src handle clas center 種類 param .get 構造函數

分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net

DevExpress是一套第三方控件

其中有類似DataGridView的控件

今天把針對DevExpress.XtraGrid.GridControl實時加載數據的功能開發出來了

分享給大家

歡迎討論

技術分享圖片Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Grid;

namespace Life365.CallCenter
{
public class GridCreator<T> where T: new()
{
//一頁有多少條數據
private int page_size = 30;
public
int PageSize
{
get { return page_size; }
}
/// <summary>
/// 過濾條件
/// </summary>
public string Filter
{
get;
set;
}
/// <summary>
/// 排序條件
/// </summary>
public string OrderBy
{
get;
set;
}
/// <summary>
/// 數據訪問類
/// </summary>
public BaseProxy Proxy
{
get;
set;
}
private int row_count;
/// <summary>
/// 總行數
/// </summary>
public int RowCount
{
get {return row_count;}
}
private int page_num = 1;
/// <summary>
/// 當前的數據頁
/// </summary>
public int PageNum
{
get { return page_num; }
}
//緩存的數據
private List<T> data_list = new List<T>();

private GridCreator()
{
}
/// <summary>
/// 構造函數
/// </summary>
public GridCreator(GridControl grid,BaseProxy proxy)
{
((GridView)grid.MainView).TopRowChanged
+= new EventHandler(grid_TopRowChanged);
this.Proxy = proxy;
grid.DataSource
= data_list;
}
/// <summary>
/// 獲取前兩頁數據
/// </summary>
private void GetTwoPageData()
{
data_list.InsertRange(
0, GetData());
page_num
++;
data_list.InsertRange(page_size, GetData());
}
/// <summary>
/// grid下拉事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void grid_TopRowChanged(object sender, EventArgs e)
{
GridView grid
= sender as GridView;
if (grid.TopRowIndex >= (page_num - 1) * page_size)
{
//當看完一頁數據的時候開始取數據
page_num++;
List
<T> test = GetData();
data_list.InsertRange((page_num
- 1)* page_size, test);
}
}
/// <summary>
/// 實時的加載數據函數
/// </summary>
/// <returns></returns>
public List<T> GetData()
{
return Proxy.GetDataList(this.Filter, this.OrderBy, this.page_size,this.page_num, ref this.row_count) as List<T>;
}

}
}

T泛型約束是需要加載數據的類型

BaseProxy是訪問數據庫的基類,其中包含GetDataList的虛方法

繼承自BaseProxy的GetDataList為

技術分享圖片Code
public override object GetDataList(string filter, string order_by, int page_size, int page_num, ref int count)
{
count
= 1000;
List
<RegionEntity> regions = new List<RegionEntity>();
for (int i = 0; i < page_size; i++)
{
regions.Add(
new RegionEntity() { SR_RegionName = ((page_num-1)*page_size+i).ToString() });
}
return regions;
}

這裏的RegionEntity就是前面提到的某一種類型的T

數據提供程序是模擬出來的(測試驅動開發,哈哈)

你可以在這個函數裏寫數據庫訪問方法

具體調用方法如下

技術分享圖片Code
GridCreator<RegionEntity> creator = new GridCreator<RegionEntity>(gridShop,new UtilsProxy());

UtilsProxy類繼承自BaseProxy並重寫了GetDataList方法

gridShop就是當前窗體的DevExpress.XtraGrid.GridControl控件

RegionEntity針對泛型類型

用起來還是蠻方便的

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net

DevExpress的GridControl的實時加載數據解決方案(取代分頁)