




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#-DataGridView分页功能的实现(用存储过程实现)用SqlDataAdapter实现的分页功能很多浏览者都提意见说不好,一次性读出全部数据会影响程序的占用率,造成计算机的“短路”。呵呵,那好把,这次用数据库的存储过程去实现分页,这样是每次按一定数量去读取数据记录,这种方法应该是目前最稳定和最省资源的方法了(嘻嘻嘻,如果还有高手知道有比这更好的方法,请提出,小弟在此谢过)。 首先在数据库里建立以下存储过程:CREATEPROCEDUREdt_DXS_STAFF_ACTIVESTAFFSTATUSINT,STAFFNUMINT,STARTNOINT,TOTALCOUNTINTOUTPUT,REALNUMINTOUTPUTASDECLAREPRERECCOUNTVARCHAR(10)DECLARECURRECCOUNTVARCHAR(10)SELECTTOTALCOUNT=COUNT(*)FROMDXS_STAFF_ACTIVEIFTOTALCOUNT(STARTNO+1)*STAFFNUMSETREALNUM=STAFFNUMELSESETREALNUM=TOTALCOUNT-STARTNO*STAFFNUMSETCURRECCOUNT=CAST(STARTNO*STAFFNUM+REALNUMASVARCHAR(10)IFSTARTNO=0EXEC(SELECTTOP+CURRECCOUNT+STAFF_ID,STAFF_NAME,RDATE,TDATE,DEPT,MEMOFROMDXS_STAFF_ACTIVEWHERESTATUS=+STAFFSTATUS+ORDERBYSTAFF_IDASC)ELSEBEGINSETPRERECCOUNT=CAST(STARTNO*STAFFNUMASVARCHAR(10)EXEC(SELECTTOP+CURRECCOUNT+STAFF_ID,STAFF_NAME,RDATE,TDATE,DEPT,MEMOFROMDXS_STAFF_ACTIVEWHERESTAFF_IDNOTIN+(SELECTTOP+PRERECCOUNT+STAFF_IDFROMDXS_STAFF_ACTIVEWHERESTATUS=+STAFFSTATUS+ORDERBYSTAFF_IDASC)+ORDERBYSTAFF_IDASC)ENDGO具体的建立存储过程我就不说了,简单说明一下以上语句的作用把。CREATE PROCEDURE dt_DXS_STAFF_ACTIVE 其实就是生成一个名为dt_DXS_STAFF_ACTIVE的存储过程,具体命名按实际需要。 TOTALCOUNT:数据行总数。 REALNUM:当前记录数。 以下是将数据导入页面的函数:privatevoidLoadPage()dtStaff.Clear();SqlConnectionconn=newSqlConnection(Param_Class.Param_DB.strConn);SqlDataAdapterSda=newSqlDataAdapter();SqlCommandsqlComm=newSqlCommand();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);SqlParametersqlPar=sqlComm.Parameters.Add(TOTALCOUNT,SqlDbType.Int);sqlPar.Direction=ParameterDirection.Output;sqlPar=sqlComm.Parameters.Add(REALNUM,SqlDbType.Int);sqlPar.Direction=ParameterDirection.Output;Sda.SelectCommand=sqlComm;Sda.Fill(dtStaff);nMax=Convert.ToInt32(sqlComm.ParametersTOTALCOUNT.Value.ToString();sqlComm.Dispose();pageCount=nMax-nMax%pageSize;pageCount/=pageSize;pageCount+;txtpage.Text=Convert.ToString(pageCurrent+1);lblTotalPage.Text=pageCount.ToString();if(pageCurrent+1=pageCount)lblNextPage.Enabled=false;elselblNextPage.Enabled=true;if(pageCurrent=0)lblPreviousPage.Enabled=false;elselblPreviousPage.Enabled=true;其中pStatus是作为率选数据的条件;pageSize是页面的记录数;pageCurrent是当前页数;dtStaff为一个数据表,类型为DataTable;lblTotalPage是显示总页数的标签;lblNextPage是下一页的标签;lblPreviousPage是上一页的标签,类型都是Lable。在此整个分页显示功能就实现了。C#DataGridView分页功能的实现 (垃圾的)最近做了一个DataGridView的分页显示Demo。也是看见网络上很多人询问关于DataGridView如何做分页。根据我的认识,Visual Sutido 2005里的DataGridView控件是没有带分页属性的,因此咱们必须通过写代码去实现分页功能。 好了,先看一下Demo的界面。 从界面可以看到,在设计时需要一个DataGridView、BindingNavigate、BindingSource控件,分别命名为dgvInfo、bdnInfo、bdsInfo。 在bdnInfo控件中添加几个用于选择页面的lable和botton,如上图所示。 设计时:1、定义几个所需的公有成员:intpageSize=0;/每页显示行数intnMax=0;/总记录数intpageCount=0;/页数总记录数/每页显示行数intpageCurrent=0;/当前页号intnCurrent=0;/当前记录行DataSetds=newDataSet();DataTabledtInfo=newDataTable();2、在窗体载入事件中,从数据源读取记录到DataTable中:stringstrConn=SERVER=;DATABASE=NORTHWIND;UID=SA;PWD=ULTRATEL;/数据库连接字符串SqlConnectionconn=newSqlConnection(strConn);conn.Open();stringstrSql=SELECT*FROMCUSTOMERS;SqlDataAdaptersda=newSqlDataAdapter(strSql,conn);sda.Fill(ds,ds);conn.Close();dtInfo=ds.Tables0;InitDataSet();3、用当前页面数据填充DataGridViewprivatevoidInitDataSet()pageSize=20;/设置页面行数nMax=dtInfo.Rows.Count;pageCount=(nMax/pageSize);/计算出总页数if(nMax%pageSize)0)pageCount+;pageCurrent=1;/当前页数从1开始nCurrent=0;/当前记录数从0开始LoadData();privatevoidLoadData()intnStartPos=0;/当前页面开始记录行intnEndPos=0;/当前页面结束记录行DataTabledtTemp=dtInfo.Clone();/克隆DataTable结构框架if(pageCurrent=pageCount)nEndPos=nMax;elsenEndPos=pageSize*pageCurrent;nStartPos=nCurrent;lblPageCount.Text=pageCount.ToString();txtCurrentPage.Text=Convert.ToString(pageCurrent);/从元数据源复制记录行for(inti=nStartPos;inEndPos;i+)dtTemp.ImportRow(dtInfo.Rowsi);nCurrent+;bdsInfo.DataSource=dtTemp;bdnInfo.BindingSource=bdsInfo;dgvInfo.DataSource=bdsInfo;4、菜单响应事件:privatevoidbdnInfo_ItemClicked(objectsender,ToolStripItemClickedEventArgse)if(e.ClickedItem.Text=关闭)this.Close();if(e.ClickedItem.Text=上一页)pageCurrent-;if(pageCurrentpageCount)MessageBox.Show(已经是最后一页,请点击“上一页”查看!);return;elsenCurrent=pageSize*(pageCurrent-1);LoadData();c#的listview实现分页效果打算要实现的效果是:由于listview控件本身没有分页的功能,为了达到这么目的,方法一:我们可以结合其他空间来完成,但是对framework要求的版本也比较高;方法二:通过sql语句来完成,通过sql语句完成分页。这里我们采用第二种方法:namespace seperatePage public partial class Form1 : Form string sql; SqlConnectionStringBuilder bldr; SqlConnection cn; int totalcount = 0;/记录总共的记录数 static int page = 0;/记录现在翻到第几页了 public Form1() InitializeComponent(); linkDatabase(); public void linkDatabase() /连接数据库,打开连接 bldr = new SqlConnectionStringBuilder(); bldr.DataSource = 28; bldr.InitialCatalog = shortmessage; bldr.IntegratedSecurity = false; bldr.UserID = shortmessage; bldr.Password = shortmessageuser; cn = new SqlConnection(bldr.ConnectionString); cn.Open(); public void closeDatabase() /关闭连接 cn.Close(); public DataSet selectData(String sql) /查询数据集 DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(sql, cn); SqlCommandBuilder cb = new SqlCommandBuilder(da); da.Fill(ds); return ds; private void Form1_Load(object sender, EventArgs e) /窗体加载的时候,前5条记录是显示的。这时候,“下一页”是可用的,“上一页”是不可用的。 nextPage.Enabled = true ; prevPage.Enabled = false; listView1.GridLines = false ; listView1.Columns.Add(name); listView1.Columns.Add(age); listView1.Columns.Add(rollno); listView1.View = View.Details; listView1.Items.Clear(); sql = select * from test; DataSet ds_one = selectData(sql); DataTable dt_one = ds_one.Tables0; for (int i = 0; i = totalcount / 5 - 2) nextPage.Enabled = false; prevPage.Enabled = true; else if (page = totalcount / 5 - 1) nextPage.Enabled = false; prevPage.Enabled = true; page = page + 1; listView1.Items.Clear(); sql = select top 5 name,age,rollno from test where rollno not in (select top +page*5+ rollno from test); DataSet ds = selectData(sql); write_listview(ds); private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) nextPage.Enabled = true; page = page - 1; if (page = 0) nextPage.Enabled = true ; prevPage.Enabled = false ; listView1.Items.Clear(); sql = select top 5 name,age,rollno from test where rollno not in (select top + page * 5 + rollno from test); DataSet ds = selectData(sql); write_listview(ds); private void firstPage_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) listView1.Items.Clear(); prevPage.Enabled = false; nextPage.Enabled = true; sql = select top 5 name,age,rollno from test ; page = 0;/必须要写,否则page会出现问题。 DataSet ds = selectData(sql); write_listview(ds); private void write_listview(DataSet ds) /用于完成向listview添加信息。 ListViewItem l = null; DataTable dt = ds.Tables0; for (int i = 0; i dt.Rows.Count; i+) l = new ListViewItem(dt.Rowsiname.ToString(); l.SubItems.Add(dt.Rowsiage.ToString(); l.SubItems.Add(dt.Rowsirollno.ToString(); listView1.Items.Add(l); private void lagePage_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) if (totalcount % 5 = 0) page = totalcount / 5 - 1; else page = totalcount / 5; nextPage.Enabled = false; prevPage.Enabled = true; listView1.Items.Clear(); sql = select top 5 name,age,rollno from test where rollno not in (select top + page * 5 + rollno from test); DataSet ds = selectData(sql); write_listview(ds); ListView 应用5 - 数据库的增删改查及分页:郁闷了好长一段时间,做了各种各样的修改,就是“删除”无法执行,罪魁祸首竟然是 ListView 控件中少设置了一个 DataKeyNames 属性,悲哀啊!default.aspx 增删改查数据库记录 body font-family:宋体; font-size:14px; .insert background-color: #9C0; .xm width: 80px; .dh, .qq width: 100px; .edit td padding-top: 3px; padding-right: 0px; padding-bottom: 4px; padding-left: 6px; font-family:宋体; background-color: #CFF; color:#F00; font-weight:bolder; a color: #06F; text-decoration: none; .edit a, .edit input font-weight:bolder; color:#F00; text-decoration: none; font-family:宋体; .edit a:hover font-weight:bolder; color:#F00; text-decoration: underline overline; a:hover color: #F00; text-decoration: underline overline; 学号 姓名 电话 QQ 管理 asp:Label ID=Label1 runat=server Text= 修改 删除 asp:Label ID=Label1 runat=server Text= asp:TextBox ID=TextBox2 runat=server Text= CssClass=xm asp:TextBox ID=TextBox3 runat=server Te
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基金从业考试 挂靠及答案解析
- 宁夏餐饮从业人员考试及答案解析
- 细菌性疫苗生产工培训考核试卷及答案
- 车辆维修工岗前考试及答案解析
- 履带运输车司机质量追溯知识考核试卷及答案
- 考过证券从业考试后及答案解析
- 工程热处理工协作考核试卷及答案
- 微水电利用工专项考核试卷及答案
- 装卸搬运工转正考核试卷及答案
- 涂装后处理工工艺考核试卷及答案
- 护理文书书写规范 (15)课件
- 二十四节气农事活动
- 食物中毒的心理援助与危机干预
- 2022星闪无线短距通信技术(SparkLink 1.0)安全白皮书网络安全
- 卫生公共基础知识考试大纲
- 小学数学六年级上册第五单元课件
- 《电子凭证会计数据标准-全面数字化的电子发票(试行版)》指南
- 湖南土建中级职称考试复习总结
- 混合痔痔的护理查房
- 大学物理实验长测量
- 材料科学基础复习题及答案
评论
0/150
提交评论