tags:

views:

413

answers:

1

Is it possible to implement custom paging for repeater using ObjectDataSource's:

EnablePaging="true" 
MaximumRowsParameterName="maximumRows" 
StartRowIndexParameterName="startRowIndex" 
SelectCountMethod="TotalNumberOfProducts">

Or I must set all values in code behind and pass the to ObjectDataSource's parameters:

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

As repeater does not support paging and you can't achevie this using Objectdatasource...
but if you want to do paging, you have to handle at code level...
I did paging for datalist at code level as datalist also not support paging...
If you need code I can provide you.... Call bindRpt method when you want to bind data to repeater, note: this example handle paging next,back,last,first button.... if anything not clear, plz let me know

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();
}
Muhammad Akhtar
Yes, please do I'll appreciate it.
pzl tell me ur email, I will email you....
Muhammad Akhtar
If i am not mistaken this solution does paging on presentation layer and not on data access level, right?
yes, you are right, if you want to do paging in data access level, best is do in Stored Procedure level... :)
Muhammad Akhtar