在DetailsView中访问文本框

时间:2011-09-15 12:41:11

标签: c# asp.net textbox detailsview

有没有人知道如何在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 ";

干杯

2 个答案:

答案 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;
}

我希望这能帮助像我这样的新手。