在asp.net2.0中ObjectDataSource可以说是业务层和UI层的桥樑。分页方式有有两种。第一种:一次性把所有数据取出来,全部由GridView的内部机制实现分页和排序。在ProductDAL.cs中:
public static DataTable GetProductList() { string sql = "select ProductID,ProductName,UnitPrice,UnitsInStock from Products "; SqlDataAdapter da = new SqlDataAdapter(sql, ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); DataTable dt = new DataTable(); da.Fill(dt); return dt; }
在PagingGridView.aspx中
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetProductList" TypeName="ProductDAL" ></asp:ObjectDataSource> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1"> <Columns> <asp:BoundField DataField="ProductID" HeaderText="ProductID" SortExpression="ProductID" /> <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /> <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" /> <asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" SortExpression="UnitsInStock" /> </Columns> </asp:GridView>
但由于每次分页、排序操作都要取出所有数据,省功夫,但效率差。
第二种方法:
自定义分页和排序,即根据当前所在页和页记录大小和排序。而不是一次性取出所有数据。
首先介绍ObjectDataSource关于自定义分页和排序的几个属性.
AllowPaging属性:当要实现自定义分页时必须把AllowPaging值设置为true。
SelectMethod属性:指向获取数据的方法名称,本例设置为GetProducts。其所指向的方法的参数名与ObjectDataSource的StartRowIndexParameterName、MaximumRowsParameterName、SortParameterName相对应(注意:参数不分先后,但参数名要一一对应相同,否则出错)
StartRowIndexParameterName属性:当前页的第一条数据在查询数据中的位置,它的值与SelectMethod所指向的方法的相应参数,默认值为startRowIndex。
MaximumRowsParameterName属性:当前页面的记录行数,它的值与SelectMethod所指向的方法的相应参数,默认值为maximumRows。
SortParameterName属性:排序表达式,与SelectMethod所指向的方法的排序参数相对应。如果不设置排序,此属性可以为空。在本例中设置为sortExpression。
SelectCountMethod属性:指向查询到的数据总数的方法名称。本例中是GetProdcutsCount。注意:这个是自定义分页必须设置的属性。
在ProductDAL.cs中(Product实体类省略)
public static List<Product> GetProducts(int startRowIndex,int maxinumRows , string sortExpression) { string sql = "select ProductID,ProductName,UnitPrice,UnitsInStock from Products "; if (!string.IsNullOrEmpty(sortExpression)) sql += " order by " + sortExpression; SqlDataAdapter da = new SqlDataAdapter(sql, ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); DataTable dt = new DataTable(); da.Fill(dt); List<Product> results = new List<Product>(); int currentIndex = startRowIndex; int itemRead = 0; int totalRecords = dt.Rows.Count; while (itemRead < maxinumRows && currentIndex < totalRecords) { Product p = new Product(); p.ProductID = Convert.ToInt32(dt.Rows[currentIndex]["ProductID"]); p.ProductName = dt.Rows[currentIndex]["ProductName"].ToString(); if (dt.Rows[currentIndex]["UnitPrice"].Equals(DBNull.Value)) p.UnitPrice = 0; else p.UnitPrice = Convert.ToDecimal(dt.Rows[currentIndex]["UnitPrice"]); if (dt.Rows[currentIndex]["UnitsInStock"].Equals(DBNull.Value)) p.UnitsInStock = 0; else p.UnitsInStock = Convert.ToInt32(dt.Rows[currentIndex]["UnitsInStock"]); results.Add(p); itemRead++; currentIndex++; } return results; } public static int GetProdcutsCount() { string sql = "select count(*) from Products"; SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.Connection = conn; conn.Open(); int count = (int)cmd.ExecuteScalar(); conn.Close(); return count; }
二、用户界面层中的实现
在Default.aspx中:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetProducts" TypeName="ProductDAL" SelectCountMethod="GetProdcutsCount" StartRowIndexParameterName="startRowIndex" MaximumRowsParameterName="maxinumRows" SortParameterName="sortExpression" EnablePaging="True"> </asp:ObjectDataSource> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" AllowSorting="True" OnRowDataBound="GridView1_RowDataBound"> <Columns> <asp:BoundField DataField="ProductID" HeaderText="ProductID" SortExpression="ProductID" /> <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /> <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" /> <asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" SortExpression="UnitsInStock" /> </Columns> </asp:GridView>
四角号码在线查询,最近因为域名到期,过几天会恢复的
[回复]