具有自定义网格视图分页的自动序列号
本文关键字:序列号 分页 视图 自定义 网格 | 更新日期: 2023-09-27 17:58:28
我正在为GridView和Repeater使用自定义分页。这是我迄今为止所做的代码:
Default.aspx:
<asp:Repeater ID="rptPager" runat="server">
<ItemTemplate>
<asp:LinkButton ID="lnkPage" runat="server" Text='<%#Eval("Text") %>' CommandArgument='<%# Eval("Value") %>'
CssClass='<%# Convert.ToBoolean(Eval("Enabled")) ? "page_enabled" : "page_disabled" %>'
OnClick="lnkPage_Click" PostBackUrl='<%# "~/UI/SearchCity.aspx?page=" + Eval("Text") %>' OnClientClick='<%# !Convert.ToBoolean(Eval("Enabled")) ? "return false;" : "" %>'></asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
Default.aspx.cs:
private void BindGridView(int pageIndex) //Bind data
{
List<Country> countryListView = null; //List type variable
countryListView = aManager.AllCountryList(); //Assigns the data in the list calling the method
totalRecordCount = countryListView.Count; //Counts total no. of record
pageSize = 4; //Page size
int startRow = pageIndex * pageSize; //Variable to assign the starting row
detailsGridView.DataSource = countryListView.Skip(startRow).Take(pageSize); //Shows data in GridView
detailsGridView.DataBind();
}
private void BindPager(int currentPageIndex) //Pagination
{
double getPageCount = (double)((decimal)totalRecordCount / (decimal)pageSize);
int pageCount = (int)Math.Ceiling(getPageCount); //Count page
List<ListItem> pages = new List<ListItem>(); //New list item
/****Pagination starts ****/
if (pageCount > 1)
{
pages.Add(new ListItem("<<", "1", currentPageIndex > 0));
for (int i = 1; i <= pageCount; i++)
{
pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPageIndex + 1));
}
pages.Add(new ListItem(">>", pageCount.ToString(), currentPageIndex < pageCount - 1));
}
/****Pagination ends ****/
rptPager.DataSource = pages;
rptPager.DataBind();
}
以上操作非常完美。但问题是,当我使用以下方法生成自动序列号时,它无法正常工作:
<%#(Container.DataItemIndex+1)%>
我的意思是,当我浏览到第2页时,行数从1开始,其他页面也是如此。是否有任何方法或任何其他有效的技术来解决此问题?
您有两种选择:1-使用您自己的rowcounter变量并将其存储在会话或viewpag对象中。
2-更好的是,让数据库生成您的行号。例如,如果您使用的是Sql Server,那么请执行以下操作:
SELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) ROW_NUM, * FROM MYTABLE
以下是GridView自定义分页的解决方案:
<asp:TemplateField HeaderText="Serial Number">
<ItemTemplate>
<%# (detailsGridView.PageIndex * detailsGridView.PageSize) + (Container.DataItemIndex + 1) %>
</ItemTemplate>
</asp:TemplateField>
这是最佳解决方案<%#(Container.DataItemIndex+1)%>