2022年4月8日 星期五

[研究][ASP.NET]ListView客製化分頁顯示DataPager控制項(三)

[研究][ASP.NET]ListView客製化分頁顯示DataPager控制項(三)

2022-04-08

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C#

此篇為這篇的改良,多了可以設定每頁幾筆。

[研究][ASP.NET]ListView客製化分頁顯示DataPager控制項(二)
https://shaurong.blogspot.com/2022/04/aspnetlistviewdatapager.html

[研究][ASP.NET]ListView客製化分頁顯示DataPager控制項(一)
https://shaurong.blogspot.com/2022/04/aspnetlistviewpager.html

ListView 中部份內容,DataPager可不放 ListView 中,若放 ListView 外,要加上 PagedControlID;另外可以設定多個 DataPager 指向同一個ListView,不管是在 ListView 內或外,都同時可以顯示和作用。 

Default.aspx


<asp:DataPager ID="DataPager1" PagedControlID="ListView1" runat="server">
    <Fields>
        <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="True" />
        <asp:NumericPagerField PreviousPageText="上10頁" ButtonCount="10" NextPageText="下10頁" ButtonType="Button" />
        <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" ShowNextPageButton="True" ShowPreviousPageButton="False" />
        <asp:TemplatePagerField  OnPagerCommand="TemplatePagerField_OnPagerCommand" >
            <PagerTemplate>
                <%--<td class="info">--%>
                    目前在第 <b>
                        <%# Container.TotalRowCount > 0 ? Math.Ceiling(((double)(Container.StartRowIndex + Container.MaximumRows) / Container.MaximumRows)) : 0 %>
                    </b>頁,共 <b>
                        <%# Math.Ceiling((double)Container.TotalRowCount / Container.MaximumRows)%>
                    </b>頁(共 <%# Container.TotalRowCount %> 筆)
                    <%--</td>--%>
                跳到第<asp:TextBox ID="txtNewPageIndex" runat="server" Text="<%# Container.TotalRowCount > 0 ? Math.Ceiling(((double)(Container.StartRowIndex + Container.MaximumRows) / Container.MaximumRows)) : 0 %>" Width="50px"></asp:TextBox>頁&nbsp;
                每頁<asp:TextBox ID="TextBox_PageSize" runat="server" Text="<%# Container.PageSize %>" Width="50px"></asp:TextBox>筆&nbsp;
                <%--<asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-1" CommandName="Page" Text="GO"  ></asp:LinkButton>&nbsp;--%>
                <asp:Button ID="Button1" runat="server" CausesValidation="False" CommandArgument="-1" CommandName="Page" Text="GO"  />
            </PagerTemplate>
        </asp:TemplatePagerField>
    </Fields>
</asp:DataPager>


Go 按鈕用

<asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-1" CommandName="Page" Text="GO"  ></asp:LinkButton>

或下面都可以

<asp:Button ID="Button1" runat="server" CausesValidation="False" CommandArgument="-1" CommandName="Page" Text="GO"  />

註:用 Buuton 在某些情況好像會出錯,若發生,請改回佣 LinkButton。

********************************************************************************

 Default.aspx.cs


using System;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        #region == protected void TemplatePagerField_OnPagerCommand(object sender, DataPagerCommandEventArgs e) ==
        protected void TemplatePagerField_OnPagerCommand(object sender, DataPagerCommandEventArgs e)
        {
            switch (e.CommandName)
            {
                //case "Next":
                //    int newIndex = e.Item.Pager.StartRowIndex + e.Item.Pager.PageSize;
                //    if (newIndex <= e.TotalRowCount)
                //    {
                //        e.NewStartRowIndex = newIndex;
                //        e.NewMaximumRows = e.Item.Pager.MaximumRows;
                //    }
                //    break;
                //case "Previous":
                //    e.NewStartRowIndex = e.Item.Pager.StartRowIndex - e.Item.Pager.PageSize;
                //    e.NewMaximumRows = e.Item.Pager.MaximumRows;
                //    break;
                //case "First":
                //    e.NewStartRowIndex = 0;
                //    e.NewMaximumRows = e.Item.Pager.MaximumRows;
                //    break;
                case "Page":
                    TextBox txtNewPageIndex = (TextBox)e.Item.FindControl("txtNewPageIndex");
                    TextBox TextBox_PageSize = (TextBox)e.Item.FindControl("TextBox_PageSize");
                    //int startRowIndex = 0;
                    int startPageIndex = 0;
                    //string startRowIndexStr = "";
                    string startPageIndexStr = "";
                    if (txtNewPageIndex != null)
                    {
                        startPageIndexStr = txtNewPageIndex.Text;
                        Int32.TryParse(startPageIndexStr, out startPageIndex);
                    }
                    Int32.TryParse(TextBox_PageSize.Text, out int pageSize);
                    if (pageSize<1) 
                        pageSize = 1;
                    e.Item.Pager.PageSize = pageSize;
                    e.NewStartRowIndex = (startPageIndex - 1) * e.Item.Pager.PageSize;
                    if (e.NewStartRowIndex < 0)
                        e.NewStartRowIndex = 0;
                    if (e.NewStartRowIndex > e.TotalRowCount)
                        e.NewStartRowIndex = (e.TotalRowCount/ e.Item.Pager.PageSize)* e.Item.Pager.PageSize;
                    e.NewMaximumRows = e.Item.Pager.MaximumRows;
                    //DataPager1.SetPageProperties(e.NewStartRowIndex, e.NewMaximumRows, true);
                    break;
            }
        }
        #endregion
    }
}



多了可以設定每頁幾筆。

(完)

相關

[研究][ASP.NET]ListView客製化分頁顯示DataPager控制項(三)
https://shaurong.blogspot.com/2022/04/aspnetlistviewdatapager_8.html

[研究][ASP.NET]ListView客製化分頁顯示DataPager控制項(二)
https://shaurong.blogspot.com/2022/04/aspnetlistviewdatapager.html

[研究][ASP.NET]ListView客製化分頁顯示DataPager控制項(一)
https://shaurong.blogspot.com/2022/04/aspnetlistviewpager.html

[研究][ASP.NET]設定 Gridview 分頁樣式為:第X頁,共X頁,第一頁 上一頁 下一頁 最後一頁 跳到第X頁 每頁顯示X筆
https://shaurong.blogspot.com/2020/04/aspnet-gridview-xx-x-x.html



沒有留言:

張貼留言