有没有人知道如何在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 ";
干杯
答案 0 :(得分:1)
该错误可能意味着您DetailsView
中没有任何内容。我敢打赌如果你把它放在你的代码中:
TextBox txt = (TextBox)DetailsView1.FindControl("TextBox1");
if (txt != null)
{
txt.Text = "Text ";
}
您会看到txt
实际上是null
- 这是因为FindControl
方法未在DetailsView
中找到任何名为“TextBox1”的内容。
您需要将此代码移至您已知道DetailsView
已填充的位置(如果已绑定到DataSource
,您可以在DataBound
事件中执行此操作DetailsView
)。
此外,我注意到您的TextBox
位于InsertItemTemplate
。在默认情况下将TextBox1
置于编辑模式之前,您将找不到DetailsView
:
<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 ";
希望这有帮助。
答案 1 :(得分:0)
@ jadarnel27感谢您提供有关将代码放入DataBound事件的信息。我有类似的问题,文本框值只会通过按钮单击事件传递给DetailsView字段(DefaultMode = Insert)。我不想/需要一个按钮。
我的场景:代码识别是否需要detailsview(插入)。如果基于从下拉控件中选择的人不存在记录,则将其PersonID预加载到详细信息视图的“人员”字段中。
使用FindControl不起作用,但使用以下代码确实放入了DataBound控件。
// 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;
}
我希望这能帮助像我这样的新手。