前台代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PagedDataSource分页.aspx.cs" Inherits="PagedDataSource分页" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>PagedDataSource分页</title>
    <style type="text/css">
        .style1
        {
            width: 769px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
<div>
        <asp:DataList ID="DataList1" runat="server" BackColor="White" 
            BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
            ForeColor="Black" GridLines="Vertical">
            <FooterStyle BackColor="#CCCC99" />
            <ItemTemplate>
                <asp:Label ID="lbNwes" runat="server" Text='<%#Eval("Title")%>'></asp:Label>
                &nbsp;
                <asp:Label ID="lbTime" runat="server" Text='<%#Eval("Dtime")%>'></asp:Label>
            </ItemTemplate>
            <AlternatingItemStyle BackColor="White" />
            <ItemStyle BackColor="#F7F7DE" />
            <SelectedItemStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
        </asp:DataList></div>
        <br />
        共<asp:Label ID="lb_count" runat="server" Text="Label"></asp:Label>条记录
        &nbsp; &nbsp; &nbsp; 共<asp:Label ID="lb_page" runat="server" Text="Label"></asp:Label>页 &nbsp;
        &nbsp; 当前第<asp:Label ID="lb_CurrentPage" runat="server" Text="1"></asp:Label>页&nbsp; &nbsp;
        &nbsp; &nbsp;
        <asp:LinkButton ID="LinkFirst" runat="server" OnClick="LinkFirst_Click">第一页</asp:LinkButton>
        &nbsp; &nbsp;
        <asp:LinkButton ID="LinkUp" runat="server" OnClick="LinkUp_Click">上一页</asp:LinkButton>
        &nbsp; &nbsp;<asp:LinkButton ID="LinkDown" runat="server" OnClick="LinkDown_Click">下一页</asp:LinkButton>
        &nbsp; &nbsp;<asp:LinkButton ID="LinkLast" runat="server" OnClick="LinkLast_Click">最后一页</asp:LinkButton>
        &nbsp; &nbsp;转到第<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True">
        </asp:DropDownList>页
        <br>
        <table>
        <tr>
        <td align=center>检索关键字:<asp:TextBox ID="Search" runat="server"></asp:TextBox>
                <asp:Button ID="Button1" runat="server" Text="查询" onclick="Button1_Click" />
                </td>        
        </tr>
        </table>
        <asp:Label ID="Message" runat="server" Text="Label"></asp:Label>
    </form>
</body>
</html>后台代码:
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
public partial class PagedDataSource分页 : System.Web.UI.Page
{
    protected SqlConnection conn;
    protected SqlDataAdapter da;
    protected DataSet ds;
    protected SqlCommand Comm;
    protected void Page_Load(object sender, EventArgs e)
    {
        //第一次访问时建立数据集
        //if (!IsPostBack)
        //{
            conn = new SqlConnection("server=.;database=mynews;UID=sa;PassWord=12345");
            da = new SqlDataAdapter();
            ds = new DataSet();
            da.SelectCommand = new SqlCommand("select * from News", conn);
            conn.Open();
            da.Fill(ds, "Article");
            conn.Close();
            GetArticle();
        //}
    }    private void GetArticle()
    {
        int cup = Convert.ToInt32(this.lb_CurrentPage.Text);
        Message.Text = cup.ToString();                          //显示当前页数
        PagedDataSource ps = new PagedDataSource();
        ps.DataSource = ds.Tables["Article"].DefaultView;
        ps.AllowPaging = true;
        ps.PageSize = 6;
        ps.CurrentPageIndex = cup - 1;
        lb_count.Text = ps.DataSourceCount.ToString();
        lb_page.Text = ps.PageCount.ToString();
        if (!IsPostBack)
        {
            for (int i = 1; i < ps.PageCount + 1; i++)
            {
                this.DropDownList1.Items.Add(i.ToString());
            }
            LinkUp.Enabled = true;
            LinkDown.Enabled = true;
        }
        try
        {
            //DropDownList1.SelectedItem.Text = cup.ToString();
            DataList1.DataSource = ps;
            DataList1.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    protected void LinkDown_Click(object sender, EventArgs e)
    {
        try
        {
            lb_CurrentPage.Text = Convert.ToString(Convert.ToInt32(lb_CurrentPage.Text) + 1);
            DropDownList1.SelectedValue = lb_CurrentPage.Text;
            GetArticle();
        }
        catch (Exception ex)
        {
            Response.Write("<script  language='javascript'>alert('已经是最后一页!');</script>");
            lb_CurrentPage.Text = "1";
            GetArticle();
        }
    }
    protected void LinkFirst_Click(object sender, EventArgs e)
    {
        if (lb_CurrentPage.Text != "1")
            lb_CurrentPage.Text = "1";
        else
        {
            Response.Write("<script  language='javascript'>alert('已经是第一页!');</script>");
        }
        DropDownList1.SelectedValue = lb_CurrentPage.Text;
        GetArticle();
    }    protected void LinkUp_Click(object sender, EventArgs e)
    {
        try
        {
            if (Convert.ToInt16(lb_CurrentPage.Text) > 1)
            {
                lb_CurrentPage.Text = Convert.ToString(Convert.ToInt32(lb_CurrentPage.Text) - 1);
                DropDownList1.SelectedValue = lb_CurrentPage.Text;
                GetArticle();
            }
            else
            {
                Response.Write("<script  language='javascript'>alert('已经是第一页!');</script>");
            }
        }
        catch (Exception ex)
        {
            Response.Write("<script  language='javascript'>alert('已经是第一页!');</script>");
        }
    }
    protected void LinkLast_Click(object sender, EventArgs e)
    {
        if (lb_CurrentPage.Text.ToString() != lb_page.Text.ToString())
            lb_CurrentPage.Text = lb_page.Text.ToString();
        else
        {
            Response.Write("<script  language='javascript'>alert('已经是最后一页!');</script>");
        }
        DropDownList1.SelectedValue = lb_CurrentPage.Text;
        GetArticle();
    }
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int page = Convert.ToInt16(DropDownList1.SelectedItem.Value);
        lb_CurrentPage.Text = page.ToString();
        GetArticle();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        //检索数据时重新建立数据集
        conn = new SqlConnection("server=.;database=mynews;UID=sa;PassWord=12345");
        da = new SqlDataAdapter();
        ds = new DataSet();
        da.SelectCommand = new SqlCommand("select Id,Title,Dtime from News where Title like '%" + Search.Text.ToString() + "%'order by Id desc", conn);
        conn.Open();
        da.Fill(ds, "Article");
        conn.Close();
        GetArticle();
    }
}

解决方案 »

  1.   

    if (!IsPostBack)
      {
      for (int i = 1; i < ps.PageCount + 1; i++)
      {
      this.DropDownList1.Items.Add(i.ToString());
      }
      LinkUp.Enabled = true;
      LinkDown.Enabled = true;
      }
    关键是你这里的!IsPostBack了。这里在你再次检索的时候,它也不执行,相当于数据更新了,页面导航没有更新导致。如果没有意外的话,估计你的页面导航点击后会有错误发生。去掉它看看有什么效果。
      

  2.   

    wxr0323,这位兄弟,能帮我调调吗?怎样做全局变量的数据集?我搞asp.net时间不长,经验少。