Welcome 微信登录

首页 / 网页编程 / ASP.NET / ASP.NET 数据列表控件的分页总结(一)自定义方法分页和PageDataSource类分页

ASP.NET 数据列表控件的分页总结(一)自定义方法分页和PageDataSource类分页2011-12-31 博客园 sl2008在Asp.net中,提供了三个功能强大的列表控件:GridView、DataList和Repeater控件,但其中只有GridView控件提供分页功能。虽然DataGrid提供了分页功能,不过看上去功能有限,但是我们可以通过GridView的一些属性来获取状态以及增加首页、尾页功能按钮。如果在速度效率不是很讲究的情况下,由DataGrid自己管理分页还是不错的,付出的代价就是要把整个相关数据取出来后再删选指定页的数据。好处就是开发速度快,不需要写分页的存储过程。所以若需要追求执行效率,而且数据量比较大的情况下建议使用GridView的自定义分页功能。若数据量不是很大,需要追求更多的页面功能和样式,那么相对GridView来说,DataList和Repeater控件具有更高的样式自定义性,所以很多时候我们喜欢使用DataList或Repeater控件来显示数据。现在我采用手动分页,对这三个控件作一比较。如下:

(1).使用GridView手动分页。

通过下拉框来控制分页。

前台代码:

1<body>2  <form id="form1" runat="server">3  <div>4    <asp:GridView ID="gvShow" runat="server" OnPageIndexChanging="gvShow_PageIndexChanging" AllowPaging="True" PageSize="2">5    </asp:GridView>6    <br />7    &nbsp;</div>8    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">9    </asp:DropDownList>10  </form>11</body>
后台代码:

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;  public partial class _Default : System.Web.UI.Page{  static SqlConnection con;  static SqlDataAdapter sda;  static SqlCommand cmd;  static DataSet ds;    protected void Page_Load(object sender, EventArgs e)  {    if (!IsPostBack)    {      Bind();    //记住这句不能丢,否则行号会累加在下拉框中    DropDownList1.Items.Clear();    for (int i = 1; i< gvShow.PageCount; i++)    {      DropDownList1.Items.Add(i.ToString());    }   }  }    private void Bind()  {    //gvShow.AllowPaging = true;    //gvShow.PageSize = 2;    gvShow.DataSource =BindData();    gvShow.DataBind();  }  protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)  {    //关键代码    gvShow.PageIndex = Convert.ToInt32(DropDownList1.SelectedValue)-1;    Bind();  }  protected void gvShow_PageIndexChanging(object sender, GridViewPageEventArgs e)  {    gvShow.PageIndex = e.NewPageIndex;    Bind();  }  private static void Init()  {    //数据库连接语句    con = new SqlConnection("Data Source=.;database=数据库名;uid=用户ID;pwd=用户密码");    ds = new DataSet();    try    {      con.Open();    }    catch    {      throw new Exception();    }  }    public static DataSet BindData()  {    Init();    string sql = "select * from book";    try    {      sda = new SqlDataAdapter(sql, con);      sda.Fill(ds, "book");      return ds;    }    catch    {      throw new Exception();    }  }  }