C# 通过ObjectDataSource进行分页的中继器

C# 通过ObjectDataSource进行分页的中继器,c#,asp.net,C#,Asp.net,是否可以使用ObjectDataSource的: EnablePaging="true" MaximumRowsParameterName="maximumRows" StartRowIndexParameterName="startRowIndex" SelectCountMethod="TotalNumberOfProducts"> 或者我必须在代码隐藏中设置所有值,并将其传递给ObjectDataSource的参数: <SelectParameters> &l

是否可以使用ObjectDataSource的:

EnablePaging="true" 
MaximumRowsParameterName="maximumRows" 
StartRowIndexParameterName="startRowIndex" 
SelectCountMethod="TotalNumberOfProducts">
或者我必须在代码隐藏中设置所有值,并将其传递给ObjectDataSource的参数:

<SelectParameters>
  <asp:Parameter Name="startRowIndex" DbType="Int32" DefaultValue="0" />
  <asp:Parameter Name="maximumRows" DbType="Int32" DefaultValue="10" />
</SelectParameters>

因为中继器不支持分页,您无法使用Objectdatasource实现这一点。。。
但如果要进行分页,则必须在代码级别处理。。。
我在代码级别对datalist进行了分页,因为datalist也不支持分页。。。
如果您需要代码,我可以为您提供。。。。 当您想将数据绑定到中继器时,请调用bindRpt方法,注意:这个示例处理“下一步”、“上一步”、“第一步”按钮的分页。。。。如果有什么不清楚的,请告诉我

private void BindRpt()
{
    PagedDataSource ObjPds;
    ObjPds = DoPagging((DataTable)ViewState["dtblProducts"]);
    dlProducts.DataSourceID = "";
    dlProducts.DataSource = ObjPds;
    dlProducts.DataBind();
}
protected PagedDataSource DoPagging(DataTable dt)
{
    if (dt.Rows.Count > 0)
    {
        lblNoRecord.Visible = false;
        pnlNavigation.Visible = true;
        pnlTopNavigation.Visible = true;
    }
    else
    {
        lblNoRecord.Visible = true;
        pnlNavigation.Visible = false;
        pnlTopNavigation.Visible = false;
    }
    PagedDataSource ObjPagDataSource = new PagedDataSource(); //'declares the paged data source
    ObjPagDataSource.DataSource = dt.DefaultView;

    ObjPagDataSource.AllowPaging = true;
    ObjPagDataSource.PageSize = PgSize;
    if (hdfPageIndex.Value == "SetLastPageIndex")
    {
        CurrentPageIndx = ObjPagDataSource.PageCount - 1;
        ObjPagDataSource.CurrentPageIndex = ObjPagDataSource.PageCount - 1;
    }
    else
    {
        ObjPagDataSource.CurrentPageIndex = CurrentPageIndx; 
    }

    if (ObjPagDataSource.PageCount > 1)
    {
        if (ObjPagDataSource.IsFirstPage == true)
        {
            ibtnLast.Enabled = true;
            ibtnFirst.Enabled = false;
            ibtnPrevious.Enabled = false;  
            ibtnNext.Enabled = true;

            ibtnLastTop.Enabled = true;
            ibtnFirstTop.Enabled = false;
            ibtnPreviousTop.Enabled = false;
            ibtnNextTop.Enabled = true;
        }
        else if (ObjPagDataSource.IsLastPage == true)
        {
            ibtnFirst.Enabled = true;
            ibtnLast.Enabled = false;
            ibtnNext.Enabled = false;
            ibtnPrevious.Enabled = true;

            ibtnFirstTop.Enabled = true;
            ibtnLastTop.Enabled = false;
            ibtnNextTop.Enabled = false;
            ibtnPreviousTop.Enabled = true;
        }
        else
        {
            ibtnFirst.Enabled = true;
            ibtnPrevious.Enabled = true;
            ibtnNext.Enabled = true;
            ibtnLast.Enabled = true;

            ibtnFirstTop.Enabled = true;
            ibtnPreviousTop.Enabled = true;
            ibtnNextTop.Enabled = true;
            ibtnLastTop.Enabled = true;
        }
    }
    else
    {
        ibtnFirst.Enabled = false;
        ibtnLast.Enabled = false;
        ibtnPrevious.Enabled = false;
        ibtnNext.Enabled = false;

        ibtnFirstTop.Enabled = false;
        ibtnLastTop.Enabled = false;
        ibtnPreviousTop.Enabled = false;
        ibtnNextTop.Enabled = false;
    }

    return ObjPagDataSource;
}

public int CurrentPageIndx
{
    get
    {
        System.Object o = this.ViewState["_CurrentPageIndx"];
        if (o == null)
            return 0;
        else
            return Convert.ToInt32(o);
    }
    set
    {
        ViewState["_CurrentPageIndx"] = value;
    }
}

protected void ibtnFirst_Click(object sender, ImageClickEventArgs e)
{
    hdfPageIndex.Value = "";
    CurrentPageIndx = 0;
    BindRpt();
}
protected void ibtnPrevious_Click(object sender, ImageClickEventArgs e)
{
    hdfPageIndex.Value = "";
    CurrentPageIndx = CurrentPageIndx - 1;
    BindRpt();
}
protected void ibtnNext_Click(object sender, ImageClickEventArgs e)
{
    hdfPageIndex.Value = "";
    CurrentPageIndx = CurrentPageIndx + 1;
    BindRpt();
}
protected void ibtnLast_Click(object sender, ImageClickEventArgs e)
{
    hdfPageIndex.Value = "SetLastPageIndex";
    BindRpt();
}

是的,请这样做,我会很感激的。如果我没有弄错的话,这个解决方案在表示层而不是数据访问层上进行分页,对吗?是的,你是对的,如果你想在数据访问层上进行分页,最好是在存储过程层上进行…:)