网格视图内的文本框不显示数据
Posted
技术标签:
【中文标题】网格视图内的文本框不显示数据【英文标题】: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 访问控件。 【参考方案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】:当使用 <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");
【讨论】:
【参考方案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
编写的【讨论】:
以上是关于网格视图内的文本框不显示数据的主要内容,如果未能解决你的问题,请参考以下文章
在网格视图中的 ASCX 控件内的控件上使用 Javascript 显示隐藏。 (ASP.NET + Javascript)