<asp:TemplateColumn HeaderText="Jan-Mar">
  <ItemTemplate>
    <asp:TextBox id=DataGrid1_Q1 Runat=server Width=60 BorderStyle=None Text='<%# DataBinder.Eval(Container, "DataItem.Q1") %>'>
    </asp:TextBox>
  </ItemTemplate>
</asp:TemplateColumn>
请问如何将以上html代码通过后台代码实现?

解决方案 »

  1.   

    参考:<%# GetSign(DataBinder.Eval(e.Item.DataItem,"price_type").ToString())%>protected string GetSign(string str)
    {
      if(str == "0")
       { 
          return "$";
       }
      if(str == "1")
       {
          return "RMB";
       }
    }
    }
      

  2.   

    楼上的方法即在TemplateColumn绑定到后台的一个函数,不知搂主是不是要这样实现,
    下面是一种完全通过代码添加TemplateColumn的方法:首先定义外部模板文件,是一个用户控件 : template.ascs
    <%@ Control Language="c#" AutoEventWireup="false" Codebehind="template.ascx.cs" Inherits="HtmlTextBoxControlDemo.template" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
    <asp:TextBox id=DataGrid1_Q1 Runat=server Width=60 BorderStyle=None Text='<%# DataBinder.Eval(Container, "DataItem.Q1") %>'>cs中:private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面 ITemplate it = Page.LoadTemplate( "template.ascx" ); TemplateColumn tcol = new TemplateColumn();
    tcol.ItemTemplate = it ;}
      

  3.   

    楼上这个方法确实可行,但是我希望不要一个ascx文件写死,最好可以通过代码添加TextBox到ItemTemplate里面去,这样可以随时根据需要定制TextBox。不知如何实现?
      

  4.   

    我已发现可以自己实现ITemplate Interface来实现,代码如下:
    class TextBoxItemTemplate : ITemplate
    {
    TextBox tb;
    string dataField; public TextBoxItemTemplate(string dataField)
    {
    this.dataField = dataField;
    } // Override the ITemplate.InstantiateIn method to ensure 
    // that the templates are created in a Literal control and
    // that the Literal object's DataBinding event is associated
    // with the BindData method.
    public void InstantiateIn(Control container)
    {
    tb = new TextBox();
    tb.Width=60;
    tb.BorderStyle = BorderStyle.None;
    tb.Style.Add("text-align", "right");
    tb.DataBinding += new EventHandler(this.BindData);
    container.Controls.Add(tb);
    } void BindData(object o, EventArgs e)
    {
    tb.Text = DataBinder.Eval(tb.NamingContainer,"DataItem."+dataField).ToString();
    }
    }Thank you all the same!!