分享
 
 
 

实现动态建立DataList模版

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

为这个头痛了有一段时间了。尝试过一些方法也问了一些人查看了一些文档。终于功夫不负有心人,得出了一种比较简便清楚的方法。

首先要实现ITemplate接口,建立了一个基类相关代码如下:

Public Class BaseTemplate

Implements ITemplate

Protected TemplateType As ListItemType '模版的种类

Protected pnlMain As Panel '建立主面板

Sub New(ByVal type As ListItemType)

Me.TemplateType = type

End Sub

Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn

Me.pnlMain = New Panel

Select Case TemplateType

Case ListItemType.Header

AddHandler Me.pnlMain.DataBinding, AddressOf Me.HeaderTBinding

Case ListItemType.Item

AddHandler Me.pnlMain.DataBinding, AddressOf Me.ItemTBinding

Case ListItemType.AlternatingItem

AddHandler Me.pnlMain.DataBinding, AddressOf Me.AlternatingItemTBinding

Case ListItemType.Footer

AddHandler Me.pnlMain.DataBinding, AddressOf Me.FooterTBinding

End Select

container.Controls.Add(Me.pnlMain)

End Sub

'数据Item

Protected Overridable Sub ItemTBinding(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub

'头Item

Protected Overridable Sub HeaderTBinding(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub

'交替Item

Protected Overridable Sub AlternatingItemTBinding(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub

'脚Item

Protected Overridable Sub FooterTBinding(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub

End Class

不是很晦涩。通过判断类型,为panel加载绑定事件。下面在给出一个实现的子类代码:

Public Class MyTalkTemplate

Inherits BaseTemplate

Sub New(ByVal type As ListItemType)

MyBase.New(type)

End Sub

Protected Overrides Sub ItemTBinding(ByVal sender As Object, ByVal e As System.EventArgs)

Dim pnl As Panel

Dim container As DataListItem

pnl = CType(sender, Panel)

container = CType(pnl.NamingContainer, DataListItem)

Dim hTbl As New HtmlTable

hTbl.Width = "100%" '保证足够宽

Dim hRow As HtmlTableRow

Dim hCell As HtmlTableCell

'图片

Dim img As New WebControls.Image

img.Height = New Unit(80) '设定长和宽

img.Width = New Unit(80)

img.ImageUrl = String.Format("{0}", container.DataItem("TalkImg"))

hRow = New HtmlTableRow

hCell = New HtmlTableCell

hCell.RowSpan = 2

hCell.Controls.Add(img)

hRow.Cells.Add(hCell)

'主题

hCell = New HtmlTableCell

hCell.Align = "Center"

hCell.Controls.Add(New LiteralControl("<big>主题</big>"))

hRow.Cells.Add(hCell)

hTbl.Rows.Add(hRow)

hRow = New HtmlTableRow

hCell = New HtmlTableCell

hCell.Width = "100%" '保证足够的宽度

hCell.VAlign = "Top" '竖直方向位于顶端

hCell.Controls.Add(New LiteralControl(String.Format("<h5>{0}</h5>", container.DataItem("TalkTitle"))))

hRow.Cells.Add(hCell)

hTbl.Rows.Add(hRow)

'内容

hRow = New HtmlTableRow

hCell = New HtmlTableCell

hCell.ColSpan = 2

hCell.Height = "1"

hCell.BgColor = "#808080"

hRow.Cells.Add(hCell)

hTbl.Rows.Add(hRow)

hRow = New HtmlTableRow

hCell = New HtmlTableCell

hCell.ColSpan = 2

hCell.Controls.Add(New LiteralControl(String.Format("{0}", container.DataItem("TalkText"))))

hRow.Cells.Add(hCell)

hTbl.Rows.Add(hRow)

Me.pnlMain.Controls.Add(hTbl)

End Sub

写的有点多余哈。就是利用container.DataItem来建立各个控件。

之所以不直接在实现接口时间直接利用绑定的信息来建立控件,是因为事件顺序。InstantiateIn这个函数在基类的绑定事件之前执行,所以只能先添加一个panel(或其他容器控件),然后在基类绑定后,再调用panel的绑定事件。这样就可以实现。

在此之前我曾经放弃使用datalist而自己写table代码来实现数据的显示。但在交替显示,分不同列显示,制定样式方面都很麻烦,所以还是推荐使用datalist动态加载模版来按行显示数据。

不知道还有没有更好的实现办法,期待。。。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有