当前位置: 代码迷 >> ASP.NET >> 最近开发的几个 比较不错的控件 ~大家指点下,该怎么解决
  详细解决方案

最近开发的几个 比较不错的控件 ~大家指点下,该怎么解决

热度:8893   发布时间:2013-02-26 00:00:00.0
最近开发的几个 比较不错的控件 ~大家指点下
RT, (顺便散散分~)
不说多了
代码下

这是 数据控件的代码: 适合IList 泛型的
YsmvRepeater.cs
C# code
using System;using System.Collections.Generic;using System.ComponentModel;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Text.RegularExpressions;using System.Collections;namespace YSMV.Control{    [DefaultProperty("Text")]    [ToolboxData("<{0}:YsmvRepeater runat=\"server\" AllowPage=\"true\" PageSize=\"10\" ShowPage=\"true\"></{0}:YsmvRepeater>")]    public class YsmvRepeater : Repeater    {               //Static param        private static readonly Regex RX;        private static readonly object EventPageChanged;        static YsmvRepeater()        {            RX = new Regex(@"^&page=\d+", RegexOptions.Compiled);            EventPageChanged = new object();        }        //Static constants        protected const string HTML1 = "<table cellpadding=0 cellspacing=0 class='inputTable'><tr><td colspan=2>";        protected const string HTML2 = "</td></tr><tr><td class=paging align=left>";        protected const string HTML3 = "</td><td align=right class=paging>";        protected const string HTML4 = "</td></tr></table>";        private const string LINK_PREV = "<a href=?page={0}>&#060;&nbsp;Previous</a>";        private const string LINK_MORE = "<a href=?page={0}>More&nbsp;&#062;</a>";        private const string KEY_PAGE = "page";        private const string COMMA = "?";        private const string AMP = "&";        protected string emptyText;        private IList dataSource;        private int pageSize = 10;        private int currentPageIndex;        private int itemCount;        private bool allowPage = false;        private bool showPage = true;        [Browsable(true)        , Category("Appearance"),        DefaultValue(true),        Description("是否显示翻页链接")        ]        public bool ShowPage        {            get { return showPage; }            set { showPage = value; }        }        [Browsable(true),        Category("Appearance"),        DefaultValue(true),        Description("是否允许分页")]        public bool AllowPage        {            get { return allowPage; }            set { allowPage = value; }        }        [Browsable(true),        Category("Appearance"),        DefaultValue(10),        Description("每页显示的数量")        ]        public int PageSize        {            get { return pageSize; }            set { pageSize = value; }        }        [Browsable(true),        Category("Appearance"),        DefaultValue(""),        Description("无记录时候显示的内容")]        public string EmptyText        {            set { emptyText = value; }        }        override public object DataSource        {            set            {                //This try catch block is to avoid issues with the VS.NET designer                //The designer will try and bind a datasource which does not derive from ILIST                try                {                    dataSource = (IList)value;                    ItemCount = dataSource.Count;                }                catch                {                    dataSource = null;                    ItemCount = 0;                }            }        }        protected int PageCount        {            get { return (ItemCount - 1) / pageSize; }        }        virtual public int ItemCount        {            get { return itemCount; }            set            {itemCount = value;}        }        virtual public int CurrentPageIndex        {            get { return currentPageIndex; }            set { currentPageIndex = value; }        }        public void SetPage(int index)        {            //OnPageIndexChanged(new DataGridPageChangedEventArgs(null, index));            OnPageIndexChanged(new GridViewPageEventArgs(index));        }        override protected void OnLoad(EventArgs e)        {            if (Visible)            {                string page = Context.Request[KEY_PAGE];                int index = (page != null) ? int.Parse(page) : 0;                SetPage(index);            }        }        /// <summary>        /// Overriden method to control how the page is rendered        /// </summary>        /// <param name="writer"></param>        override protected void Render(HtmlTextWriter writer)        {            //Check there is some data attached            string page = Context.Request[KEY_PAGE];            int index = (page != null) ? int.Parse(page) : 0;            if (ItemCount == 0)            {                writer.Write(emptyText);                return;            }            //Mask the query            string query = Context.Request.Url.Query.Replace(COMMA, AMP);            query = RX.Replace(query, string.Empty);            // Write out the first part of the control, the table header            writer.Write(HTML1);            // Call the inherited method            base.Render(writer);            // Write out a table row closure            writer.Write(HTML2);            //Determin whether next and previous buttons are required            //Previous button?            if (currentPageIndex > 0)            {                if (ShowPage)                    writer.Write(string.Format(LINK_PREV, (currentPageIndex - 1) + query));            }            //Close the table data tag            writer.Write(HTML3);            //Next button?            if (currentPageIndex < PageCount)            {                if (ShowPage)                    writer.Write(string.Format(LINK_MORE, (currentPageIndex + 1) + query));            }            //Close the table            writer.Write(HTML4);        }        override protected void OnDataBinding(EventArgs e)        {            if (!allowPage)            {                base.DataSource = dataSource;                base.OnDataBinding(e);                return;            }            //Work out which items we want to render to the page            int start = CurrentPageIndex * pageSize;            int size = Math.Min(pageSize, ItemCount - start);            IList page = new ArrayList();            //Add the relevant items from the datasource            for (int i = 0; i < size; i++)                page.Add(dataSource[start + i]);            //set the base objects datasource            base.DataSource = page;            base.OnDataBinding(e);        }        //public event DataGridPageChangedEventHandler PageIndexChanged;        public event GridViewPageEventHandler PageIndexChanged        {            add            {                Events.AddHandler(EventPageChanged, value);            }            remove            {                Events.RemoveHandler(EventPageChanged, value);            }        }        virtual protected void OnPageIndexChanged(GridViewPageEventArgs e)        {            GridViewPageEventHandler pagehandler = (GridViewPageEventHandler)Events[EventPageChanged];            if (pagehandler != null)                pagehandler(this, e);        }    }}
  相关解决方案