大佬教程收集整理的这篇文章主要介绍了Listview分页,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
通过查询结果进行分页就是以结果集的子集处理查询结果的过程,这样,每次返回给用户的只是当前页面的数据大小。 DataAdapter对象通过重载Fill方法提供了返回当前页面数据的功能。然而,这种方法对大数据量的查询结果并不是最好的选择,这是因为:当DataAdapter用请求的结果填充DataTable或者DataSet时,数据库返回的资源仍是全部的查询结果,只是在返回时附加了额外的限定条件才返回了少量的记录集的。 要使用Fill方法返回当前一页的记录,需要指定开始记录startRecord,和当前页的最大记录数maxRecords。 下面的例子用来返回一页为5条记录的第一页的查询结果: [VB.NET] Dim currenTindex As Integer = 0 Dim pageSize As Integer = 5 Dim ordersQL As String = "SELECT * FROM orders ORDER BY OrderID" Dim myDA As SqlDataAdapter = New SqlDataAdapter(ordersQL,nwindConn) Dim myDS As DataSet = New DataSet() myDA.Fill(myDS,currenTindex,pageSize,"orders") [C#] int currenTindex = 0; int pageSize = 5; String ordersQL = "SELECT * FROM orders ORDER BY OrderID"; SqlDataAdapter myDA = new SqlDataAdapter(ordersQL,nwindConn); DataSet myDS = new DataSet(); myDA.Fill(myDS,"orders"); 在上面的例子中,DataSet只填充了5条记录,但返回的仍是整个orders表。如果要达到填充几条返回几天的目的,在sql语句中使用TOP和WHERE从句即可。例如: [VB.NET] Dim pageSize As Integer = 5 Dim ordersQL As String = "SELECT TOP " & pageSize & " * FROM orders ORDER BY OrderID" Dim myDA As SqlDataAdapter = New SqlDataAdapter(ordersQL,"orders") [C#] int pageSize = 5; String ordersQL = "SELECT TOP " + pageSize + " * FROM orders ORDER BY OrderID"; SqlDataAdapter myDA = new SqlDataAdapter(ordersQL,"orders"); 此时需要注意的是:用这种方法进行的分页,必须自己维护记录排序的唯一标识,为了向下一页请求传递唯一的ID,我们必须象下面那样: [VB.NET] Dim lastRecord As String = myDs.Tables("orders").Rows(pageSize - 1)("OrderID").ToString() [C#] String lastRecord = myDs.Tables["orders"].Rows[pageSize - 1]["OrderID"].ToString(); 下面的代码在Table填充之前进行了清空: [VB.NET] currenTindex = currenTindex + pageSize myDs.Tables("orders").Rows.Clear() myDA.Fill(myDS,"orders") [C#] currenTindex += pageSize; myDs.Tables["orders"].Rows.Clear(); myDA.Fill(myDS,"orders"); 下面是完整的代码: [C#] using System; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Windows.Forms; public class PagingSample: Form { // Form 控件. Button prevBtn = new Button(); Button nextBtn = new Button(); static DataGrid myGrid = new DataGrid(); static Label pageLbl = new Label(); // 分页变量 static int pageSize = 10; // 要显示的页数 static int @R_9_10586@lPages = 0; // 总页数 static int currentPage = 0; // 当前页 static String firstVisibleCustomer = ""; // 当前页的第一条记录,用来进行移动“前一页”的定位。 static String lastVisibleCustomer = ""; //当前页的最后条记录,用来进行移动“下一页”的定位。 // DataSet用来绑定到DataGrid. static DataTable custTable; //初始化连接和DataAdapter. static SqlConnection nwindConn = new SqlConnection("Data source=.;Integrated Security=SSPI;Initial Catalog=northwind"); static SqlDataAdapter custDA = new SqlDataAdapter("",nwindConn); static SqlCommand selCmd = custDA.SELEctCommand; public static void GetData(String direction) { // 创建返回一页记录的sql语句 selCmd.Parameters.Clear(); switch (direction) { case "下一页": selCmd.CommandText = "SELECT TOP " + pageSize + " CustomerID,CompanyName FROM Customers " + "WHERE CustomerID > @CustomerId ORDER BY CustomerID"; selCmd.Parameters.Add("@CustomerId",SqlDbType.VarChar,5).Value = lastVisibleCustomer; break; case "前一页": selCmd.CommandText = "SELECT TOP " + pageSize + " CustomerID,CompanyName FROM Customers " + "WHERE CustomerID < @CustomerId ORDER BY CustomerID DESC"; selCmd.Parameters.Add("@CustomerId",5).Value = firstVisibleCustomer; break; default: selCmd.CommandText = "SELECT TOP " + pageSize + " CustomerID,CompanyName FROM Customers ORDER BY CustomerID"; // 计算总页数 SqlCommand totCMD = new SqlCommand("SELECT Count(*) FROM Customers",nwindConn); nwindConn.open(); int @R_9_10586@lRecords = (int)totCMD.ExecuteScalar(); nwindConn.Close(); @R_9_10586@lPages = (int)R_455_11845@ath.Ceiling((doublE)@R_9_10586@lRecords / pageSizE); break; } // 用查询结果填充临时表 DataTable tmpTable = new DataTable("Customers"); int recordsAffected = custDA.Fill(tmpTablE); // 如果表不存在,就创建 if (custTable == null) custTable = tmpTable.Clone(); // 如果有记录返回,就刷新表 if (recordsAffected > 0) { switch (direction) { case "下一页": currentPage++; break; case "上一页": currentPage--; break; default: currentPage = 1; break; } pageLbl.Text = "第" + currentPage + "/ " + @R_9_10586@lPages + "页"; // 清除行集,添加新记录 custTable.Rows.Clear(); foreach (DataRow myRow in tmpTable.Rows) custTable.ImportRow(myRow); // 保存first 和 last 关键值 DataRow[] ordRows = custTable.SELEct("","CustomerID ASC"); firstVisibleCustomer = ordRows[0][0].ToString(); lastVisibleCustomer = ordRows[custTable.Rows.Count - 1][0].ToString(); } } public PagingSample() { // 初始化控件并添加到Form this.CLIENtSize = new Size(360,274); this.Text = "NorthWind 数据表"; myGrid.LOCATIOn = new Point(10,10); myGrid.Size = new Size(340,220); myGrid.AllowSorTing = true; myGrid.Captiontext = "NorthWind 客户信息"; myGrid.ReadOnly = true; myGrid.AllowNavigation = false; myGrid.PreferredcolumnWidth = 150; prevBtn.Text = "前一页"; prevBtn.Size = new Size(60,24); prevBtn.LOCATIOn = new Point(50,240); prevBtn.Click += new EventHandler(Prev_OnClick); nextBtn.Text = "下一页"; nextBtn.Size = new Size(60,24); nextBtn.LOCATIOn = new Point(120,240); pageLbl.Text = "没有记录返回"; pageLbl.Size = new Size(130,16); pageLbl.LOCATIOn = new Point(200,244); this.Controls.Add(myGrid); this.Controls.Add(prevBtn); this.Controls.Add(nextBtn); this.Controls.Add(pageLbl); nextBtn.Click += new EventHandler(Next_OnClick); // 计算默认的第一页,并进行绑定 GetData("Default"); DataView custDV = new DataView(custTable,"","CustomerID",DataViewRowState.CurrentRows); myGrid.SetDataBinding(custDV,""); } public static void Prev_OnClick(object sender,EventArgs args) { GetData("前一页"); } public static void Next_OnClick(object sender,EventArgs args) { GetData("下一页"); } } public class Sample { static void Main() { Application.Run(new PagingSample()); } }
以上是大佬教程为你收集整理的Listview分页全部内容,希望文章能够帮你解决Listview分页所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。