最近开发的几个 比较不错的控件 ~大家指点下
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}>< Previous</a>"; private const string LINK_MORE = "<a href=?page={0}>More ></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); } }}
[解决办法]
先抢沙发在看。
[解决办法]
mark
[解决办法]
顶~,支持!
[解决办法]
UP一个
[解决办法]
太长了,楼主最好能做成个解决方案然后给个链接,比这样强多了。
[解决办法]
太长了,帮你顶下
[解决办法]
太长了,楼主最好能做成个解决方案然后给个链接,比这样强多了。好人做到底啊!!!
[解决办法]
向楼主学习来的。。
[解决办法]
up
[解决办法]
眼都花了
还没看完呢
先顶一下咯
[解决办法]
up
[解决办法]
LZ强~~~
[解决办法]
先顶了再看
[解决办法]
牛人 我是来顶的
[解决办法]
帮顶,建议做个案例提供下载。
[解决办法]
接分再看
[解决办法]
真棒
[解决办法]
楼主,太长了啊,我接分了
[解决办法]
不管长不长接分才是硬道理!
非常得顶了!
[解决办法]
浪客强悍,顶了。
[解决办法]
学习
[解决办法]
顶了再看,顺别接分~
[解决办法]
辛苦啦
浪客
[解决办法]
太强了
正好我要用分页呢
谢谢啦
[解决办法]
太多了 汗
学习
[解决办法]
太长了,楼主做个链接下载吧,顶!
[解决办法]
[解决办法]
顶,写到博客里
[解决办法]
又见高人了
[解决办法]
up
[解决办法]
顶
[解决办法]
好
[解决办法]
顶浪客!
[解决办法]
mark..
up//
[解决办法]
完全看不懂
O(∩_∩)O哈哈~
[解决办法]
收藏
[解决办法]
顶
[解决办法]
UP,下载下来看了,可以把控件单独写在一个类库里,这样可以放在工具栏里拖拽了,统一整理好再发呀,带上案例不错。
[解决办法]
浪客...100分来!!
[解决办法]
不错,已经被推荐了。
[解决办法]
看看
[解决办法]
狠狠的顶起
[解决办法]
多谢LZ 顺便接分
[解决办法]
不错的说
[解决办法]
不错,帮你顶了~~~!
[解决办法]
大佬,顶你一个,偶的英文不是很OK,下次有宝贵东西,麻烦换成中文注释
[解决办法]
不错,继续努力.
[解决办法]
要是弄个给我们下载实例就好了。。。呵。。。
[解决办法]
收藏学习
[解决办法]
收藏
[解决办法]
BANG DING
[解决办法]
接分
[解决办法]
顶,有空在看
[解决办法]
顶下,收藏学习
[解决办法]
先定,再收藏,再看
[解决办法]
顶,一定要找时间看看。
[解决办法]
我顶!~~~楼主太帅了
[解决办法]
收藏
[解决办法]
up
[解决办法]
up
[解决办法]
好东西,Mark。
[解决办法]
这是一定要支持LZ的
[解决办法]
接分
[解决办法]
up
[解决办法]
学习了
[解决办法]
mark
[解决办法]
han~~~这么长? so long!