GridViewとRepeaterのカスタムページネーションを使用しています。これまでに行ったコードは次のとおりです。カスタムGridViewでの自動シリアル番号ページ番号
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から始まり、他のページに同じ:しかし、問題は、私は、自動シリアル番号を生成するには、次を使用する場合、それが正常に動作しないです。これを解決する方法や他の効率的な方法がありますか?
を私は自動シリアル番号を生成するためにこれをしようとしました。そして最後に、これはint serialNo = 1; (TextControlRowEventArgs){if(String.IsNullOrEmpty((Label)e.Row.FindControl( "labelSerialNo"))。テキスト)を使用して、 ){Label labelSerialNo =(Label)e.Row.FindControl( "labelSerialNo"); labelSerialNo.Text = serialNo.ToString(); serialNo = serialNo + 1; }}}。しかし、それは動作しませんでした。可能であれば、私が何かを逃したかどうか教えてください。私はオプション2を好むし、働いた。 –
serialNoはページビュー全体で永続化する必要があります。 'Session [" serialNo "] = serialNo;'と 'serialNo = int.Parse(Session [" serialNo "]。ToString());' – TruthSeeker
これは同じページにあるはずです。セッションで値を保持する必要がありますか? –