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

    Repeater와 함께 GridView에 대한 사용자 지정 페이지 매김을 사용하고 있습니다.사용자 지정 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 행의 행 인덱스를 결정하는 데 사용할 수 있습니다. 따라서 예상대로 작동합니다.

    다음 두 가지 중에서 선택할 수 있습니다. 1- 고유 한 행 카운터 변수를 사용하여 세션 또는 viewpag 개체에 저장합니다.

    더 나은 점은 데이터베이스가 대신 행 번호를 생성하도록하는 것입니다. 는 SQL 서버를 사용하는 경우 예를 들어, 다음과 같이 뭔가를 할 :

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

    나는 자동으로 일련 번호를 생성하려면이 시도했다 : . 그런 다음 마침내 this, int serialNo = 1; protected void detailsGridView_RowDataBound (Object sender, GridViewRowEventArgs e) {if (e.Row.RowType == DataControlRowType.DataRow) {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

    이것은 같은 페이지에 있어야합니다. 세션에서 값을 유지해야합니까? –

    관련 문제