原創(chuàng)|其它|編輯:郝浩|2011-05-10 14:08:52.000|閱讀 6482 次
概述:DevExpress是一套第三方控件,其中有類似DataGridView的控件,今天把針對(duì)DevExpress.XtraGrid.GridControl實(shí)時(shí)加載數(shù)據(jù)的功能開(kāi)發(fā)出來(lái)了,分享給大家希望對(duì)大家有幫助。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
DevExpress是一套第三方控件,其中有類似DataGridView的控件,今天把針對(duì)DevExpress.XtraGrid.GridControl實(shí)時(shí)加載數(shù)據(jù)的功能開(kāi)發(fā)出來(lái)了,分享給大家希望對(duì)大家有幫助。
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()
{
//一頁(yè)有多少條數(shù)據(jù)
private int page_size = 30;
public int PageSize
{
get { return page_size; }
}
/// <summary>
/// 過(guò)濾條件
/// </summary>
public string Filter
{
get;
set;
}
/// <summary>
/// 排序條件
/// </summary>
public string OrderBy
{
get;
set;
}
/// <summary>
/// 數(shù)據(jù)訪問(wèn)類
/// </summary>
public BaseProxy Proxy
{
get;
set;
}
private int row_count;
/// <summary>
/// 總行數(shù)
/// </summary>
public int RowCount
{
get {return row_count;}
}
private int page_num = 1;
/// <summary>
/// 當(dāng)前的數(shù)據(jù)頁(yè)
/// </summary>
public int PageNum
{
get { return page_num; }
}
//緩存的數(shù)據(jù)
private List<T> data_list = new List<T>();
private GridCreator()
{
}
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
public GridCreator(GridControl grid,BaseProxy proxy)
{
((GridView)grid.MainView).TopRowChanged +=
new EventHandler(grid_TopRowChanged);
this.Proxy = proxy;
grid.DataSource = data_list;
}
/// <summary>
/// 獲取前兩頁(yè)數(shù)據(jù)
/// </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)
{
//當(dāng)看完一頁(yè)數(shù)據(jù)的時(shí)候開(kāi)始取數(shù)據(jù)
page_num++;
List<T> test = GetData();
data_list.InsertRange((page_num - 1)* page_size, test);
}
}
/// <summary>
/// 實(shí)時(shí)的加載數(shù)據(jù)函數(shù)
/// </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泛型約束是需要加載數(shù)據(jù)的類型,BaseProxy是訪問(wèn)數(shù)據(jù)庫(kù)的基類,其中包含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,數(shù)據(jù)提供程序是模擬出來(lái)的,你可以在這個(gè)函數(shù)里寫數(shù)據(jù)庫(kù)訪問(wèn)方法。
具體調(diào)用方法如下
Code:
GridCreator<RegionEntity> creator =
new GridCreator<RegionEntity>(gridShop,new UtilsProxy());
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載