zoukankan      html  css  js  c++  java
  • ASP.NET分页控件

    效果图

    这个在用户控件一用一次

    <%@ Register Assembly="Uni2Uni.ERP.Common" Namespace="Uni2Uni.ERP.Common.PageBar"
        TagPrefix="cc1" %>
    <cc1:PageBar ID="pageBar" runat="server" Mode="Post" />

    然后使用那个用户控件

    <uc1:PageBarControl ID="PageBarControl1" runat="server" />
    
    
    PageBarControl1.PageBar.Click += new EventHandler(PagerChange);
            
    
            private void PagerChange(object sender, EventArgs e)
            {
                var queryEntity = ViewState["queryEntity"] as DamagedQueryEntity;
                GetPageData(queryEntity, false);
            }
    
    
     private void GetPageData(DamagedQueryEntity queryEntity, bool bFirst = true)
            {
                if (bFirst)
                    PageBarControl1.PageBar.CurrentIndex = 1;
                int totalCount;
                var list = bll.GetDamagedOrderPage(PageBarControl1.PageBar.CurrentIndex, PageBarControl1.PageBar.Size, out totalCount, queryEntity);
                this.PageBarControl1.PageBar.Total = totalCount;
                this.bindData.DataSource = list;
                this.bindData.DataBind();
            }
    


     

    源码

    using System;
    using System.Collections.Specialized;
    using System.ComponentModel;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    
    [assembly: WebResource("Uni2Uni.ERP.Common.PageBar.PageBar.css", "text/css", PerformSubstitution = true)]
    
    namespace Uni2Uni.ERP.Common.PageBar
    {
        public enum PageBarMode
        {
            Get,
            Post
        }
    
        #region - PageBar -
    
        /// <summary>
        /// 分页控件
        /// </summary>
        [ToolboxData("<{0}:PageBar runat="server" />")]
        [DefaultEvent("Click")]
        [DefaultProperty("Size")]
        public sealed class PageBar : WebControl, IPostBackEventHandler
        {
            #region - Properties -
    
            #region = Total =
    
            /// <summary>
            /// 总共有多少记录集合
            /// </summary>
            /// <value>The total.</value>
            [Category("Data"), Description("总共有多少记录集合")]
            public int Total
            {
                get
                {
                    object o = ViewState["Total"];
                    return o == null ? 0 : (int)o;
                }
                set { ViewState["Total"] = value; }
            }
    
            #endregion
    
            #region = CurrentIndex =
    
            /// <summary>
            /// 当前使用的页面
            /// </summary>
            /// <value>The index of the current.</value>
            [Category("Data"), Description("当前使用的页面")]
            public int CurrentIndex
            {
                get
                {
                    object o = ViewState["CurrentIndex"];
                    int _currentindex = ((o == null) ? 0 : (int)o);
                    if (_currentindex == 0)
                    {
                        _currentindex = 1;
    
                        if (string.IsNullOrEmpty(UrlFormatString) == false)
                        {
                            string url = Page.Request.Url.ToString();
                            string urlformat = string.Format(UrlFormatString, @"(d+)");
                            urlformat = urlformat.Replace("?", "\?");
                            urlformat = Regex.Replace(urlformat, "#.+$", string.Empty);
    
                            Match m = Regex.Match(url, urlformat, RegexOptions.IgnoreCase);
    
                            if (m.Success)
                            {
                                string value = m.Groups[1].Value;
                                if (string.IsNullOrEmpty(value) == false)
                                {
                                    _currentindex = int.Parse(value);
                                }
                            }
                        }
                        else
                        {
                            if (Page.Request.QueryString[QueryStringKey] != null)
                            {
                                int.TryParse(Page.Request.QueryString[QueryStringKey], out _currentindex);
                            }
                        }
                    }
                    return _currentindex;
                }
                set { ViewState["CurrentIndex"] = value; }
            }
    
            #endregion
    
            #region = Size =
    
            /// <summary>
            /// 每个页面显示多少记录集合
            /// </summary>
            /// <value>The size.</value>
            [Category("Data"), Description("每个页面显示多少记录集合")]
            public int Size
            {
                get
                {
                    object o = ViewState["Size"];
                    return o == null ? 10 : (int)o;
                }
                set { ViewState["Size"] = value; }
            }
    
            #endregion
    
            #region = Displaysize =
    
            /// <summary>
            /// 显示页脚,控件显示多少页面数
            /// </summary>
            /// <value>The displaysize.</value>
            [Category("Data"), Description("控件显示多少页面数")]
            public int Displaysize
            {
                get
                {
                    object o = ViewState["Displaysize"];
                    return o == null ? 10 : (int)o;
                }
                set { ViewState["Displaysize"] = value; }
            }
    
            #endregion
    
            #region = Unit =
    
            /// <summary>
            /// 记录的单位
            /// </summary>
            /// <value>The unit.</value>
            [Category("Appearance"), Description("记录的单位")]
            public string Unit
            {
                get
                {
                    object o = ViewState["Unit"];
                    return o == null ? string.Empty : (string)o;
                }
                set { ViewState["Unit"] = value; }
            }
    
            #endregion
    
            #region = UrlFormatString =
    
            [
                Category("Property"),
                Description("获取或设置 URL 显示格式。"),
                DefaultValue("")
            ]
            public string UrlFormatString
            {
                get
                {
                    object o = ViewState["UrlFormatString"];
                    return o == null ? string.Empty : (string)o;
                }
                set { ViewState["UrlFormatString"] = value; }
            }
    
            #endregion
    
            #region = QueryStringKey =
    
            /// <summary>
            /// 传递值是使用的关键字
            /// </summary>
            /// <value>The query string key.</value>
            [Description("传递值是使用的关键字"), DefaultValue("page")]
            public string QueryStringKey
            {
                get
                {
                    object o = ViewState["QueryStringKey"];
                    return o == null ? "page" : (string)o;
                }
                set { ViewState["QueryStringKey"] = value; }
            }
    
            #endregion
    
            #region = 跳转的页数 =
            /// <summary>
            /// 跳转的页数
            /// </summary>
            [Browsable(true)]
            [Bindable(true, BindingDirection.TwoWay)]
            [DefaultValue("")]
            [Localizable(true)]
            [PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)]
            [Description("跳转的页数")]
            public string Text
            {
                get
                {
                    return ViewState["Text"] == null ? "" : ViewState["Text"].ToString();
                }
                set
                {
                    ViewState["Text"] = value;
                }
            }
            #endregion
    
            #region = Format =
    
            /// <summary>
            /// 数字格式化
            /// </summary>
            /// <value>The format.</value>
            [Description("数字格式化"), DefaultValue("")]
            public string Format
            {
                get
                {
                    object o = ViewState["Format"];
                    return o == null ? string.Empty : (string)o;
                }
                set { ViewState["Format"] = value; }
            }
    
            #endregion
    
            #region = NextPageImageUrl =
    
            /// <summary>
            /// 下一页图片路径
            /// </summary>
            /// <value>The next page image URL.</value>
            [Description("下一页图片路径"), DefaultValue("")]
            public string NextPageImageUrl
            {
                get
                {
                    object o = ViewState["NextPageImageUrl"];
                    return o == null ? string.Empty : (string)o;
                }
                set { ViewState["NextPageImageUrl"] = value; }
            }
    
            #endregion
    
            #region = LastPageImageUrl =
    
            private string _lastimage = string.Empty;
    
            /// <summary>
            /// 上一页图片路径
            /// </summary>
            /// <value>The last page image URL.</value>
            [Description("上一页图片路径"), DefaultValue("")]
            public string LastPageImageUrl
            {
                get
                {
                    object o = ViewState["LastPageImageUrl"];
                    return o == null ? string.Empty : (string)o;
                }
                set { ViewState["LastPageImageUrl"] = value; }
            }
    
            #endregion
    
            #region = Mode =
    
            [
                Category("Property"),
                Description("Pagebar的模式"),
                DefaultValue("")
            ]
            public PageBarMode Mode
            {
                get
                {
                    object o = ViewState["Mode"];
                    return o == null ? PageBarMode.Get : (PageBarMode)o;
                }
                set { ViewState["Mode"] = value; }
            }
    
            #endregion
    
            #region = ValidationGroup =
    
            [Category("Behavior"), DefaultValue(""), Themeable(false), Description("PostBackControl_ValidationGroup")]
            public string ValidationGroup
            {
                get
                {
                    var text1 = (string)ViewState["ValidationGroup"];
                    if (text1 != null)
                    {
                        return text1;
                    }
                    return string.Empty;
                }
                set { ViewState["ValidationGroup"] = value; }
            }
    
            #endregion
    
            #region = CausesValidation =
    
            /// <summary>
            /// 获取或设置一个值,该值指示在单击 LinkButton 控件时是否执行验证。 
            /// </summary>
            /// <value><c>true</c> if [causes validation]; otherwise, <c>false</c>.</value>
            [Category("Behavior"), Themeable(false), Description("Button_CausesValidation"), DefaultValue(true)]
            public bool CausesValidation
            {
                get
                {
                    object obj1 = ViewState["CausesValidation"];
                    if (obj1 != null)
                    {
                        return (bool)obj1;
                    }
                    return true;
                }
                set { ViewState["CausesValidation"] = value; }
            }
    
            #endregion
    
            #region = Target =
    
            /// <summary>
            /// Gets or sets the target.
            /// </summary>
            /// <value>The target.</value>
            [
                Category("Navigation"),
                TypeConverter(typeof(TargetConverter)),
                DefaultValue(""),
                Description("HyperLink_Target")]
            public string Target
            {
                get
                {
                    var text1 = (string)ViewState["Target"];
                    if (text1 != null)
                    {
                        return text1;
                    }
                    return "_self";
                }
                set { ViewState["Target"] = value; }
            }
    
            #endregion
    
            #endregion
    
            #region - Event -
    
            #region = OnClick =
    
            private static readonly object EventClick = new object();
    
            [Description("PageBar_OnClick"), Category("Action")]
            public event EventHandler Click
            {
                add { Events.AddHandler(EventClick, value); }
                remove { Events.RemoveHandler(EventClick, value); }
            }
    
            #endregion
    
            #endregion
    
            #region = OnPreRender =
    
            /// <summary>
            /// Raises the <see cref="E:System.Web.UI.Control.PreRender"></see> event.
            /// </summary>
            /// <param name="e">An <see cref="T:System.EventArgs"></see> object that contains the event data.</param>
            protected override void OnPreRender(EventArgs e)
            {
                base.OnPreRender(e);
    
                string cssKey = "PageBarCss";
    
                if (Page == null || Page.Header == null)
                {
                    return;
                }
                if (string.IsNullOrEmpty(CssClass))
                {
                    CssClass = "PageBar";
                }
                if (Page.Header.FindControl(cssKey) == null && CssClass == "PageBar")
                {
                    string css = Page.ClientScript.GetWebResourceUrl(GetType(), "Uni2Uni.ERP.Common.PageBar.PageBar.css");
                    var hl = new HtmlLink();
                    hl.ID = cssKey;
                    hl.Href = css;
                    hl.Attributes["type"] = "text/css";
                    hl.Attributes["rel"] = "stylesheet";
    
                    //this.Page.Header.Controls.Add(hl);
    
                    CssClass = "PageBar";
                }
            }
    
            #endregion
    
            #region = RenderContents =
    
            /// <summary>
            /// Renders the contents of the control to the specified writer. This method is used primarily by control developers.
            /// </summary>
            /// <param name="writer">A <see cref="T:System.Web.UI.HtmlTextWriter"></see> that represents the output stream to render HTML content on the client.</param>
            protected override void RenderContents(HtmlTextWriter writer)
            {
                base.RenderContents(writer);
    
                #region - Valid -
    
                if (IsEnabled == false)
                {
                    return;
                }
    
                if (Size == 0 || Displaysize == 0)
                {
                    return;
                }
    
                #endregion
    
                if (Total > 0 && CurrentIndex > 0)
                {
                    double dPageCount = 1.0 * Total / Size;
                    int PageCount = Convert.ToInt32(Math.Ceiling(dPageCount)); //共多少页
    
                    PostBackOptions options = GetPostBackOptions("{0}");
                    string srt = Page.ClientScript.GetPostBackEventReference(options, true);
    
                    //---【新添加】
                    //只能输入正整数
                    string js = "<script type="text/javascript">var postbackstring="" + srt + "";var total=" + PageCount + "; function PositiveInteger(element, keyCode) {if (keyCode == 9 || keyCode == 116 || (keyCode >= 35 && keyCode <= 40)) {return true;}if ($(element).val().length == 0 && (keyCode == 96 || keyCode==48)){return false;}return (keyCode >= 96 && keyCode <= 105 || keyCode == 8 || (keyCode >= 48 && keyCode <= 57));}function validatePage(element){if($("#goPage").val()==""){alert("请输入跳转页数。");return false;}if($("#goPage").val()>total){alert("跳转页数不能大于总页数。");return false;}$(element).attr("href",postbackstring.replace("{0}",$("#goPage").val()));return true;}</script>";
                    writer.Write(js);
    
                    if (CurrentIndex > PageCount)
                    {
                        CurrentIndex = PageCount;
                    }
    
                    //总共2784主题
                    writer.Write(PageBarResource.Total);
                    //writer.Write("总共");
                    writer.Write(" ");
                    writer.RenderBeginTag(HtmlTextWriterTag.Label);
                    writer.Write(Total.ToString(Format));
                    writer.RenderEndTag();
                    writer.Write(Unit);
                    writer.Write(", ");
    
                    writer.Write(PageBarResource.Page);
                    //writer.Write("当前");
                    writer.Write(" ");
                    writer.RenderBeginTag(HtmlTextWriterTag.Label);
                    writer.Write(CurrentIndex.ToString(Format));
                    writer.RenderEndTag();
                    writer.Write("/");
                    writer.RenderBeginTag(HtmlTextWriterTag.Label);
                    writer.Write(PageCount.ToString(Format));
                    writer.RenderEndTag();
    
                    if (PageCount > 1)
                    {
                        writer.Write(",");
                        int PagerGroup = Convert.ToInt32(Math.Ceiling(1.0 * PageCount / Displaysize)); //共多少页组
                        int CurrentGroup = (CurrentIndex - 1) / Displaysize + 1; //当前页组
    
                        int displaystart = (CurrentGroup - 1) * Displaysize + 1;
                        int displayend = displaystart + Displaysize;
    
                        if (displayend > (PageCount + 1))
                        {
                            displayend = PageCount + 1;
                        }
    
                        #region 显示后三的算法----------【新添加】
                        ////显示后三的算法----------【新添加】
                        //if (PageCount > Displaysize && CurrentIndex > Displaysize - 3)
                        //{
                        //    displaystart = CurrentIndex - (Displaysize - 4);
                        //    displayend = CurrentIndex + 4;
                        //    if (displayend - 1 >= PageCount)
                        //    {
                        //        displayend = PageCount + 1;
                        //    }
                        //} 
                        #endregion
    
    
                        //显示中间的算法----------【新添加】
                        if (PageCount > Displaysize && CurrentIndex >= Displaysize - ((Displaysize / 2) - 1))
                        {
                            displaystart = CurrentIndex - (Displaysize - (Displaysize / 2));
                            displayend = CurrentIndex + (Displaysize / 2);
                            if (displayend - 1 >= PageCount)
                            {
                                displayend = PageCount + 1;
                            }
                        }
    
                        //首页-------【新添加】
                        if (CurrentIndex != 1)
                        {
                            writer.RenderBeginTag(HtmlTextWriterTag.Span);
                            LinkText("【首页】", 1, writer);
                            writer.RenderEndTag();
                        }
                        else
                        {
                            //---【新添加】
                            writer.RenderBeginTag(HtmlTextWriterTag.Label);
                            writer.Write("【首页】");
                            writer.RenderEndTag();
                        }
                        //上一页
                        if (CurrentIndex > 1)
                        {
                            writer.RenderBeginTag(HtmlTextWriterTag.Span);
                            if (string.IsNullOrEmpty(LastPageImageUrl))
                            {
                                LinkText(PageBarResource.Previous, CurrentIndex - 1, writer);
                                //LinkText("【上一页】", this.CurrentIndex - 1, writer);
                            }
                            else
                            {
                                LinkText(
                                    "<img alt="" + PageBarResource.Previous + "" src="" + LastPageImageUrl + "" />",
                                    CurrentIndex - 1, writer);
                                //LinkText("<img alt="" +"【上一页】" + "" src="" + this.LastPageImageUrl + "" />", this.CurrentIndex - 1, writer);
                            }
                            writer.RenderEndTag();
                        }
                        else  
                        {
                            //---【新添加】
                            writer.RenderBeginTag(HtmlTextWriterTag.Label);
                            writer.Write("【上一页】");
                            writer.RenderEndTag();
                        }
    
                        //上一组
                        if (CurrentGroup > 1 || displaystart != 1)
                        {
                            writer.AddAttribute(HtmlTextWriterAttribute.Title, "上"+Displaysize+"页");
                            writer.RenderBeginTag(HtmlTextWriterTag.Span);
                            int index = CurrentIndex - Displaysize;
                            if (index < 1)
                            {
                                index = 1;
                            }
                            LinkText("<<", index, writer);
                            writer.RenderEndTag();
                        }
                        else
                        {
                            //---【新添加】
                            writer.RenderBeginTag(HtmlTextWriterTag.Label);
                            writer.Write("<<");
                            writer.RenderEndTag();
                        }
                        string attr = string.Empty;
    
                        //显示数字
                        for (int i = displaystart; i < displayend; i++)
                        {
                            writer.RenderBeginTag(HtmlTextWriterTag.Span);
                            if (i != CurrentIndex)
                            {
                                LinkText(i.ToString() + " ", i, writer);
                            }
                            else
                            {
                                //当前页
                                writer.RenderBeginTag(HtmlTextWriterTag.Label);
                                writer.Write(i + " ");
                                writer.RenderEndTag();
                            }
                            writer.RenderEndTag();
                        }
    
                        
                        //下一组
                        if (displayend - 1 < PageCount)
                        {
                            writer.AddAttribute(HtmlTextWriterAttribute.Title, "下" + Displaysize + "页");
                            writer.RenderBeginTag(HtmlTextWriterTag.Span);
                            int index = CurrentIndex + Displaysize;
                            if (index > PageCount)
                            {
                                index = PageCount;
                            }
                            LinkText(">>", index, writer);
                            writer.RenderEndTag();
                        }
                        else
                        {
                            //---【新添加】
                            writer.RenderBeginTag(HtmlTextWriterTag.Label);
                            writer.Write(">>");
                            writer.RenderEndTag();
                        }
    
                        //下一页
                        if (CurrentIndex < PageCount)
                        {
                            writer.RenderBeginTag(HtmlTextWriterTag.Span);
                            if (string.IsNullOrEmpty(NextPageImageUrl))
                            {
                                LinkText(PageBarResource.Next, CurrentIndex + 1, writer);
                                //LinkText("【下一页】", this.CurrentIndex + 1, writer);
                            }
                            else
                            {
                                LinkText("<img alt="" + PageBarResource.Next + "" src="" + NextPageImageUrl + "" />",
                                         CurrentIndex + 1, writer);
                                //LinkText("<img alt="" + "【下一页】" + "" src="" + this.NextPageImageUrl + "" />", this.CurrentIndex + 1, writer);
                            }
                            writer.RenderEndTag();
                        }
                        else
                        {
                            //---【新添加】
                            writer.RenderBeginTag(HtmlTextWriterTag.Label);
                            writer.Write("【下一页】");
                            writer.RenderEndTag();
                        }
    
                        //尾页-------【新添加】
                        if (CurrentIndex != PageCount)
                        {
                            writer.RenderBeginTag(HtmlTextWriterTag.Span);
                            LinkText("【尾页】", PageCount, writer);
                            writer.RenderEndTag();
                        }
                        else
                        {
                            //---【新添加】
                            writer.RenderBeginTag(HtmlTextWriterTag.Label);
                            writer.Write("【尾页】");
                            writer.RenderEndTag();
                        }
    
    
                        //跳转---【新添加】
                        if (PagerGroup > 1)
                        {
                            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                            writer.AddAttribute(HtmlTextWriterAttribute.Id, "goPage");
                            writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);
                            writer.AddAttribute("onkeydown", "return PositiveInteger(this,event.keyCode);");
                            writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "10px");
                            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "40px");
                            writer.AddStyleAttribute(HtmlTextWriterStyle.Position, "relative");
                            writer.AddStyleAttribute(HtmlTextWriterStyle.Top, "4px");
                            writer.AddAttribute(HtmlTextWriterAttribute.Maxlength, PageCount.ToString().Length.ToString());
                            writer.RenderBeginTag(HtmlTextWriterTag.Input);
                            writer.RenderEndTag();
    
                            writer.AddAttribute("onclick", "return validatePage(this);");
                            writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
                            writer.RenderBeginTag(HtmlTextWriterTag.A);
                            writer.Write("【跳转】");
                            writer.RenderEndTag();
                        }
    
                    }
                }
                else
                {
                    Visible = false;
                }
            }
    
            #endregion
    
            #region - LinkText -
    
            private void LinkText(string text, int index, HtmlTextWriter write)
            {
                var strHtml = new StringBuilder();
                //href
                if (Mode == PageBarMode.Get)
                {
                    #region = 获取和解析当前的url =
    
                    if (string.IsNullOrEmpty(UrlFormatString))
                    {
                        strHtml.Append(UrlHelper.Current.Path);
                        strHtml.Append("?");
                        NameValueCollection querys = Page.Request.QueryString;
    
                        foreach (string s in querys.Keys)
                        {
                            if (s != QueryStringKey)
                            {
                                strHtml.AppendFormat("{0}={1}&", s, Page.Server.UrlEncode(querys[s]));
                            }
                        }
    
                        strHtml.AppendFormat("{0}={1}", QueryStringKey, index);
                    }
                    else
                    {
                        strHtml.AppendFormat(UrlFormatString, index);
                    }
    
                    #endregion
                }
                else
                {
                    PostBackOptions options = GetPostBackOptions(index.ToString());
    
                    string js = null;
                    if (options != null)
                    {
                        js = Page.ClientScript.GetPostBackEventReference(options, true);
                    }
                    if (string.IsNullOrEmpty(js))
                    {
                        js = "javascript:void(0)";
                    }
                    strHtml.Append(js);
                }
    
                //text
                write.AddAttribute(HtmlTextWriterAttribute.Href, strHtml.ToString());
                if (Mode == PageBarMode.Get)
                {
                    write.AddAttribute(HtmlTextWriterAttribute.Target, Target);
                }
                write.RenderBeginTag(HtmlTextWriterTag.A);
                write.Write(text);
                write.RenderEndTag();
            }
    
            #endregion
    
            #region - GetPostBackOptions -
    
            private PostBackOptions GetPostBackOptions(string index)
            {
                var options1 = new PostBackOptions(this, index);
                options1.RequiresJavaScriptProtocol = true;
    
                if (CausesValidation && (Page.GetValidators(ValidationGroup).Count > 0))
                {
                    options1.PerformValidation = true;
                    options1.ValidationGroup = ValidationGroup;
                }
                return options1;
            }
    
            #endregion
    
            #region - OnClick -
    
            private void OnClick(EventArgs e)
            {
                var handler1 = (EventHandler)base.Events[EventClick];
                if (handler1 != null)
                {
                    handler1(this, e);
                }
            }
    
            #endregion
    
            #region IPostBackEventHandler Members
    
            public void RaisePostBackEvent(string eventArgument)
            {
                if (CausesValidation)
                {
                    Page.Validate(ValidationGroup);
                }
    
                int _currentindex;
                if (int.TryParse(eventArgument, out _currentindex))
                {
                    CurrentIndex = _currentindex;
                }
    
                OnClick(EventArgs.Empty);
            }
    
            #endregion
        }
    
        #endregion
    }


     

  • 相关阅读:
    python从字符串内取两个符号之间的内容
    C# 判读取得字符编码格式
    jquery:字符串(string)转json
    SQL Server 2008 SQL2012 SQL2014 收缩日志 清空删除大日志文件
    WEB 倒计时
    成功配置TOMCAT的LOG4J日志系统,格式:HTML+每天以YYYY-MM-DD.LOG命名的日志文件
    IE Error: '__doPostBack' is undefined 问题解决
    分享:JAVA和C# 3DES加密解密
    好用的linux工具
    python多线程的概念(转载)
  • 原文地址:https://www.cnblogs.com/pangblog/p/3395407.html
Copyright © 2011-2022 走看看