//模板列代码 单元using System;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Data;
namespace Factory
{
/// <summary>
/// SizeTemplateColumn 规格模板列。
/// </summary>
public class SizeTemplateColumn:ITemplate
{
private string colname;        private bool edt;
 
public SizeTemplateColumn(bool edit,string cname)//
{
edt = edit;
colname = cname;
} //为了使用接口必须实现的方法 public void InstantiateIn(Control container)       
{
CheckBox c = new CheckBox();
c.DataBinding += new EventHandler(this.OnDataBinding); container.Controls.Add(c); } public void OnDataBinding(object sender, EventArgs e)
{ CheckBox c = (CheckBox)sender;//g1.DataKeys[i].ToString() c.EnableViewState = true;// c.Page.RegisterViewStateHandler();// c.Page.RegisterRequiresPostBack(c);// DataGridItem container = (DataGridItem) c.NamingContainer; c.ID = ((DataRowView)container.DataItem)[colname].ToString(); c.Text = ((DataRowView)container.DataItem)[colname].ToString(); c.Enabled = edt ;
if (edt == false)
c.Checked = Convert.ToBoolean(((DataRowView)container.DataItem)[colname]); } }}
//另一工具单元
/// <summary>
/// 向指定的数据表加入模板列
/// </summary>
/// <param name="dg">DataGrid组件</param>
public static void AddSizesToGrid(bool edt,DataGrid dg)
{
//取出所有规格列数据 加入尺码列 
IDataReader dr = dbutil.FillDataReader("select id,name from sizes");
while (dr.Read())
{
TemplateColumn col = new TemplateColumn(); col.ItemTemplate  = new SizeTemplateColumn(edt,dr["name"].ToString());//dr["id"].ToString(), col.HeaderText = dr["name"].ToString(); dg.Columns.Add(col);
}
if (dr.RecordsAffected !=0)
{
dr.Close();
}
}//表现层有一个datagrid 它动态载入n个模板列
设计模式下grid只有两个列 ,其中一个这样
<asp:TemplateColumn HeaderText="提交">
<ItemTemplate>
<asp:Button id="btnUpdateSize" runat="server" Text="增 加" CommandName="updatenew" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"id")%>'>
</asp:Button>
</ItemTemplate>
</asp:TemplateColumn>
在这个按钮按下后希望     if (e.CommandName == "updatenew")
{
//得到其中的checkbox
               //如
             CheckBox c = ??????????findcontrol
              
}经过测试 发现加载动态模板列后实际显示 8个列 但调用Response.Write(gc.Columns.Count.ToString());查看还是只有两列 ,怎么办?