Python语言技术文档

微信小程序技术文档

php语言技术文档

jsp语言技术文档

asp语言技术文档

C#/.NET语言技术文档

html5/css技术文档

javascript

点击排行

您现在的位置:首页 > 技术文档 > C#/.NET技巧

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

来源:中文源码网    浏览:160 次    日期:2024-04-30 02:45:12
【下载文档:  动态加载用户控件至DataList并为用户控件赋值实例演示.txt 】


动态加载用户控件至DataList并为用户控件赋值实例演示
为了实现这个演示,Insus.NET使用通用的新闻例子,它类别(目录)以及文章。在一个页面,显示所有类别,每个目录下显示最新几条新闻。 效果如下: 目录是用DataList控件显示,而文章标题列表是一个用户控件显示,这个用户控件将动态被加入至DataList。 复制代码 代码如下: View Code
$ <%# objInsusDateTimeUtility.GetDateTime(Eval("PublicDate"), "yyyy-MM-dd")%>
复制代码 代码如下: View Code View Code Imports System.Data Imports Insus.NET Partial Class AscxControls_ArticleList Inherits System.Web.UI.UserControl Implements ISetValue '继承接口 Dim objArticle As New Article() Protected objInsusDateTimeUtility As New InsusDateTimeUtility() Private _DataSource As Object Private _SubjectLength As Integer = 20 Public WriteOnly Property SubjectLength() As Integer Set(ByVal value As Integer) _SubjectLength = value End Set End Property Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load Data_Binding() End Sub '绑定数据至Repeater控件 Private Sub Data_Binding() Me.Repeater1.DataSource = _DataSource Me.Repeater1.DataBind() End Sub Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Dim objDrv As DataRowView = DirectCast(e.Item.DataItem, DataRowView) If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then If e.Item.FindControl("HyperLink1") IsNot Nothing Then Dim LinkSubject As HyperLink = DirectCast(e.Item.FindControl("HyperLink1"), HyperLink) If objDrv("Subject").Length > _SubjectLength Then LinkSubject.Text = objDrv("Subject").Substring(0, _SubjectLength) & "..." Else LinkSubject.Text = objDrv("Subject").ToString() End If End If End If End Sub '实现接口 Public Sub SetValue(str As Object) Implements ISetValue.SetValue Me._DataSource = str End Sub End Class 上面用户控件中,有一个接口: 复制代码 代码如下: ISetValue using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Insus.NET { public interface ISetValue { void SetValue(object obj); } } 显示目录: 复制代码 代码如下: View Code
<%# Eval("CatalogName")%>
从数据库获取数据并绑定至目录的DataList控件。 复制代码 代码如下: View Code Imports Insus.NET Partial Class Index Inherits System.Web.UI.Page Dim objCatalog As New Catalog() Dim objArticle As New Article() Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Not IsPostBack Then Data_Binding() End If End Sub Private Sub Data_Binding() objCatalog.IsActive = True Me.DataListCatalog.DataSource = objCatalog.GetByIsActive() Me.DataListCatalog.DataBind() End Sub End Class 下面是重点,就是OnItemDataBound事件,在这个事件中,需要找到asp:PlaceHolder控件,这个容器将用来加载用户控件。 复制代码 代码如下: Protected Sub DataListCatalog_ItemDataBound(sender As Object, e As DataListItemEventArgs) If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then '判断asp:PlaceHolder是否存在 If e.Item.FindControl("PlaceHolderArticleList") IsNot Nothing Then Dim ctllaceHolder As PlaceHolder = DirectCast(e.Item.FindControl("PlaceHolderArticleList"), PlaceHolder) '动态加载用户控件,并转换为接口。 Dim objuc As ISetValue = DirectCast(LoadControl("~/AscxControls/ArticleList.ascx"), ISetValue) '找到DataList控件的目录主键 objArticle.Catalog_nbr = Me.DataListCatalog.DataKeys(e.Item.ItemIndex) objArticle.Top = 2 '为用户控件赋值。 objuc.SetValue(objArticle.GetArticalTopByCatalog()) '加载用户控件。 ctllaceHolder.Controls.Add(objuc) End If End If End Sub

相关内容