访问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中的文本框

该错误可能意味着您的DetailsView中还没有任何内容。我敢打赌,如果你把这个放在你的代码中:

TextBox txt = (TextBox)DetailsView1.FindControl("TextBox1");
if (txt != null)
{
    txt.Text = "Text ";
}

您将看到txt实际上是null -这是因为FindControl方法在DetailsView中没有找到任何名为"TextBox1"的内容。

您需要将此代码移动到您知道DetailsView已填充的位置(如果它绑定到DataSource,您可以在DetailsViewDataBound事件中执行此操作)。

另外,我注意到你的TextBoxInsertItemTemplate中。在默认情况下,除非将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;
}
我希望这对另一个像我一样的新手有帮助。