当前位置:Gxlcms > asp.net > 动态加载用户控件至DataList并为用户控件赋值实例演示

动态加载用户控件至DataList并为用户控件赋值实例演示

时间:2021-07-01 10:21:17 帮助过:51人阅读

为了实现这个演示,Insus.NET使用通用的新闻例子,它类别(目录)以及文章。在一个页面,显示所有类别,每个目录下显示最新几条新闻。

效果如下:
目录是用DataList控件显示,而文章标题列表是一个用户控件显示,这个用户控件将动态被加入至DataList。
代码如下:
  1. <br>View Code <br><asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"> <br><HeaderTemplate> <br><table cellpadding="5" cellspacing="0" width="100%"> <br></HeaderTemplate> <br><ItemTemplate> <br><tr style="height: 30px; line-height: 10px;"> <br><td> <br>$ <br></td> <br><td> <br><asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "~/ArticleView.aspx?ID=" & Eval("Article_nbr")%>' ToolTip='<%# Eval("Subject")%>' Target="_blank"></asp:HyperLink> <br></td> <br><td> <br><%# objInsusDateTimeUtility.GetDateTime(Eval("PublicDate"), "yyyy-MM-dd")%> <br></td> <br></tr> <br></ItemTemplate> <br><FooterTemplate> <br></table> <br></FooterTemplate> <br></asp:Repeater> <br> <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>View Code <br>View Code <br>Imports System.Data <br>Imports Insus.NET <br>Partial Class AscxControls_ArticleList <br>Inherits System.Web.UI.UserControl <br>Implements ISetValue '继承接口 <br>Dim objArticle As New Article() <br>Protected objInsusDateTimeUtility As New InsusDateTimeUtility() <br>Private _DataSource As Object <br>Private _SubjectLength As Integer = 20 <br>Public WriteOnly Property SubjectLength() As Integer <br>Set(ByVal value As Integer) <br>_SubjectLength = value <br>End Set <br>End Property <br>Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load <br>Data_Binding() <br>End Sub <br>'绑定数据至Repeater控件 <br>Private Sub Data_Binding() <br>Me.Repeater1.DataSource = _DataSource <br>Me.Repeater1.DataBind() <br>End Sub <br>Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) <br>Dim objDrv As DataRowView = DirectCast(e.Item.DataItem, DataRowView) <br>If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then <br>If e.Item.FindControl("HyperLink1") IsNot Nothing Then <br>Dim LinkSubject As HyperLink = DirectCast(e.Item.FindControl("HyperLink1"), HyperLink) <br>If objDrv("Subject").Length > _SubjectLength Then <br>LinkSubject.Text = objDrv("Subject").Substring(0, _SubjectLength) & "..." <br>Else <br>LinkSubject.Text = objDrv("Subject").ToString() <br>End If <br>End If <br>End If <br>End Sub <br>'实现接口 <br>Public Sub SetValue(str As Object) Implements ISetValue.SetValue <br>Me._DataSource = str <br>End Sub <br>End Class <br> <br>上面用户控件中,有一个接口: <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>ISetValue <br>using System; <br>using System.Collections.Generic; <br>using System.Linq; <br>using System.Text; <br>namespace Insus.NET <br>{ <br>public interface ISetValue <br>{ <br>void SetValue(object obj); <br>} <br>} <br> <br>显示目录: <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>View Code <br><asp:DataList ID="DataListCatalog" runat="server" RepeatColumns="2" RepeatDirection="Horizontal" DataKeyField="Catalog_nbr" OnItemDataBound="DataListCatalog_ItemDataBound"> <br><ItemTemplate> <br><div style="padding:2PX; height:25px; background-color:#cbfb25; font-weight:bold; line-height:25PX;"> <br><%# Eval("CatalogName")%> <br></div> <br><asp:PlaceHolder ID="PlaceHolderArticleList" runat="server"></asp:PlaceHolder> <br></ItemTemplate> <br></asp:DataList> <br> <br>从数据库获取数据并绑定至目录的DataList控件。 <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>View Code <br>Imports Insus.NET <br>Partial Class Index <br>Inherits System.Web.UI.Page <br>Dim objCatalog As New Catalog() <br>Dim objArticle As New Article() <br>Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load <br>If Not IsPostBack Then <br>Data_Binding() <br>End If <br>End Sub <br>Private Sub Data_Binding() <br>objCatalog.IsActive = True <br>Me.DataListCatalog.DataSource = objCatalog.GetByIsActive() <br>Me.DataListCatalog.DataBind() <br>End Sub <br>End Class <br> <br>下面是重点,就是OnItemDataBound事件,在这个事件中,需要找到asp:PlaceHolder控件,这个容器将用来加载用户控件。 <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>Protected Sub DataListCatalog_ItemDataBound(sender As Object, e As DataListItemEventArgs) <br>If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then <br>'判断asp:PlaceHolder是否存在 <br>If e.Item.FindControl("PlaceHolderArticleList") IsNot Nothing Then <br>Dim ctllaceHolder As PlaceHolder = DirectCast(e.Item.FindControl("PlaceHolderArticleList"), PlaceHolder) <br>'动态加载用户控件,并转换为接口。 <br>Dim objuc As ISetValue = DirectCast(LoadControl("~/AscxControls/ArticleList.ascx"), ISetValue) <br>'找到DataList控件的目录主键 <br>objArticle.Catalog_nbr = Me.DataListCatalog.DataKeys(e.Item.ItemIndex) <br>objArticle.Top = 2 <br>'为用户控件赋值。 <br>objuc.SetValue(objArticle.GetArticalTopByCatalog()) <br>'加载用户控件。 <br>ctllaceHolder.Controls.Add(objuc) <br>End If <br>End If <br>End Sub <br></li><li> </li><li> </li></ol></pre></li></ol></pre></li></ol></pre></li></ol></pre></li></ol></pre>

人气教程排行