自定义扩展Repeater控件

repeater控件主要用于显示数据,因为具有良好的扩展性和自由性,被大量使用显示数据。


1、自定义控件的创建和使用

本次主要讲诉继承现有的控件,非完全自定义的控件。该种控件的创建和使用分为3个步骤,第一步:自定义类,继承现有的控件;第二步:在网页上注册;第三步:使用。

(1)、自定义类

namespace WebAppThreeLayers.UI
{
    public class CustomGrid : Repeater
    {
      .......
     }
}

(2)、在网页上注册

<%@ Register TagPrefix="jwtControl" Namespace="WebAppThreeLayers.UI" Assembly="WebAppThreeLayers" %>
TagPrefix:前缀。如:<asp:Button ID="btn" Text="Sure" />中的asp

Namespace:命名空间,指该自定义类所在的命名空间。如:WebAppThreeLayers.UI

Assembly:动态链接库的名称。如:System.Web.Extensions。注意:不能带“.dll”后缀。

注意,也可以把注册功能放到web.config中。

<system.web>
	<pages>
		<controls>
			<add tagPrefix="jwtControl" namespace="WebAppThreeLayers.UI" assembly="WebAppThreeLayers"/>
		</controls>
	</pages>
</system.web>


(3)、使用

<jwtControl:CustomGrid ID="itemsGrid" runat="server"></jwtControl:CustomGrid>

在后台代码中,可以直接使用itemsGrid(ID)指代该自定义控件。


2、自定义控件的绘制(渲染)

本节内容主要是讲诉自定义控件的输出内容。在自定义控件中重载Render方法即可实现。

以下自定义控件主要显示功能为:在没有数据时,显示“当前没有数目,Sorry”,当有数据时,采用模板中定义的格式显示。

<jwtControl:CustomGrid ID="itemsGrid" runat="server" EmptyText="当前没有数目,Sorry">
        <HeaderTemplate>
            <table cellspacing="0" cellpadding="0" border="0" width="387">
                <tr>
                    <td>
                        ID
                    </td>
                    <td>
                        Name
                    </td>
                    <td>
                        Desc
                    </td>
                    <td>
                        Price
                    </td>
                </tr>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <%# Eval("ID") %>
                </td>
                <td>
                    <%# Eval("Name") %>
                </td>
                <td>
                    <%# Eval("DESC")%>
                </td>
                <td>
                    <%# Eval("PRICE")%>
                </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </jwtControl:CustomGrid>
namespace WebAppThreeLayers.UI
{
    public class CustomGrid : Repeater
    {
        /// <summary>
        /// 数据源数据量个数
        /// </summary>
        private int _itemCount;
        virtual protected int ItemCount
        {
            get { return _itemCount; }
            set { _itemCount = value; }
        }

        /// <summary>
        /// 无数据时显示
        /// </summary>
        private string _emptyText;
        public string EmptyText
        {
            set { _emptyText = value; }
            get { return _emptyText; }
        }

        /// <summary>
        /// Setting DataSource
        /// </summary>
        override public object DataSource
        {
            set
            {
                try
                {
                    base.DataSource = value;
                    ItemCount = ((DataTable)value).Rows.Count;
                }
                catch
                {
                    base.DataSource = null;
                    ItemCount = 0;
                }
            }
        }

        /// <summary>
        /// Overriden method to control how the page is rendered
        /// </summary>
        /// <param name="writer"></param>
        protected override void Render(HtmlTextWriter writer)
        {
            //Check there is some data attached
            if (ItemCount == 0)
            {
                writer.Write(_emptyText);
                return;
            }
            base.Render(writer);
        }
    }
}
在Render中,需要向HtmlTextWriter中添加html格式的输出内容,而base.Render()则是按照数据模板由reapter完成数据内容输出。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值