WinForm程式虛擬分頁 實時載入資料

2021-09-05 21:45:35 字數 3987 閱讀 3298

windows應用程式中很少見有分頁的程式

資料夾中有上萬個檔案的時候微軟也沒讓使用者來翻頁檢視列表

記事本中的文字,某個系統功能的列表也都沒有分頁。(word文件是個例外)

知道web中的分頁是怎麼做出來的朋友一定知道winform做分頁會更簡單

winform程式一樣也不允許使用者一下子把資料庫中上萬條資料全部檢索出來

那麼怎麼讓winform程式即不用翻頁,又能分部載入資料呢

**如下:

一:窗體類

public

partial

class

form1 : form

protected

override

void

onload(eventargs e)

//為datagridview提供自己的資料管理操作

datagridview1.virtualmode 

=true

;            

this

.datagridview1.allowusertoaddrows 

=false

;this

.datagridview1.allowusertoordercolumns 

=false

;this

.datagridview1.selectionmode 

=datagridviewselectionmode.fullrowselect;

//adjust the column widths based on the displayed values.

this

.datagridview1.autoresizecolumns(datagridviewautosizecolumnsmode.displayedcells);

//virtualmode為true並且需要顯示新資料時發生

datagridview1.cellvalueneeded 

+=new

datagridviewcellvalueeventhandler(datagridview1_cellvalueneeded);

base

.onload(e);

}void

datagridview1_cellvalueneeded(

object

sender, datagridviewcellvalueeventargs e)

private

webpager initpager()}

二:page結構

public

struct

datapage

//////

獲取當前頁起始行的index

///public

intlowestindex

}///

///獲取當前頁的結束行的index

///public

inthighestindex

}///

///獲取起始行的index

//////

///public

static

intmaptolowerboundary(

introwindex)

//////

獲取結束行的index

//////

///private

static

intmaptoupperboundary(

introwindex)

//////

獲取當前行的頁碼

//////

///public

static

intmapcurrentpageindex(

introwindex)

return

pageindex;}}

三:webpager資料訪問類

通過訪問資料庫的分頁儲存過程獲取某一頁的資料

由於這個類的**並非我寫的,所以這裡不在公布了

此類公開的幾個欄位和乙個方法如下

每頁顯示條數  pagesize

當前顯示第幾頁  pageindex

共幾頁  pagecount

所有的條目數  totalcount

分頁的表或者實體 tablename

查詢的字段  queryfieldname

排序字段  orderstr

查詢的條件  querycondition

獲取資料  public datatable quickpagedata()

四:cache類(這個類包含了page結構的定義)

private

static

introwsperpage;

private

datapage cachepages;

public

datacolumncollection columncollenction 

private

webpager datasupply;

//////

建構函式

//////

分頁類///

一頁幾行

public

cache(webpager datasupplier, 

introwsperpage)

//////

判斷兩個快取頁中是否有當前行的資料

//////

當前行的index

///當前列的index

///當前cell的值

///如果有  返回true

private

bool

ifpagecached_thensetelement(

introwindex,

intcolumnindex, 

refstring

element)

else

if(isrowcachedinpage(

1, rowindex))

return

false;}

//////

繪製**前獲取資料的方法

//////

當前行的index

///當前列的index

///返回**的值

public

string

retrieveelement(

introwindex, 

intcolumnindex)

else

}///

///程式初始化時獲取第一頁和第二頁的資料

///private

void

loadfirsttwopages()

;this

.columncollenction 

=p1.table.columns;

}///

//////

///當前行的index

///當前列的index

///反回當前cell的值

private

string

retrievedata_cacheit_thenreturnelement(

introwindex, 

intcolumnindex)

//////

判斷根據當前行獲取的資料應該放在哪個頁當中快取起來

//////

當前行的index

///頁的index

private

intgetindextounusedpage(

introwindex)

return0;

}else

return0;

}}//////

判斷當前行是否在快取中

//////

頁的index

///當前行的index

///如果在返回true

private

bool

isrowcachedinpage(

intpagenumber, 

introwindex)

寫這個demo用了三個多小時

WinForm分頁控制項

分頁控制項是程式開發的資料載入顯示中較常用,為了能夠靈活重用,以下使用將該功能包裝成使用者控制項usercontrol,整體控制項效果圖如下 分頁paging完整 using system using system.collections.generic using system.component...

winform通用分頁控制項

using system using system.collections.generic using system.componentmodel using system.drawing using system.data using system.linq using system.text u...

winform 的分頁問題

看了很多分頁,都是基於處理資料庫sql語句的操作,在這裡,我寫了乙個基於datatable的分頁,有興趣的朋友可以封裝,用於listview 和gridview的分頁。分頁 int totalcount 0 記錄總共的記錄數 static int page 0 記錄現在翻到第幾頁了 static i...