gridview findcontrol возвращает пустой ""

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

    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 ответа

Решение

Убедитесь, что вы не привязываете 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

ОБНОВИТЬ:

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

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

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

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

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

Введите там:

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

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

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

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

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

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

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

Другие вопросы по тегам