gridview findcontrol возвращает пустое значение

я пытаюсь читать из текстового поля в gridview, используя этот код

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

        }
    }

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

Любая идея, почему это происходит?

Спасибо


person Karl    schedule 17.08.2011    source источник
comment
Имеет ли оно какую-либо ценность?   -  person V4Vendetta    schedule 17.08.2011
comment
я добавляю значения вручную через веб-сайт, он читает их все как и не нулевые   -  person Karl    schedule 17.08.2011
comment
@Karl: ты используешь визуальную студию для отладки?   -  person Răzvan Flavius Panda    schedule 17.08.2011
comment
да, вот как я нахожу, что он возвращает   -  person Karl    schedule 17.08.2011
comment
Когда вы нажимаете кнопку, значения в текстовых полях на странице снова становятся пустыми?   -  person Tim B James    schedule 17.08.2011
comment
да они есть, это что-то значит?   -  person Karl    schedule 17.08.2011
comment
@Karl: вы выполняете привязку данных сетки в коде или это делается автоматически? не могли бы вы показать нам свой asp gridview?   -  person Răzvan Flavius Panda    schedule 17.08.2011


Ответы (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

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

person Tim B James    schedule 17.08.2011
comment
gridview привязывается к page_load, и когда я нажимаю кнопку, кажется, что страница перезагружается, как я могу это устроить? - person Karl; 17.08.2011
comment
Куда вы добавили этот код? Не добавляйте его к нажатию кнопки - person Tim B James; 17.08.2011
comment
тогда я понял вас неправильно, где я должен добавить это? я должен сделать это, где он делает привязку данных gridview? - person Karl; 17.08.2011
comment
Да, вы привязывали данные к GridView. - person Tim B James; 17.08.2011

ОБНОВЛЕНИЕ:

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

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

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

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

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

Введите туда:

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") и посмотрите, что он возвращает.

person Răzvan Flavius Panda    schedule 17.08.2011
comment
Я сделал, как вы сказали, количество строк отображается как 79, а (TextBox)GridView1.Rows[0].FindControl(numTC) все еще возвращает - person Karl; 17.08.2011
comment
@Karl: единственное, о чем я могу думать, это то, что элемент управления, который вы ищете, имеет идентификатор, отличный от numTC, я однажды сделал эту ошибку и не заметил :) - person Răzvan Flavius Panda; 17.08.2011
comment
я тоже так пробовал.. но к сожалению это не тот случай, буду продолжать пытаться понять что не так, все равно спасибо - person Karl; 17.08.2011
comment
@Karl: возвращает ли GridView1.Rows[0].FindControl(numTC) значение null? - person Răzvan Flavius Panda; 17.08.2011
comment
когда я делаю response.write, он просто возвращает System.Web.UI.WebControls.TextBox - person Karl; 17.08.2011
comment
@Karl: я имею в виду использовать команду GridView1.Rows[0].FindControl(numTC) в Immediate Window, если она возвращает ноль, это означает, что она не может найти элемент управления. Возвращает ноль? - person Răzvan Flavius Panda; 17.08.2011
comment
проблема решена, это было потому, что данные переустанавливались каждый раз, когда я нажимал кнопку, спасибо за вашу помощь - person Karl; 17.08.2011