GridView动态添加模板列

首先,第一步,创建一个类MyTemplate.cs


public class MyTemplate:ITemplate
{
    private string strColumnName;
    private DataControlRowType dcrtColumnType;

    public MyTemplate()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }

    /// <summary>
    /// 动态添加模版列
    /// </summary>
    /// <param name="strColumnName">列名</param>
    /// <param name="dcrtColumnType">列的类型</param>
    public MyTemplate(string strColumnName, DataControlRowType dcrtColumnType)
    {
        this.strColumnName = strColumnName;
        this.dcrtColumnType = dcrtColumnType;
    } 

    public void InstantiateIn(Control ctlContainer)
    {
        switch (dcrtColumnType)
        {
            case DataControlRowType.Header: //列标题
                Literal ltr = new Literal();
                ltr.Text = strColumnName;
                ctlContainer.Controls.Add(ltr);
                break;
            case DataControlRowType.DataRow: //模版列内容——加载CheckBox
                CheckBox cb = new CheckBox();
                cb.ID = "CheckBox1";
                cb.Checked = false;
                ctlContainer.Controls.Add(cb);
                break;
        }
    }

}

第二步,在绑定GridView方法中,生成模版列


/// <summary>
    /// 绑定生成GridView
    /// </summary>
    /// <param name="gdv">要绑定的GridView</param>
    /// <param name="dtblDataSource">GridView的数据源</param>
    /// <param name="strDataKey">GridView的DataKeyNames</param>public static void GridViewBind(GridView gdv, DataTable dtblDataSource, string strDataKey)
    {
        gdv.Columns.Clear();

        gdv.AutoGenerateColumns = false;
        gdv.DataSource = dtblDataSource;
        gdv.DataKeyNames = new string[] { strDataKey };

        TemplateField tfColumn = new TemplateField();
        tfColumn.ItemTemplate = new MyTemplate("", DataControlRowType.DataRow);
        gdv.Columns.Add(tfColumn);

       //………………

        gdv.DataBind();
    }

这样模版列也可以动态生成啦!

原文地址:https://www.cnblogs.com/chengpeng/p/2205578.html