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

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

效果如下:

05d377d0deec934736a1f8c8eef0e7ec.png目录是用DataList控件显示,而文章标题列表是一个用户控件显示,这个用户控件将动态被加入至DataList。

复制代码 代码如下:

View Code

$

复制代码 代码如下:

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

从数据库获取数据并绑定至目录的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

时间: 2013-01-08

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值