c#
  • asp.net
  • pagination
  • 2016-07-24 13 views 0 likes 
    0

    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から始まり、他のページに同じ:しかし、問題は、私は、自動シリアル番号を生成するには、次を使用する場合、それが正常に動作しないです。これを解決する方法や他の効率的な方法がありますか?

    答えて

    0

    Container.DataItemIndexは、GridViewにバインドされたデータ項目のインデックスであり、GridView Rowの行インデックスを決定するために使用できます。したがって、期待どおりに動作しています。

    2つの選択肢があります。 1-独自のrowcounter変数を使用して、セッションまたはviewpagオブジェクトに格納します。

    2つでは、データベースで行番号を生成するようにしてください。あなたは、SQL Serverを使用している場合たとえば、このような何か:

    SELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) ROW_NUM, * FROM MYTABLE 
    
    +0

    を私は自動シリアル番号を生成するためにこれをしようとしました。そして最後に、これは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を好むし、働いた。 –

    +0

    serialNoはページビュー全体で永続化する必要があります。 'Session [" serialNo "] = serialNo;'と 'serialNo = int.Parse(Session [" serialNo "]。ToString());' – TruthSeeker

    +0

    これは同じページにあるはずです。セッションで値を保持する必要がありますか? –

    関連する問題