DevExpress的GridControl的實時加載數據解決方案(取代分頁)
阿新 • • 發佈:2019-03-11
rod src handle clas center 種類 param .get 構造函數
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>;
}
}
}
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;
}
GridCreator<RegionEntity> creator = new GridCreator<RegionEntity>(gridShop,new UtilsProxy());
分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net
DevExpress是一套第三方控件
其中有類似DataGridView的控件
今天把針對DevExpress.XtraGrid.GridControl實時加載數據的功能開發出來了
分享給大家
歡迎討論
Codeusing System;
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
{
get { return page_size; }
}
/// <summary>
/// 過濾條件
/// </summary>
public string Filter
{
get;
set;
}
/// <summary>
/// 排序條件
/// </summary>
public string OrderBy
{
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為
Codepublic 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
數據提供程序是模擬出來的(測試驅動開發,哈哈)
你可以在這個函數裏寫數據庫訪問方法
具體調用方法如下
CodeGridCreator<RegionEntity> creator = new GridCreator<RegionEntity>(gridShop,new UtilsProxy());
UtilsProxy類繼承自BaseProxy並重寫了GetDataList方法
gridShop就是當前窗體的DevExpress.XtraGrid.GridControl控件
RegionEntity針對泛型類型
用起來還是蠻方便的
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net
DevExpress的GridControl的實時加載數據解決方案(取代分頁)