实现动态建立DataList模版

动态

为这个头痛了有一段时间了。尝试过一些方法也问了一些人查看了一些文档。终于功夫不负有心人,得出了一种比较简便清楚的方法。首先要实现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动态加载模版来按行显示数据。不知道还有没有更好的实现办法,期待。。。

时间: 2016-02-06

实现动态建立DataList模版的相关文章

C++ BUILDER动态建立菜单及菜单事件

首先新建一个工程文件(File->New Application). 然后在Form1上面建立一个PopupMenu1,一个Button1,一个RichEdit1. 在头文Unit1.H的内容,其中黑体是自已加的. #ifndef Unit1H#define Unit1H#include#include#include#include#include#include#includeclass TForm1 : public TForm{__published: // IDE-managed Co

textbox-vb动态建立的TEXTBOX怎么执行某些命令

问题描述 vb动态建立的TEXTBOX怎么执行某些命令 Private Text(10) As Object Private Sub Form_Load() Dim mm As Integer For mm = 1 To 10 Set Text(mm) = Me.Controls.Add("vb.textbox", "Text" & Trim(Str(mm)), Me) next mm end sub 以下代码无反应啊,请问一下这是怎么回事 Private

C++中对象的常引用、动态建立和释放相关知识讲解_C 语言

C++对象的常引用 我们知道,一个变量的引用就是变量的别名.实质上,变量名和引用名都指向同一段内存单元. 如果形参为变量的引用名,实参为变量名,则在调用函数进行虚实结合时,并不是为形参另外开辟一个存储空间(常称为建立实参的一个拷贝), 而是把实参变量的地址传给形参(引用名),这样引用名也指向实参变量. [例] 对象的常引用. #include <iostream> using namespace std; class Time { public: Time(int,int,int); int

在delphi中如何动态建立类的实例

本文为原创,如需转载,请注明作者和出处,谢谢!     在面向对象语言中,用两种方法建立类的实例:静态建立和动态建立.静态建立就是在程序中显式地建立类的实例,如c1 = TClass1.Create().而动态建立是在只知道类名的前题下建立类的实例.动态建立在实现上要比静态建立更灵活,因为动态建立无需引用被建立 类,并且更容易实现如多态等面向对象特性. 一.    动态建立类的实例 在delphi中动态建立类的实例可分为4步. 1. 声明一个从TPersistent继承的类.因为在注册类时要求必

用JavaScript动态建立或增加CSS样式表的实现方法_javascript技巧

1.简单的方法,不管不顾,直接这样就可以: document.createStyleSheet().cssText = '标签{color:red;' + // 这个注释只在当前JS中帮助理解,并不会写入CSS中 'width:300px;height:150px}' + '.类名{--}' + '#ID们{--}' ;  //完活.我喜欢分号这样写,和指令书写的起始位置对齐比较好一点,尤其是后面有其它语句的时候. 2.完善一点的方法,防止重复添加,可以通过添加样式表ID并对其判断来实现: if

C++语言基础 例程 对象的动态建立和释放

贺老师的教学链接  本课讲解 对象的动态建立和释放 #include<iostream> using namespace std; class Box { public: Box(int w,int l,int h); ~Box(); int width; int length; int height; }; Box::Box(int w,int l,int h) { width=w; length=l; height=h; cout<<"========调用构造函数==

利用Asp.net 动态创建DataList

asp.net|创建|动态 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here Dim dl As New DataList dl.HeaderTemplate = New CreateDL(ListItemType.Header) dl.ItemTemplat

动态库接口 模版类-C++模版类是否可以作为动态库接口

问题描述 C++模版类是否可以作为动态库接口 C++模版类是否可以作为动态库接口,怎么实现,现在弄出来 template extern "C" __declspec(dllexport) class IDlgT { }; error C2988: 不可识别的模板声明/定义 不能的话请说下原因,不需要解决方式 解决方案 一个原因是模版类都是在头文件中,而你通过dll导出也需要提供头文件,那么你还导出干嘛,别人可以直接用头文件来实例化你的模版类 http://stackoverflow.c

javascript css:如何用JavaScript动态建立或增加CSS样式表

   1.简单的方法,不管不顾,直接这样就可以: document.createStyleSheet().cssText = '标签{color:red;' +// 这个注释只在当前JS中帮助理解,并不会写入CSS中'width:300px;height:150px}' +'.类名{--}' +'#ID们{--}'; //完活.我喜欢分号这样写,和指令书写的起始位置对齐比较好一点,尤其是后面有其它语句的时候.  2. 完善一点的方法,防止重复添加,可以通过添加样式表ID并对其判断来实现: if