定制转发器分页 [英] customize repeater paging
问题描述
我正在处理转发器自定义分页。分页工作正常,看起来像这样:
首页上一页1 2 3 4 5 6 7 8下一页尾页
随着我的记录增加,它也会增加页码,如果我有500条记录,那么从1到50不会看到数字。
我需要这样工作:
First Previous 1 2 3 4 5下一页尾页
一次只显示五条记录,如果我在第5页并点击下一步那么它应该看起来像这样6 7 8 9 10当我在第2页时然后点击下一步它应该是这样的1 2 3 4 5
I am working on repeater custom paging. The paging is working fine and it looks like this:
First Prev 1 2 3 4 5 6 7 8 Next Last
As my records increases it also increases the page numbers, if i have 500 records then it will not good see numbers from 1 to 50.
I need to work like this:
First Previous 1 2 3 4 5 Next Last
Only five records show at a time, If i am at page5 and click on next then it should be look like this 6 7 8 9 10 and when i am at page2 and click next then it should be look like this 1 2 3 4 5
protected int BindRepeaterData()
{
con.Open();
SqlCommand cmd = new SqlCommand("sps_searchresult", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@country", 1);
cmd.Parameters.AddWithValue("@state", state);
cmd.Parameters.AddWithValue("@pincode", pincode);
cmd.Parameters.AddWithValue("@category", category);
cmd.Parameters.AddWithValue("@subcategory", subcategory);
con.Close();
//save the result in data table
DataTable dt = new DataTable();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);
int noOfRows = dt.Rows.Count;
lbl_totalrecords.Text = "Total Results Found : " + noOfRows.ToString();
PagedDataSource pgitems = new PagedDataSource();
DataView dv = new DataView(dt);
pgitems.DataSource = dv;
pgitems.AllowPaging = true;
pgitems.PageSize = 2;
int count = pgitems.PageCount;
pgitems.CurrentPageIndex = PageNumber;
if (pgitems.Count > 0)
{
lbtnPrev.Visible = true;
lbtnNext.Visible = true;
lbtnFirst.Visible = true;
lbtnLast.Visible = true;
//Change the text Now viewing text
lblCurrentPage.Text = "Page : " + (PageNumber + 1).ToString() + " of " + pgitems.PageCount.ToString();
rptPaging.Visible = true;
ArrayList pages = new ArrayList();
for (int i = 0; i < pgitems.PageCount; i++)
pages.Add((i + 1).ToString());
rptPaging.DataSource = pages;
rptPaging.DataBind();
}
else
{
lbtnPrev.Visible = false;
lbtnNext.Visible = false;
lbtnFirst.Visible = false;
lbtnLast.Visible = false;
rptPaging.Visible = false;
}
lbtnPrev.Enabled = !pgitems.IsFirstPage;
lbtnNext.Enabled = !pgitems.IsLastPage;
lbtnFirst.Enabled = !pgitems.IsFirstPage;
lbtnLast.Enabled = !pgitems.IsLastPage;
rep_results.DataSource = pgitems;
rep_results.DataBind();
return count;
}
protected void rptPaging_ItemCommand(object source, RepeaterCommandEventArgs e)
{
PageNumber = Convert.ToInt32(e.CommandArgument) - 1;
BindRepeaterData();
}
public int PageNumber
{
get
{
//get current page number
object obj = this.ViewState["_PageNumber"];
if (obj == null)
{
return 0;
}
else
{
return (int)obj;
}
}
set
{
//set in viewstate the current page number
this.ViewState["_PageNumber"] = value;
}
}
protected void lbtnPrev_Click(object sender, EventArgs e)
{
PageNumber -= 1;
BindRepeaterData();
}
protected void lbtnNext_Click(object sender, EventArgs e)
{
PageNumber += 1;
BindRepeaterData();
}
protected void lbtnFirst_Click(object sender, EventArgs e)
{
PageNumber = 0;
BindRepeaterData();
}
protected void lbtnLast_Click(object sender, EventArgs e)
{
PageNumber = BindRepeaterData() - 1;
BindRepeaterData();
}
<pre lang="HTML">
<div style="overflow: hidden;">
<asp:Repeater ID="rptPaging" runat="server" onitemcommand="rptPaging_ItemCommand" >
<ItemTemplate>
<asp:LinkButton ID="btnPage" style="padding:8px; margin:2px; background:#911216; text-decoration:none; border:solid 1px black; font:8pt tahoma;"
CommandName="Page" CommandArgument="<%# Container.DataItem %>" runat="server" ForeColor="White" Font-Bold="True"><%# Container.DataItem %>
</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
</div>
<br/>
<asp:Button ID="lbtnFirst" runat="server" Text="First" onclick="lbtnFirst_Click" Width="70"></asp:Button>
<asp:Button ID="lbtnPrev" runat="server" Text="Prev" onclick="lbtnPrev_Click" Width="70"></asp:Button>
<asp:Label ID="lblCurrentPage" runat="server" Text=""></asp:Label>
<asp:Button ID="lbtnNext" runat="server" Width="70" Text="Next" onclick="lbtnNext_Click"></asp:Button>
<asp:Button ID="lbtnLast" runat="server" Width="70" Text="Last" onclick="lbtnLast_Click"></asp:Button>
推荐答案
请替换以下鳕鱼e in BindRepeaterData 功能
Please replace the following code in BindRepeaterData function
rptPaging.Visible = true;
ArrayList pages = new ArrayList();
for (int i = 0; i < pgitems.PageCount; i++)
pages.Add((i + 1).ToString());
rptPaging.DataSource = pages;
rptPaging.DataBind();
with
with
rptPaging.Visible = true;
// Here we calculate the Start Index and End Index of the page numbers that we need to display in pagination..
int iStartIndex = (pgitems.CurrentPageIndex/5)*5+1;
int iEndIndex = iStartIndex+4;
if(iEndIndex > pgitems.PageCount-1)
{
iEndIndex = pgitems.PageCount-1;
}
ArrayList pages = new ArrayList();
for (int i = iStartIndex; i <= iEndIndex ; i++)
pages.Add((i + 1).ToString());
rptPaging.DataSource = pages;
rptPaging.DataBind();
我希望这会对你有所帮助...... :)
I hope this will help you... :)
这篇关于定制转发器分页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!