在网格视图中添加文本框

时间:2013-03-28 03:30:54

标签: asp.net gridview textbox

我想将grid view中的内容更改为textbox
这是我的代码的一部分

public class TextBoxTemplate : ITemplate
{
    public void InstantiateIn(Control container)
    {
        TextBox txtBox = new TextBox();
        txtBox.ID = "txtBox";

        container.Controls.Add(txtBox);
    }
}

// dtTeaching是网格视图的数据源

foreach (DataColumn col in dtTeaching.Columns)
{       
   if (col.ColumnName.Contains("Name"))
   {
       TemplateField tfName = new TemplateField();
       tfName.ItemTemplate = new TextBoxTemplate();
       tfName.HeaderText = "Programme Name";
       gvTeaching.Columns.Add(tfName);
   }
 }

 gvTeaching.DataSource = dtTeaching;
 gvTeaching.DataBind();


 for (int i = 0; i < gvTeaching.Rows.Count; i++)
 {
     TextBox k = (TextBox)gvTeaching.Rows[i].Cells[0].Controls[0];
     k.Text = "test";
 }

但结果是网格视图中不会显示任何内容 没有textbox没有内容,只有3个空行,

2 个答案:

答案 0 :(得分:1)

为什么不使用Template field
在设计时为什么在运行时?

以下是模板字段

的示例
<asp:TemplateField HeaderText="FirstName" SortExpression="FirstName">
  <EditItemTemplate>
    <asp:TextBox ID="TextBox1" runat="server"
        Text='<%# Bind("FirstName") %>'></asp:TextBox>
  </EditItemTemplate>
  <ItemTemplate>
    <asp:Label ID="Label1" runat="server"
        Text='<%# Bind("FirstName") %>'></asp:Label>
    <asp:Label ID="Label2" runat="server"
        Text='<%# Bind("LastName") %>'></asp:Label>
  </ItemTemplate>
 </asp:TemplateField>

答案 1 :(得分:1)

你能接受:

TemplateField tfName = new TemplateField();
tfName.EditTemplate = new TextBoxTemplate();
tfName.HeaderText = "Programme Name";
gvTeaching.Columns.Add(tfName);

您可以尝试添加EditTemplate以在GridView中编辑值。

或者您只需在GridView上添加这些字段即可 像:
......

<Columns>
   <asp:TemplateField>
      <ItemTemplate>
         <asp:Label ID="lbl" runat="server" Text='<%#Bind("ColumnName") %>' />
      </ItemTemplate>
      <EditTemplate>
         <asp:TextBox ID="txt" runat="server" Text='<%#Bind("ColumnName")%>' />
      </EditTemplate>
   </asp:TemplateField>
</Columns>

当网格显示在页面上时,数据将被放置在标签中,当您编辑该行时,它将显示在TextBox中。