gridview findcontrol возвращает пустой "" - PullRequest
2 голосов
/ 17 августа 2011

я пытаюсь читать из текстового поля в виде сетки с помощью этого кода

    protected void Button1_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in GridView1.Rows)
        {
            string textBoxText = ((TextBox)row.FindControl("numTC")).Text;
            Response.Write(textBoxText);

        }
    }

этот код продолжает возвращать "" (пусто)

есть идеи, почему это происходит?

Спасибо

Ответы [ 2 ]

4 голосов
/ 17 августа 2011

Убедитесь, что вы не привязываете GridView к PostBack страницы. Это может быть проблемой.

редактирует

Убедитесь, что код для привязки GridView находится внутри кода ниже:

C #

if ( !Page.IsPostBack ){
    // Code to bind the control
}

VB

If Not Page.IsPostBack Then
    ' Code to bind the control
End If

В противном случае происходит то, что элементы управления «перестраиваются» и все значения теряются в TextBox

.
1 голос
/ 17 августа 2011

UPDATE:

В целях тестирования попробуйте выполнить GridView1.DataBind (); в начале вашего метода.

Попробуйте отладку так:

Установить точку останова в конце метода Button1_Click.

Запустить сайт в режиме отладки (F5).

Когда выполнение останавливается в конце нажатия кнопки Button1_Click, откройте Немедленное окно, расположенное внизу экрана.

Введите там:

GridView1.Rows и посмотреть, содержит ли оно количество строк, которое он должен.

Должно быть что-то вроде:

System.Web.UI.WebControls.GridViewRowCollection} Количество: 53 <- количество строк </p>

Если он возвращает более 0 строк, введите:

GridView1.Rows [0]. Управляет и проверяет, возвращает ли оно правильное количество элементов управления в строке.

Я мог получить доступ к элементам управления в строке напрямую, используя GridView1.Rows [2] .Controls [n], где n - порядок элемента в строке.

Также попробуйте (TextBox) GridView1.Rows [0] .FindControl ("numTC") и посмотрите, что он возвращает.

...