<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
            <Columns>
                <asp:TemplateField HeaderText="水排">>
                    <ItemTemplate>
                        <asp:TextBox ID="txt1" Text='<% # Eval("ALL") %>' runat="server"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="面料">>
                    <ItemTemplate>
                        <asp:TextBox ID="txt2" Text='<% # Eval("FIRST") %>' runat="server"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="操作">
                    <ItemTemplate >
                        <asp:Button ID="btnDel" CommandArgument="<%Eval("ID") %>" OnClick="Del_Click" runat="server" Text="Button" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
本来可以很方便 写在前台的,但是根据情况绑定的个数 不一定,只能在后天 创建,里面还必须要放Text 最后一列是删除。
新人,谁能给点 代码参考吗  查了 不少资料 还没弄出来,来求救了。

解决方案 »

  1.   

    gridviwew动态列
    public class GridViewTextTemplate : System.Web.UI.ITemplate
      {
      private DataControlRowType templateType;
      private string columnName;
      private string Id;
      public GridViewTextTemplate(DataControlRowType type, string colname, string controlId)
      {
      templateType = type;
      columnName = colname;
      Id = controlId;
      }
      public void InstantiateIn(System.Web.UI.Control container)
      {
      switch (templateType)
      {
      case DataControlRowType.Header:
      myHeadLiteral.ID = Id;
      myHeadLiteral.Text = columnName;
      container.Controls.Add(myHeadLiteral);
      break;
      case DataControlRowType.DataRow:
      TextBox txt= new TextBox();
      txt.ID = cId;
      txt.DataBinding += new EventHandler(this.TextBoxDataBinding);
      container.Controls.Add(txt);
      break;
      default:
      break;
      }
      }
      private void TextBoxDataBinding(Object sender, EventArgs e)
      {
      TextBox txt= (TextBox)sender;
      GridViewRow row = (GridViewRow)txt.NamingContainer;
      txt.Text = System.Web.UI.DataBinder.Eval(row.DataItem, columnName).ToString();
      }
      }
      void Page_Load(Object sender, EventArgs e)
      {
      if (!IsPostBack)
      {
      TemplateField tf;
      tf= new TemplateField();
      tf.ItemTemplate = new GridViewTextTemplate(DataControlRowType.DataRow, "", "");
      tf.HeaderTemplate = new GridViewTextTemplate(DataControlRowType.Header, "", "");
      GridView1.Columns.Add(tf);
      }  }
      

  2.   

    我就是想在 后台把  GIRDVIEW的 事情都写好了。
      

  3.   

    GridView动态添加模板列
    http://blog.csdn.net/Sandy945/archive/2009/07/31/4397142.aspx
      

  4.   


    问下非哥  我这样 绑定好以后 比如说想取 第一行 所有值 怎么取啊 用findcontrol 找补到 那个设置的控件
      

  5.   


    我按你的方法在 稍微改了下在里面都是 放的textbox.  画面已经能显示出来了
    就是在最后 我想取出这些textbox 的值   往数据库 存的时候这些 textbox 的文本 我取不到.
      

  6.   

                 TemplateField customField = new TemplateField();
                customField.ShowHeader = true;
                customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "楼号");
                GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "louhao", "楼号");
                customField.ItemTemplate = gvt;
                gvinfo.Columns.Add(customField);
                  List<YmMingXiEntity> list = new List<YmMingXiEntity>();
                    for (int i = 0; i < gvinfo.Rows.Count; i++)
                    {
                        YmMingXiEntity wdmxentity = new YmMingXiEntity();
                        TextBox txt1 = (TextBox)gvinfo.Rows[i].FindControl("louhao");
                        string a = txt1.Text;
                       
                        //list.Add(wdmxentity);
      

  7.   

    你博客  是lbl 我已经换成 textbox了 
      

  8.   

    TemplateField customField = new TemplateField();
      customField.ShowHeader = true;
      customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "楼号");
      GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "louhao", "楼号");
      customField.ItemTemplate = gvt;
      gvinfo.Columns.Add(customField);
      List<YmMingXiEntity> list = new List<YmMingXiEntity>();
      for (int i = 0; i < gvinfo.Rows.Count; i++)
      {
      YmMingXiEntity wdmxentity = new YmMingXiEntity();
      TextBox txt1 = (TextBox)gvinfo.Rows[i].FindControl("louhao");
      string a = txt1.Text;
        
      //list.Add(wdmxentity);
      

  9.   


    就是在控件下面我放了个 保存按扭 保存的时候我想取 里面textbox的文本值.
      

  10.   


    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        
        <asp:GridView ID="gv" runat="server" AutoGenerateColumns="False">
        </asp:GridView>
        
        <asp:Button ID="btn" runat="server" Text="保存" OnClick="btn_Click" />
        
        <asp:Literal ID="lit" runat="server"></asp:Literal>
        
        </form>
    </body>
    </html>
    public partial class GridView_DynamicTemplate : System.Web.UI.Page
    {
        private DataTable getDateTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
            dt.Columns.Add(new DataColumn("Name", typeof(String)));
            DataRow dr = dt.NewRow();
            dr[0] = 1;
            dr[1] = "小明";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 2;
            dr[1] = "小张";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 3;
            dr[1] = "小王";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 4;
            dr[1] = "小刘";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 5;
            dr[1] = "小强";
            dt.Rows.Add(dr);
            return dt;
        }    protected override void OnInit(EventArgs e)
        {
            TemplateField customField = new TemplateField();        customField.ShowHeader = true;
            customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "动态添加列");
            
            GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "txt", "Name");
            
            customField.ItemTemplate = gvt;        gv.Columns.Add(customField);
            base.OnInit(e);
        }    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                gv.DataSource = getDateTable();
                gv.DataBind();
            }
        }    protected void btn_Click(object sender, EventArgs e)
        {
            IList<string> list = new List<string>();        TextBox txt;        foreach (GridViewRow row in gv.Rows)
            {
                txt = row.FindControl("txt") as TextBox;
                if (txt != null)
                {
                    list.Add(txt.Text);
                }
            }        string result = string.Join(",", list.ToArray<string>());        lit.Text = result;
        }
    }public class GridViewTemplate : ITemplate
    {        private DataControlRowType templateType;    private string columnName;
        private string controlID;
        public GridViewTemplate(DataControlRowType type, string colname) : this(type, "", colname) { }
        
        public GridViewTemplate(DataControlRowType type, string controlID, string colname)
        {
            templateType = type;
            this.controlID = controlID;
            columnName = colname;
        }
        public void InstantiateIn(System.Web.UI.Control container)
        {
            switch (templateType)
            {
                case DataControlRowType.Header:
                    Literal lc = new Literal();
                    lc.Text = columnName;
                    container.Controls.Add(lc);
                    break;
                case DataControlRowType.DataRow:
                    TextBox txt = new TextBox();
                    txt.ID = this.controlID;
                    
                    txt.DataBinding += new System.EventHandler(txt_DataBinding);                container.Controls.Add(txt);                break;
                default:
                    break;
            }
        }
        void txt_DataBinding(object sender, EventArgs e)
        {
            TextBox txt = sender as TextBox;
            if (txt != null)
            {
                GridViewRow container = txt.NamingContainer as GridViewRow;
                if (container != null)
                {               
                    object dataValue = DataBinder.Eval(container.DataItem, columnName);
                    if (dataValue != DBNull.Value)
                    {
                        txt.Text = dataValue.ToString();
                    }
                }
            }
        }
    }
      

  11.   

    xue xi!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  12.   


     Button btn = new Button();
                                btn.ID = this.controlID;
                                if (eh != null)
                                {
                                    btn.Click += new System.EventHandler(eh);
                                }
                                btn.DataBinding += new System.EventHandler(btn_DataBinding);
                                btn.Attributes.Add("CssClass", "button");我想 加个样式 可以实现吗  非哥已经帮助我很多了  先谢谢了
      

  13.   

    可以啊,不过你如果是 Attributes.Add 这种方式添加的话,应该这样btn.Attributes.Add("CssClass", "button");=》btn.Attributes.Add("class", "button");