这个问题我问了好两次了,可是都没得到解决。
就是电子相册的分页问题。
有朋友给我看过分页的源代码,可是都用到了dataset可是电子相册用不到dataset怎么办。
有人说用XML(可是怎么用XML?)我下了一个用XML的电子相册可是它是DLL文件(怎么看啊?)
我就是想知道怎么样能给电子相册datalist分页,要解决方法(而不是用这个用那个那都是废话)。或是那本书上有解决这个问题的方法我可以去买。
请大家帮助,我不相信,我们的CSDN里面没有这样的高手。

解决方案 »

  1.   

    Repeater和DataList控件提供了一个快速、灵活的表现数据的方式,但是,它们没有内建的分页功能;DataGrid控件提供了内建的分页功能,但它的结构比较复杂。下面就用PagedDataSource类实现Repeater和DataList的分页。 PagedDataSource封装了DataGrid的分页属性,我们可以象DataGrid那样进行分页。代码如下:
    http://dotnet.aspx.cc/ShowDetail.aspx?id=D5C6E29D-99F5-44E8-4FED-75AF892A53CB
    是这个意思吗?
      

  2.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    // ÔÚ´Ë´¦·ÅÖÃÓû§´úÂëÒÔ³õʼ»¯Ò³Ãæ
    PageSize=10;
    if(!Page.IsPostBack)
    {
       
    CurrentPage =0;
    ViewState["PageIndex"] = 0; 

    //¼ÆËãÓжàÉټǼ
    MyDataBase MyCount=new MyDataBase();
    MyCount.SqlString="select * from tb_guest";
    RecordCount=MyCount.GetDataSet.Tables[0].Rows.Count;
    //¼ÆËãÓжàÒ³
    if(RecordCount%PageSize==0)
    {
    PageCount=RecordCount/PageSize;
    LB_pagecount.Text=PageCount.ToString();
    ViewState["PageCount"] = PageCount; 
    }
    else
    {
    PageCount=RecordCount/PageSize+1;
    LB_pagecount.Text=PageCount.ToString();
    ViewState["PageCount"] = PageCount;  }
    //DataListÏÔʾ
    ListBind();
    DDLBind();
    }
    }
      

  3.   

    int PageSize,RecordCount,PageCount,CurrentPage;
      

  4.   

    我想你也可以用SQL语句实现分页
      

  5.   

    public void ListBind()
    {
    int StartIndex;
    StartIndex=PageSize*CurrentPage;
    MyDataBase MyList=new MyDataBase();
    MyList.SqlString="select * from tb_guest order by guest_id desc";
    DataList1.DataSource=MyList.FreeDataSoure(StartIndex,PageSize);
    DataList1.DataBind();
    Btn_prev.Enabled=true;
    Btn_next.Enabled=true;
    if(CurrentPage==0){Btn_prev.Enabled=false;}
    if(CurrentPage==PageCount-1){Btn_next.Enabled=false;}
    int CurrentNum=CurrentPage+1;
    Lb_currentpage.Text=CurrentNum.ToString();
    MyList.Close(); }
      

  6.   

    private void Btn_first_Click(object sender, System.EventArgs e)
    {
    //Ê×Ò³
    CurrentPage = (int)ViewState["PageIndex"]; 
    PageCount = (int)ViewState["PageCount"]; 
    CurrentPage=0;
    ViewState["PageIndex"] = CurrentPage;
    ListBind();
    } private void Btn_last_Click(object sender, System.EventArgs e)
    {
    CurrentPage = (int)ViewState["PageIndex"]; 
    PageCount = (int)ViewState["PageCount"]; 
    CurrentPage=PageCount-1;
    ViewState["PageIndex"] = CurrentPage;
    ListBind();
    } private void Btn_prev_Click(object sender, System.EventArgs e)
    {
    //ÉÏÒ»Ò³
    CurrentPage = (int)ViewState["PageIndex"]; 
    PageCount = (int)ViewState["PageCount"]; 
    if(CurrentPage>0) CurrentPage--; 
    ViewState["PageIndex"] = CurrentPage;
    ListBind();
    } private void Btn_next_Click(object sender, System.EventArgs e)
    {
    CurrentPage = (int)ViewState["PageIndex"]; 
    PageCount = (int)ViewState["PageCount"]; 
    if(CurrentPage<(PageCount-1)) CurrentPage++; 
    ViewState["PageIndex"] = CurrentPage;
    ListBind(); 
    } private void Btn_go_Click(object sender, System.EventArgs e)
    {
    CurrentPage = (int)ViewState["PageIndex"]; 
    PageCount = (int)ViewState["PageCount"]; 

    CurrentPage=Convert.ToInt32(DDL1.SelectedItem.Value.ToString());
    ViewState["PageIndex"] = CurrentPage;
    ListBind();
    }
      

  7.   

    你用的是DataReader吗??
    楼主可以用SQL语句分页和我上面给你的PagedDataSource
    结合做!
      

  8.   

    用存贮过程分页:
    create   PROCEDURE PF_GetRecordFromPage
        @tblName      varchar(255),       -- 表名
        @fldName      varchar(255),       -- 字段名
        @PageSize     int = 10,           -- 页尺寸
        @PageIndex    int = 1,            -- 页码
        @IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回
        @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
        @strWhere     varchar(1000) = ''  -- 查询条件 (注意: 不要加 where)
    ASdeclare  @strSQL   varchar(2000)     -- 主语句
    declare @strTmp   varchar(1000)     -- 临时变量
    declare @strOrder varchar(1000)       -- 排序类型if @OrderType != 0
    begin
        set @strTmp = '<(select min'
        set @strOrder = ' order by [' + @fldName +'] desc'
    end
    else
    begin
        set @strTmp = '>(select max'
        set @strOrder = ' order by [' + @fldName +'] asc'
    endset @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
        + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
        + @strOrderif @strWhere != ''
        set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
            + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
            + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
            + @fldName + '] from [' + @tblName + '] where (' + @strWhere + ') '
            + @strOrder + ') as tblTmp) and (' + @strWhere + ') ' + @strOrderif @PageIndex = 1
    begin
        set @strTmp = ''
        if @strWhere != ''
            set @strTmp = ' where (' + @strWhere + ')'    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
            + @tblName + ']' + @strTmp + ' ' + @strOrder
    endif @IsCount != 0
        set @strSQL = 'select count(*) as Total from [' + @tblName + ']'exec (@strSQL)GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
      

  9.   

    public DataView FreeDataSoure(int StartIndex,int PageSize)
    {
    MyConnection=new SqlConnection(ConfigurationSettings.AppSettings["strConnection"]);
    MyConnection.Open();
    SqlCommand MyCommand=new SqlCommand(SqlString,MyConnection);
    SqlDataAdapter MyDataAdapter=new SqlDataAdapter();
    ds=new DataSet();
    try
    {
    MyDataAdapter.SelectCommand=MyCommand;
    MyDataAdapter.Fill(ds,StartIndex,PageSize,"table");

    }
    catch
    {

    } if(MyDataAdapter!=null)
    {
    MyDataAdapter.Dispose();
    }
    if(MyCommand!=null)
    {
    MyCommand.Dispose();
    }
    if(MyConnection!=null)
    {
    MyConnection.Close();
    MyConnection.Dispose();
    }
    return ds.Tables[0].DefaultView;
    }
      

  10.   

    用DataAdapter.Fill(ds,StartIndex,PageSize,"table")或者用存储过程 
    然后用ViewState来保存PageIndex
    来分页这么做都行。
    数据量大的时候用存储过程分页效率高些。看看上面的关键的几句话就行了。