为GridView动态添加ItemTemplate

时间:2012-11-29 14:36:23

标签: asp.net gridview

我正在动态添加模板到动态添加的gridview控件。

我添加了这样的模板:

 TemplateField TmpCol = new TemplateField();
                        TmpCol.HeaderText = "";
                        TmpCol.ShowHeader = false;
                        rpt.Columns.Add(TmpCol);
                        TmpCol.ItemTemplate = new TemplateHandler();

类别:

public class TemplateHandler : ITemplate
{
    void ITemplate.InstantiateIn(Control container)
    {
        CheckBox cmd = new CheckBox();
        cmd.ID = "ckSkill";
        cmd.Text = --  want to give data text filed here or pass a custom  text

        container.Controls.Add(cmd);
    }

}

因此,模板字段中的复选框我想给出容器值。

就像我们在

这样的aspx页面中所做的那样
 <%# Eval("demo") %>

非常感谢任何帮助

3 个答案:

答案 0 :(得分:1)

我需要像这样修改处理程序以使其正常工作

   public class TemplateHandler : ITemplate
{
    void ITemplate.InstantiateIn(Control container)
    {
        CheckBox cmd = new CheckBox();
        cmd.ID = "ckSkill";
        // cmd.Text = "tets";

        cmd.DataBinding += new EventHandler(this.BindData);

        //cmd.Click += new EventHandler(Dynamic_Method);
        container.Controls.Add(cmd);
    }

    public void BindData(object sender, EventArgs e)
    {
        CheckBox l = (CheckBox)sender;
        GridViewRow container = (GridViewRow)l.NamingContainer;

        l.Text = ((TableNameClass)container.DataItem).SkillText; // ((DataRowView)container.DataItem)["SkillText"].ToString();

    }

    protected void Dynamic_Method(object sender, EventArgs e)
    {
        ((CheckBox)sender).Text = "Hellooooo";
    }
}

答案 1 :(得分:0)

在动态创建模板化字段时,您需要设置一些可用于确定列名称的属性(例如标题tex)。完成后,您可以使用以下代码来设置数据。

DataRowView drv;
drv = ((DataRowView) container.DataItem);
cmd.Text = drv["lastname"].ToString();

有关详细说明,请use this article 如果您需要更多帮助,请告诉我。

答案 2 :(得分:0)

您可以通过gridview的处理行数据绑定事件来提供容器值。 等。

protected void grdData_RowDataBound(object sender, C1GridViewRowEventArgs e)
 {
    string sText = Convert.ToString(((System.Data.DataRowView)             (e.Row.DataItem)).Row.ItemArray[0]); 

    CheckBox chkText = (CheckBox)e.Row.FindControl("ckSkill");
    chkText.Text = sText.ToString();
 }