【问题标题】:Text box inside a grid view not showing data网格视图内的文本框不显示数据
【发布时间】:2015-05-11 14:53:59
【问题描述】:

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

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

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

          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>

【问题讨论】:

  • 您应该将 SetPreviousTids 代码放在 gridview_RowDataBound 处理程序中,并使用 RowEventArgs 访问控件。

标签: asp.net gridview


【解决方案1】:

你会想要这样的:

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";
    }
 }

【讨论】:

  • 如果您需要帮助调试,您需要显示更多代码。您不能只从后面代码中的任何位置访问行绑定控件。您需要为此使用网格特定的处理程序。
  • 但我正在访问值,但值未显示这是我的简单函数,每次我调用函数到 rad 文本框值并想显示但值未显示时,我都会从页面加载中调用它
  • 有没有办法在网格视图函数之外显示价值?
  • 加载网格后,您可以使用一些 javascript 访问文本框值。如果您想从后面的代码中执行此操作,则需要按照上面的示例进行操作。
【解决方案2】:

当使用 &lt;asp:TemplateField&gt; 等模板为 GridView 定义列时,无法使用 Cells 属性访问此类列。

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

所以,改变

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

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

【讨论】:

    【解决方案3】:

    我相信这应该可行!

    <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

    编写的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      相关资源
      最近更新 更多