C#分页最好的实现方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

pageCount=(nMax/pageSize); //计算出总页数
if ((nMax % pageSize) > 0) pageCount++;
pageCurrent = 1; //当前页数从 1 开始 nCurrent = 0; //当前记录数从 0 开始
LoadData(); } private void LoadData()
qlDbType.Int); sqlPar.Direction = ParameterDirection.Output; sqlPar = sqlComm.Parameters.Add("@@REALNUM", SqlDbType.Int); sqlPar.Direction = ParameterDirection.Output;
lblTotalPage 是 显 示 总 页 数 的 标 签 ; lblNextPage 是 下 一 页 的 标 签 ; lblPreviousPage 是上一页的标签,类型都是 Lable。
在此整个分页显示功能就实现了。
C#——DataGridView 分页功能的实现 (垃圾的) 最近做了一个 DataGridView 的分页显示 Demo。也是看见网络上很多人询问关于 DataGridView 如何做分页。根据我的认识,Visual Sutido 2005 里的 DataGridView 控件是没有带分页属性的,因此咱们必须通过写代码去实现分页功能。
SET @@REALNUM=@STAFFNUM ELSE
SET @@REALNUM=@@TOTALCOUNT-@STARTNO*@STAFFNUM
SET @CURRECCOUNT=CAST( @STARTNO * @STAFFNUM + @@REALNUM AS VARCHAR( 10 ) ) IF @STARTNO = 0
Sda.SelectCommand = sqlComm; Sda.Fill(dtStaff);
nMax = Convert.ToInt32(sqlComm.Parameters["@@TOTALCOUNT"].Val ue.ToString());
sqlComm.Dispose(); pageCount = nMax - nMax % pageSize; pageCount /= pageSize; pageCount++;
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
string strSql = "SELECT * FROM CUSTOMERS";
SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);
C#分页最好的实现方法 C#-DataGridView 分页功能的实现(存储过程实现)很好
用 SqlDataAdapter 实现的分页功能很多浏览者都提意见说不好,一次性读出全部数据会 影响程序的占用率,造成计算机的“短路”。呵呵,那好把,这次用数据库的存储过程去实现 分页,这样是每次按一定数量去读取数据记录,这种方法应该是目前最稳定和最省资源的方 法了(嘻嘻嘻,如果还有高手知道有比这更好的方法,请提出,小弟在此谢过)。
具体的建立存储过程我就不说了,简单说明一下以上语句的作用把。 CREATE PROCEDURE dt_DXS_STAFF_ACTIVE 其 实 就 是 生 成 一 个 名 为
dt_DXS_STAFF_ACTIVE 的存储过程,具体命名按实际需要。
TOTALCOUNT:数据行总数。 REALNUM:当前记录数。 以下是将数据导入页面的函数:
txtpage.Text = Convert.ToString(pageCurrent+1); lblTotalPage.Text = pageCount.ToString();
if (pageCurrent + 1 >= pageCount) lblNextPage.Enabled = false;
首先在数据库里建立以下存储过程: CREATE PROCEDURE dt_DXS_STAFF_ACTIVE @STAFFSTATUS INT,@STAFFNU M INT,@STARTNO INT,@@TOTALCOUNT INT OUTPUT,@@REALNUM INT OU TPUT AS
DECLARE @PRERECCOUNT VARCHAR(10) DECLARE @CURRECCOUNT VARCHAR(10) SELECT @@TOTALCOUNT=COUNT(*) FROM DXS_STAFF_ACTIVE IF @@TOTALCOUNT>(@STARTNO+1)*@STAFFNUM
ELSE BEGIN SET @PRERECCOUNT= CAST( @STARTNO * @STAFFNUM AS VARCHA
R( 10 ) ) EXEC( 'SELECT TOP ' + @CURRECCOUNT + ' STAFF_ID,STAFF_NAME,
RDATE,TDATE,DEPT,MEMO FROM DXS_STAFF_ACTIVE WHERE STAFF_ID NOT IN '
好了,先看一下 Demo 的界面。
从 界 面 可 以 看 到 , 在 设 计 时 需 要 一 个 DataGridView 、 BindingNavigate 、
BindingSource 控件,分别命名为 dgvInfo、bdnInfo、bdsInfo。
在 bdnInfo 控件中添加几个用于选择页面的 lable 和 botton,如上图所示。
EXEC( 'SELECT TOP ' + @CURRECCOUNT + ' STAFF_ID,STAFF_NAME,RD ATE,TDATE,DEPT,MEMO FROM DXS_STAFF_ACTIVE WHERE STATUS='+@STAF FSTATUS+' ORDER BY STAFF_ID ASC' )
{ int nStartPos = 0; int nEndPos = 0;
//当前页面开始记录行 //当前页面结束记录行
DataTable dtTemp = dtInfo.Clone(); //克隆 DataTable 结构框架
if (pageCurrent == pageCount) nEndPos = nMax;
else lblNextPage.Enabled = true;
if (pageCurrent == 0) lblPreviousPage.Enabled = false;
else
lblPreviousPage.Enabled = true; }
其中 pStatus 是作为率选数据的条件;pageSize 是页面的记录数;pageCurrent 是当 前页数;dtStaff 为一个数据表,类型为 DataTable;
4、菜单响应事件: private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{ if (e.ClickedItem.Text == "关闭") { this.Close(); } if (e.ClickedItem.Text == "上一页") { pageCurrent--; if (pageCurrent <= 0) { MessageBox.Show("已经是第一页,请点击“下一页”查看!"); return; } else { nCurrent = pageSize * (pageCurrent - 1); }
设计时:
1、定义几个所需的公有成员:
int pageSize = 0; //每页显示行数
int nMax = 0;
//总记录数
int pageCount = 0; //页数=总记录数/每页显示行数
int pageCurrent = 0; //当前页号
int nCurrent = 0; //当前记录行
DataSet ds = new DataSet();
DataTable dtInfo = new DataTable(); 2、在窗体载入事件中,从数据源读取记录到 DataTable 中:
string strConn = "SERVER=127.0.0.1;DATABASE=NORTHWIND;UID=SA;PWD=UL TRATEL"; //数据库连接字符串
//从元数据源复制记录行 for (int i = nStartPos; i < nEndPos; i++)
{ dtTemp.ImportRow(dtInfo.Rows[i]); nCurrent++;
} bdsInfo.DataSource = dtTemp; bdnInfo.BindingSource = bdsInfo; dgvInfo.DataSource = bdsInfo; }
private void LoadPage() { dtStaff.Clear(); SqlConnection conn = new SqlConnection(Param_Class.Param_DB.strC
onn); SqlDataAdapter Sda = new SqlDataAdapter(); SqlCommand sqlComm = new SqlCommand(); sqlComm.Connection = conn; sqlComm.CommandText = "dt_DXS_STAFF_ACTIVE"; sqlComm.CommandType = CommandType.StoredProcedure; sqlComm.Parameters.AddWithValue("@STAFFSTATUS",pStatus); sqlComm.Parameters.AddWithValue("@STAFFNUM", pageSize); sqlComm.Parameters.AddWithValue("@STARTNO", pageCurrent); SqlParameter sqlPar = sqlComm.Parameters.Add("@@TOTALCOUNT", S
else nEndPos = pageSize * pageCurrent;
nStartPos = nCurrent;
lblPageCount.Text = pageCount.ToString(); txtCurrentPage.Text = Convert.ToString(pageCurrent);
LoadData(); } if (e.ClickedItem.Text == "下一页")
{ pageCurrent++; if (pageCurrent > pageCount) { MessageBox.Show("已经是最后一页,请点击“上一页”查看!"); return; } else { nCurrent=pageSize*(pageCurrent-1);
sda.Fill(ds,"ds");
conn.Close();
Fra Baidu bibliotek
dtInfo = ds.Tables[0];
InitDataSet(); 3、用当前页面数据填充 DataGridView
private void InitDataSet()
{ pageSize = 20;
//设置页面行数
nMax = dtInfo.Rows.Count;
} LoadData(); } }
c#的 listview 实现分页效果
打算要实现的效果是:
由于 listview 控件本身没有分页的功能,为了达到这么目的, 方法一:我们可以结合其他空间来完成,但是对 framework 要求的版本也比较高; 方法二:通过 sql 语句来完成,通过 sql 语句完成分页。 这里我们采用第二种方法: namespace seperatePage {
+ '(SELECT TOP ' + @PRERECCOUNT + 'STAFF_ID FROM DXS_ STAFF_ACTIVE WHERE STATUS='+@STAFFSTATUS+' ORDER BY STAFF_ID AS C) '
+ 'ORDER BY STAFF_ID ASC' ) END GO
相关文档
最新文档