访问DetailsView中的文本框
本文关键字:文本 DetailsView 访问 | 更新日期: 2023-09-27 18:08:35
有人知道我如何在DetailsView字段(c#)内设置文本框的文本吗?
我尝试了一些变化,但都返回上下文和对象引用不设置错误。
这是我的代码…
ASPX:
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px">
<Fields>
<asp:TemplateField HeaderText="Header Text">
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text="test"></asp:TextBox>
</InsertItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
CS: TextBox txt = (TextBox)DetailsView1.FindControl("TextBox1");
txt.Text = "Text ";
欢呼
该错误可能意味着您的DetailsView
中还没有任何内容。我敢打赌,如果你把这个放在你的代码中:
TextBox txt = (TextBox)DetailsView1.FindControl("TextBox1");
if (txt != null)
{
txt.Text = "Text ";
}
您将看到txt
实际上是null
-这是因为FindControl
方法在DetailsView
中没有找到任何名为"TextBox1"的内容。
您需要将此代码移动到您知道DetailsView
已填充的位置(如果它绑定到DataSource
,您可以在DetailsView
的DataBound
事件中执行此操作)。
另外,我注意到你的TextBox
在InsertItemTemplate
中。在默认情况下,除非将DetailsView
置于编辑模式,否则不会发现TextBox1
:
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px"
DefaultMode="Insert">
或在代码后面:
DetailsView1.ChangeMode(DetailsViewMode.Insert);
TextBox txt = (TextBox)DetailsView1.FindControl("TextBox1");
txt.Text = "Text ";
@jadarnel27感谢您关于将代码放在DataBound事件中的信息。我有类似的问题,其中文本框值只会传递到DetailsView字段(DefaultMode=Insert)与按钮单击事件。我不想要纽扣。
我的场景:代码确定是否需要detailsview(用于插入)。如果从下拉控件中选择的人不存在记录,则将其PersonID预加载到detailsview的person字段中。
使用FindControl不工作,但使用下面的代码时,当放入数据绑定控件。
// Get person selected from dropdown control and pass to DetailsView first row/cell
txtPerson.Text = Convert.ToString(ddlPersonSelect.SelectedValue);
TextBox tb = (TextBox)DetailsView1.Rows[0].Cells[1].Controls[0];
if (tb != null)
{
tb.Text = txtPerson.Text;
}
我希望这对另一个像我一样的新手有帮助。