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