【问题标题】:Dynamic Add ItemTemplate for GridView为 GridView 动态添加 ItemTemplate
【发布时间】:2012-11-29 14:36:23
【问题描述】:

我正在将模板文件动态添加到动态添加的 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") %>

非常感谢任何帮助

【问题讨论】:

  • 使用 container.DataItem.Eval("ColumnName")
  • @PrashantLakhlani 如何在代码中使用这个 container.DataItem.Eval("ColumnName")
  • @PrashantLakhlani 查看我的代码 - 所有控件、模板字段都是动态的
  • 你是对的,你需要在添加 TemplateFields 的同时设置 headerText 以确保你可以确定要绑定哪一列,并且 DataItem 是你可以在代码中访问的容器对象的属性
  • @PrashantLakhlani 如何在模板处理程序中使用 DataItem 以及如何使用?您能否将代码发布到我可以在 InstantiateIn 中访问数据项的位置

标签: asp.net gridview


【解决方案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";
    }
}

【讨论】:

    【解决方案2】:

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

    数据行视图驱动; drv = ((DataRowView) container.DataItem); cmd.Text = drv["姓氏"].ToString();

    更详细的解释,use this article 如果您需要更多帮助,请告诉我。

    【讨论】:

      【解决方案3】:

      您可以通过处理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();
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 1970-01-01
        • 2023-03-17
        • 2011-07-27
        • 1970-01-01
        相关资源
        最近更新 更多