模板类型:
public class SampleDataGridTemplate : ITemplate
{
ListItemType templateType;
string columnName;
Type controlType;
public InsDataGridTemplate(ListItemType type, string colname) : this(type, colname, null) { }
public InsDataGridTemplate(ListItemType type, string colname, Type itemType) : this(type, colname, itemType, string.Empty) { }
public InsDataGridTemplate(ListItemType type, string colname, Type itemType,string id)
{
templateType = type;
columnName = colname;
controlType = itemType;
controlId = id;
}
public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch (templateType)
{
case ListItemType.Header:
{
lc.Text = columnName;
container.Controls.Add(lc);
break;
}
case ListItemType.Item://必须是每次创建模式
{
object control = System.Activator.CreateInstance(controlType, null);
System.Web.UI.Control webControl = (System.Web.UI.Control)control;
if (controlId != string.Empty)
webControl.ID = controlId;
container.Controls.Add(webControl);
}
case ListItemType.EditItem://必须是每次创建模式
{
object control = System.Activator.CreateInstance(controlType, null);
container.Controls.Add((System.Web.UI.Control)control);
break;
}
case ListItemType.Footer:
{
lc.Text = columnName;
container.Controls.Add(lc);
break;
}
}
}
}
帮助类型:
public static class CtrlHelper
{
public static BoundColumn PrepareBoundColumn(string colname, string datafield)
{
return PrepareBoundColumn(colname, datafield, string.Empty);
}
public static BoundColumn PrepareBoundColumn(string colname, string datafield, string formatstring)
{
BoundColumn column = new BoundColumn();
column.DataField = datafield;
column.DataFormatString = formatstring;
column.HeaderText = colname;
column.SortExpression = datafield;
return column;
}
public static TemplateColumn PrepareTemplateColumn(string colname, Type itemType)
{
TemplateColumn column = new TemplateColumn();
column.HeaderTemplate = new
SampleDataGridTemplate(ListItemType.Header, colname);
column.ItemTemplate = new
SampleDataGridTemplate(ListItemType.Item, colname, itemType);
column.EditItemTemplate = new
SampleDataGridTemplate(ListItemType.EditItem, colname, itemType);
column.FooterTemplate = new
SampleDataGridTemplate(ListItemType.Footer, colname);
return column;
}
public static TemplateColumn PrepareTemplateColumn(string colname, Type itemType, string id)
{
TemplateColumn column = new TemplateColumn();
column.HeaderTemplate = new
InsDataGridTemplate(ListItemType.Header, colname);
column.ItemTemplate = new
InsDataGridTemplate(ListItemType.Item, colname, itemType, id);
column.EditItemTemplate = new
InsDataGridTemplate(ListItemType.EditItem, colname, itemType);
column.FooterTemplate = new
InsDataGridTemplate(ListItemType.Footer, colname);
return column;
}
}
客户编程:
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
PrepareDataGridColumn();
}
/// <summary>
/// 当在派生类中重写时,完成InsDataGrid列初始化
/// </summary>
protected virtual void PrepareDataGridColumn()
{
DataGrid control = DataGrid;
control.Columns.AddAt(0, CtrlHelper.PrepareBoundColumn("ID", "ID"));
control.Columns.AddAt(1, CtrlHelper.PrepareBoundColumn("NAME", "NAME"));
control.Columns.AddAt(2, CtrlHelper.PrepareTemplateColumn("COL1", typeof(TextBox),"txtInput"));
control.Columns.AddAt(3, CtrlHelper.PrepareTemplateColumn("COL2", typeof(ListBox),"lbInput"));
}
protected override void BindDataGrid(int iPageIndex)
{
//Response.Write("<script type='text/javascript'>alert('call me');</script>");
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(string)));
dt.Columns.Add(new DataColumn("NAME", typeof(string)));
dt.Rows.Add(new object[] { "001", "yeyang" });
dt.Rows.Add(new object[] { "002", "yeyang" });
dt.Rows.Add(new object[] { "003", "yeyang" });
DataGrid control = DataGrid;
control.VirtualItemCount = dt.Rows.Count;
control.CurrentPageIndex = iPageIndex;
control.PageSize = dt.Rows.Count + 1;
control.DataKeyField = "ID";
control.DataSource = dt;
control.DataBind();
}