网格视图内的文本框未显示数据

时间:2015-05-11 14:53:59

标签: asp.net gridview

我在网格视图中添加了一个文本框。

当用户点击添加按钮时,会创建一个新文本框。

我从文本框中获取所有数据,但是当我添加数据时,文本框没有显示任何内容

          private void SetPreviousTids(DataTable dt)
          {
             if (ViewState["TidTable"] != null)
               {
                  if (dt.Rows.Count > 0)
                  {
                 for (int i = 0; i < dt.Rows.Count; i++)
            {

               TextBox Tid =  (TextBox)GridView1.Rows[i].Cells[0].FindControl("Tid");
               Response.Write(Tid.Text.ToString());
               Tid.Text = "hello";// text not showing on text box
            }
         }
     }
 }

这里的ASPX代码

    <asp:GridView ID="GridView1" runat="server" Visible="true">
    <Columns>
        <asp:TemplateField HeaderText="TID">
            <ItemTemplate>
                <asp:TextBox ID="Tid" runat="server"></asp:TextBox>
            </ItemTemplate>
            <FooterTemplate>
                <asp:Button ID="ButtonAdd" runat="server" Text="+" OnClick="Add_Tid" />
            </FooterTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

3 个答案:

答案 0 :(得分:0)

你会想要这样的东西:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        TextBox myTextBox = (TextBox)(e.Row.Cells[1].FindControl("Tid"));
        myTextBox.Text == "hello";
    }
 }

答案 1 :(得分:0)

使用<asp:TemplateField>等模板为GridView定义列时,无法使用Cells属性访问此类列。

但是,当使用绑定字段<asp:BoundField .. />为GridView定义列时,您可以使用Cells属性来访问列。

所以,改变

TextBox Tid =  (TextBox)GridView1.Rows[i].Cells[0].FindControl("Tid");

TextBox Tid =  (TextBox)GridView1.Rows[i].FindControl("Tid");

答案 2 :(得分:0)

我相信这应该有用!

<asp:GridView ID="grdList" runat="server" Visible="true" onrowcommand="grdList_RowCommandEvent">
    <Columns>
        <asp:TemplateField HeaderText="TID">
            <ItemTemplate>
                <asp:TextBox ID="Tid" runat="server" Text='<%# Eval("TextboxInfor") >%'></asp:TextBox>
            </ItemTemplate>
            <FooterTemplate>
                <asp:Button ID="ButtonAdd" runat="server" Text="+" CommandName="AddNew" />
            </FooterTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

背后的代码应该如下:

namespace Demo
{
    public partial class Default : System.Web.UI.Page
    {
        DataTable _tableData;
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!Page.IsPostBack)
            {
                _tableData=new DataTable();
                _tableData.Columns.Add("TextboxInfor");
                ViewState["TidTable"]=_tableData;
            }
        }       
        protected void grdList_RowCommandEvent(object sender, GridViewCommandEventArgs e)
        {
            if(e.CommandName.Equlas("AddNew"))
            {   
                _tableData= ViewState["TidTable"] as DataTable;         
                for (int i = 0; i < grdList.Rows.Count; i++)
                {
                    var Tid= gvMandiStatistics.Rows[0].Cells[0].FindControl("Tid") as TextBox;
                    _tableData.Rows[i]["TextboxInfor"]=Tid.Text;
                }               
                var dr= _tableData.NewRow();
                dr["TextboxInfor"]=string.Empty;
                _tableData.Rows.Add(dr);
            }
        }       
        private void BindGrid()
        {
            _tableData= ViewState["TidTable"] as DataTable; 
            grdList.DataSource=_tableData;
            grdList.DataBind();
        }
    }
}

原谅如果有一些拼写错误,因为整个代码是用 NOTEPAD:D

写的