在页面中,我们可以实现以下结构:
<asp:TemplateColumn>
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<HeaderTemplate>
<INPUT id="chkAll" class="CheckBox" onclick="SelectAllCheckBox(this)" type="checkbox" name="chkAll">
</HeaderTemplate>
<ItemTemplate>
<INPUT id="chkItem" class="CheckBox" type="checkbox" name="chkItem" runat="server">
</ItemTemplate>
</asp:TemplateColumn>
这可以作为一个dataGrid的一列,现在有个问题是:如果我想在页面的onload事件中,用代码创建这样的列,请问大家,如何处理?

解决方案 »

  1.   

    谢谢hanchi8008(寒池) ,现在还有一个问题要大家请教,如下:
    <asp:TemplateColumn HeaderText="字段1">
    <HeaderStyle HorizontalAlign="Center" Width="120px"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:TextBox id="txtPC" Text='<%# DataBinder.Eval(Container.DataItem,"user_name")%>' runat="server" Width="120px">
    </asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    这种结构,我如何用代码动态的创建?我写到:
    TC = new TemplateColumn ();
    TC.HeaderText = Cols[i].ToString ();
    TC.HeaderStyle .HorizontalAlign = System.Web .UI .WebControls .HorizontalAlign .Center ;
    TC.HeaderStyle .Width =100;
    TC.ItemStyle .HorizontalAlign  = System.Web .UI .WebControls .HorizontalAlign .Center ;
    但是:<ItemTemplate>
    <asp:TextBox id="txtPC" Text='<%# DataBinder.Eval(Container.DataItem,"user_name")%>' runat="server" Width="120px">
    </asp:TextBox>
    </ItemTemplate>
    这一部分就不知道如何用代码实现了,请大家指点!
      

  2.   

    上面的有写遗漏,请大家看这里:
    谢谢hanchi8008(寒池) ,现在还有一个问题要大家请教,如下:
    <asp:TemplateColumn HeaderText="字段1">
    <HeaderStyle HorizontalAlign="Center" Width="120px"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:TextBox id="txtPC" Text='<%# DataBinder.Eval(Container.DataItem,"user_name")%>' runat="server" Width="120px">
    </asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    这种结构,我如何用代码动态的创建?我写到:
    System.Web.UI .WebControls .TemplateColumn TC = new TemplateColumn ();
    TC.HeaderText = "姓名"
    TC.HeaderStyle .HorizontalAlign = System.Web .UI .WebControls .HorizontalAlign .Center ;
    TC.HeaderStyle .Width =100;
    TC.ItemStyle .HorizontalAlign  = System.Web .UI .WebControls .HorizontalAlign .Center ;
    但是:<ItemTemplate>
    <asp:TextBox id="txtPC" Text='<%# DataBinder.Eval(Container.DataItem,"user_name")%>' runat="server" Width="120px">
    </asp:TextBox>
    </ItemTemplate>
    这一部分就不知道如何用代码实现了,请大家指点!
      

  3.   

    问题已经解决,贴出来,看对大家是否有帮助
    //在CtemplateColumn中实现ITemplate接口
    public class CTemplateColumn:ITemplate
    { private string colname;
    private int controlWidth; public CTemplateColumn(string cname,int width)
    { colname=cname;
    controlWidth = width; } //为了使用接口必须实现的方法 public void InstantiateIn(Control container)       
    {   System.Web .UI .WebControls .TextBox  l = new TextBox ();
    l.Width = controlWidth;
    l.ID = colname;
    l.DataBinding += new EventHandler(this.OnDataBinding); container.Controls.Add(l); } public void OnDataBinding(object sender, EventArgs e)
    {   System.Web .UI .WebControls .TextBox l =(System.Web.UI .WebControls .TextBox ) sender; DataGridItem container = (DataGridItem) l.NamingContainer; l.Text = ((DataRowView)container.DataItem)[colname].ToString(); } }实现这个接口后,只需要
    TC.ItemTemplate = new CTemplateColumn(DataCols[i].ToString (),50); 就可以了再向大家请教一个问题:
    我动态创建的列中的数据,如果从dataGrid中读出来
    我用:this.dgMast.columns.count 得到的列并不包含动态创建的列
    所以用  this.dgMast .Items [i].Cells [j].Text 读不出来,请教大家有没有好的方法。