// C#
public class DataGridTemplate : ITemplate
{
ListItemType templateType;
string columnName;
public DataGridTemplate(ListItemType type, string colname)
{
templateType = type;
columnName = colname;
} public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch(templateType)
{
case ListItemType.Header:
lc.Text = "<B>" + columnName + "</B>";
container.Controls.Add(lc);
break;
case ListItemType.Item:
lc.Text = "Item " + columnName;
container.Controls.Add(lc);
break;
case ListItemType.EditItem:
TextBox tb = new TextBox();
tb.Text = "";
container.Controls.Add(tb);
break;
case ListItemType.Footer:
lc.Text = "<I>" + columnName + "</I>";
container.Controls.Add(lc);
break;
}
}
}
see:
Creating Templates Programmatically in the DataGrid Control
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskcreatingtemplatesprogrammaticallyindatagridcontrol.asp
public class DataGridTemplate : ITemplate
{
ListItemType templateType;
string columnName;
public DataGridTemplate(ListItemType type, string colname)
{
templateType = type;
columnName = colname;
} public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch(templateType)
{
case ListItemType.Header:
lc.Text = "<B>" + columnName + "</B>";
container.Controls.Add(lc);
break;
case ListItemType.Item:
lc.Text = "Item " + columnName;
container.Controls.Add(lc);
break;
case ListItemType.EditItem:
TextBox tb = new TextBox();
tb.Text = "";
container.Controls.Add(tb);
break;
case ListItemType.Footer:
lc.Text = "<I>" + columnName + "</I>";
container.Controls.Add(lc);
break;
}
}
}
see:
Creating Templates Programmatically in the DataGrid Control
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskcreatingtemplatesprogrammaticallyindatagridcontrol.asp
LinkButton lb = new LinkButton();
tmp.ItemTemplate.InstantiateIn(lb);
DataGrid1.Columns.Add(tmp);
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Configuration;
namespace csdn
{
/// <summary>
///在代码里动态创建DataGrid,含链接列,绑定列,按钮列,模板列
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
DataGrid1.BorderColor =Color.Red;
DataGrid1.BorderWidth =1;
TemplateColumn Template = new TemplateColumn();//创建模板列
Template.ItemTemplate=new ColumnTemplate("class_1","id");
DataGrid1.Columns.Add(Template);
Template.HeaderText="一级分类";
Template.HeaderStyle.BackColor = ColorTranslator.FromHtml("#FFF778");
//DataGrid1.Columns.Add(Template);
BoundColumn id=new BoundColumn(); //创建绑定列
id.HeaderText="编号";
id.DataField="id";
id.SortExpression="id";
DataGrid1.Columns.Add(id);
HyperLinkColumn linkB=new HyperLinkColumn();//创建超级链接列
linkB.HeaderText="class_1";
linkB.DataTextField="class_1";
linkB.DataNavigateUrlField="id";
linkB.DataNavigateUrlFormatString="a.aspx?id={0}";
DataGrid1.Columns.Add(linkB);
EditCommandColumn Edit=new EditCommandColumn();//创建按钮列
Edit.ButtonType=ButtonColumnType.PushButton;//为按钮指定类型
Edit.UpdateText="更新";
Edit.CancelText="取消";
Edit.EditText="编辑";
DataGrid1.Columns.Add(Edit);
string ConnString=ConfigurationSettings.AppSettings["ConnString"];
OleDbConnection Conn=new OleDbConnection(ConnString);
OleDbDataAdapter adapter=new OleDbDataAdapter("select * from shopone",Conn);
DataSet ds=new DataSet();
adapter.Fill(ds,"shop");
DataGrid1.DataSource=ds.Tables["shop"].DefaultView;
DataBind();
}
/// ColumnTemplate 从ITemplate继承。
/// "InstantiateIn"定义子控件的属于谁 public class ColumnTemplate : ITemplate
{
private string classname;
private string hid;
public ColumnTemplate(string class_1,string id)
{
classname=class_1;
hid=id; } public void InstantiateIn(Control container)
{
LiteralControl l=new LiteralControl();
l.DataBinding+=new EventHandler(this.OnDataBinding);
container.Controls.Add(l);
}
public void OnDataBinding(object sender,EventArgs e)
{
LiteralControl l=(LiteralControl) sender;
DataGridItem container1=(DataGridItem) l.NamingContainer;
l.Text="<a href='lx.aspx?id="+((DataRowView) container1.DataItem)[hid].ToString()+"&classname="+((DataRowView) container1.DataItem)[classname].ToString()+"'>"+((DataRowView) container1.DataItem)[classname].ToString()+"</a>";;
} }
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}
Implements ITemplate
Dim templateType As ListItemType
Dim columnName As String
Dim F_Name As String
Dim Txt_Width, Txt_Height As Integer Sub New(ByVal type As ListItemType, ByVal ColName As String)
templateType = type
columnName = ColName
End Sub Sub New(ByVal FName As String, ByVal type As ListItemType)
templateType = type
F_Name = FName
Txt_Width = 120
Txt_Height = 24
End Sub Sub New(ByVal FName As String, ByVal type As ListItemType, ByVal TWidth As Integer, ByVal THeight As Integer)
templateType = type
F_Name = FName
Txt_Width = TWidth
Txt_Height = THeight
End Sub Sub New(ByVal type As ListItemType)
templateType = type
End Sub Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
Dim HeaderLable As New Label
Dim EditText As New TextBox
Select Case templateType
Case ListItemType.Header
HeaderLable.Text = columnName
container.Controls.Add(HeaderLable)
Case ListItemType.Item
AddHandler HeaderLable.DataBinding, AddressOf Lable_DataBinding
container.Controls.Add(HeaderLable)
Case ListItemType.EditItem
AddHandler EditText.DataBinding, AddressOf TemplateControl_DataBinding
container.Controls.Add(EditText)
Case ListItemType.Footer
HeaderLable.Text = "Footer"
container.Controls.Add(HeaderLable)
End Select
End Sub Private Sub TemplateControl_DataBinding(ByVal sender As Object, ByVal e As System.EventArgs)
Dim EditText As TextBox
EditText = CType(sender, TextBox)
Dim container As DataGridItem
container = CType(EditText.NamingContainer, DataGridItem)
EditText.Width = Unit.Pixel(Txt_Width)
EditText.Height = Unit.Pixel(Txt_Height)
EditText.Text = DataBinder.Eval(container.DataItem, F_Name)
End Sub Private Sub Lable_DataBinding(ByVal sender As Object, ByVal e As System.EventArgs)
Dim HeaderLable As Label
HeaderLable = CType(sender, Label)
Dim container As DataGridItem
container = CType(HeaderLable.NamingContainer, DataGridItem)
HeaderLable.Text = DataBinder.Eval(container.DataItem, F_Name)
End Sub
End Class
-----------------------------------------------------------------------
调用
Dim tc1 As New TemplateColumn
tc1.HeaderTemplate = New c_CreateTemplateColumn(ListItemType.Header, ds.Tables(0).Columns(I).Caption)
tc1.ItemTemplate = New c_CreateTemplateColumn(ds.Tables(0).Columns(I).Caption, ListItemType.Item)
tc1.EditItemTemplate = New c_CreateTemplateColumn(ds.Tables(0).Columns(I).Caption, ListItemType.EditItem, 80, 20)
DataGrid1.Columns.Add(tc1)
tc1 = Nothing
先将DATAGRID的模版列建好,但设置该列的VISIBLE=FALSE,
在要显示该模版列时,再设置VISIBLE=TRUE.