Доступ к текстовому полю внутри DetailsView - PullRequest
1 голос
/ 15 сентября 2011

Кто-нибудь знает, как я могу установить текст текстового поля внутри поля 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 ]

1 голос
/ 15 сентября 2011

Вероятно, эта ошибка означает, что в вашем DetailsView еще ничего нет. Могу поспорить, если вы введете это в свой код:

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

Вы увидите, что txt на самом деле null - это потому, что метод FindControl не нашел ничего с именем "TextBox1" в DetailsView.

Вам нужно переместить этот код в точку, где вы знаете, что 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 "; 

Надеюсь, это поможет.

0 голосов
/ 31 декабря 2013

@ jadarnel27 спасибо за информацию о размещении кода в событии DataBound. У меня была похожая проблема, когда значение текстового поля передавалось только в поле DetailsView (DefaultMode = Insert) с событием нажатия кнопки. Я не хотел / нужна кнопка.

Мой сценарий: код определяет, требуется ли подробный просмотр (для вставки). Если запись не существует на основе лица, выбранного из раскрывающегося списка, его PersonID предварительно загружается в поле Person для подробного просмотра.

Использование FindControl не работало, но при использовании следующего кода WHEN помещал элемент управления 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;
}

Надеюсь, это поможет другому новичку, как я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...