RT

解决方案 »

  1.   

    我现在控件分页也经常自己写,Details View控件基本没怎么用,但是我想原理是一样的吧。页码,上页,下页可以使用HyperLink控件,地址是本页面地址?tab=n,n就是分页页码,在PageLoad中先使用Request.QueryString读取tab值,然后在绑定数据时根据分页读取制定数据,如(我自己开发网站的代码):
     //获取指定类别、指定数目、指定分页文章(按阅读次数排序)
            internal DataTable GetStatuteListByTab(string category,int count,int tabId)
            {
                string sql;
                if (category == "全部")
                    sql = "SELECT TOP " + count.ToString() + " * FROM PublicInfo.Statute WHERE  StatuteId NOT IN " +
                    "(SELECT TOP " + ((int)(count * (tabId - 1))).ToString() + " StatuteId FROM PublicInfo.Statute " +
                    "ORDER BY Count DESC) ORDER BY Count DESC";
                else
                    sql = "SELECT TOP " + count.ToString() + " * FROM PublicInfo.Statute " +
                    "WHERE Category='" + category + "' AND StatuteId NOT IN " +
                    "(SELECT TOP " + ((int)(count*(tabId-1))).ToString() + " StatuteId FROM PublicInfo.Statute " +
                    "WHERE Category='" + category + "' ORDER BY Count DESC) ORDER BY Count DESC";
                try
                {
                    return GetDataTable(sql);
                }
                catch (Exception err)
                {
                    throw new Exception(err.Message);
                }
            }
    这是一个读取文章的代码,category是分类(要在QueryString中添加,同tab),count是每页显示数目,tabid是分页(0开始),数据库操作代码我就不详细说了,应该能看懂吧^_^(太晚了啊,半夜了,有点困了),原理就是比如要读第n页, 就先将前n-1页过滤,然后读取前count(每页显示数目)项。
      

  2.   

    对了,GetDataTable(sql)就是一个执行sql语句然后返回DataTable的函数,自己写的。
      

  3.   

    http://msdn.microsoft.com/zh-cn/library/ms227442(VS.80).aspx
    http://hi.baidu.com/twmp/blog/item/bad0b81fe1ac9d60f724e424.html
      

  4.   

    aspx
    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %><!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>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            &nbsp;</div>
            &nbsp;<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
                Height="50px" Width="215px" OnPageIndexChanging="DetailsView1_PageIndexChanging">
                <Fields>
                    <asp:BoundField DataField="id" HeaderText="编号" />
                    <asp:BoundField DataField="name" HeaderText="商品名称" />
                    <asp:BoundField DataField="price" HeaderText="商品价格" />
                </Fields>
            </asp:DetailsView>
        </form>
    </body>
    </html>
    csusing 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 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                dataBind();
            }
           
        }
        public void dataBind()
        { 
       //实例化SqlConnection对象
                SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=;database=db_11");
                con.Open();
                //实例化SqlDataAdapter对象
                SqlDataAdapter da = new SqlDataAdapter("select * from tb_08", con);
                //实例化数据集DataSet
                DataSet ds = new DataSet();
                da.Fill(ds, "tb_08");
                DetailsView1.AllowPaging = true;
                this.DetailsView1.DataSource = ds.Tables[0].DefaultView;
                DetailsView1.DataBind();  
        
        }
        protected void DetailsView1_PageIndexChanging(object sender, DetailsViewPageEventArgs e)
        {
            DetailsView1.PageIndex = e.NewPageIndex;
            dataBind();
        }
    }这是我原来用过了,但觉得不怎么好
    勉强能用吧