Не удается найти встроенный элемент управления в gridview - PullRequest
0 голосов
/ 15 мая 2018

У меня есть gridview, и в некоторых случаях я вставляю в него текстовое поле в RowDataBound:

 private void GetColumnWithValidation(GridViewRowEventArgs e, string columnName, int columnLength)
    {
        if (Convert.ToString(DataBinder.Eval(e.Row.DataItem, columnName)).Length > columnLength)
        {
            int colindex = GetColumnIndexByName(e.Row, columnName);
            TextBox txt = new TextBox();
            txt.Text = Convert.ToString(DataBinder.Eval(e.Row.DataItem, columnName));
            txt.BorderColor = Color.Red;
            txt.ID = "txt_" + i + "_" + colindex;
            lstErrorTracker.Add(i + "_" + colindex);
            //link.NavigateUrl = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "PV_INVOICE_LOCATION"));
            e.Row.Cells[GetColumnIndexByName(e.Row, columnName)].Controls.Add(txt);
        }
    }

Теперь, если я изменяю некоторые данные в текстовом поле gridview, я хочу, чтобы их каждый раз выбиралиЯ нажимаю кнопку Обновить.Кнопка обновления расположена вне gridview как обычная кнопка asp.net.

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

foreach (GridViewRow row in GVUploadDetails.Rows)
                {
                    if (row.RowType == DataControlRowType.DataRow)
                    {
                        TextBox txt= (row.Cells[3].FindControl("txt_0_3") as TextBox);
                        var test = txt.Text;
                    }
                }

Я получаю текстовые данные какноль.Пожалуйста, помогите, как получить эти значения.А с другой стороны, я хочу, чтобы все данные вида сетки были представлены в наборе данных или в виде данных, как я могу их получить.

1 Ответ

0 голосов
/ 15 мая 2018

NamingContainer - это GridViewRow, а не ячейка, поэтому вы должны использовать:

foreach (GridViewRow row in GVUploadDetails.Rows)
{
    TextBox txt = row.FindControl("txt_0_3") as TextBox;
    // ...
}

Если это не решит проблему, то где в жизненном цикле страницы вы добавляете это TextBox программно? Вы знаете, что вам всегда нужно заново создавать его при каждом последующем постбэке? Сделайте это в Page_Load, лучше Page_Init.

Если вы добавите его из RowDataBound, вам придется воссоздать его в RowCreated, в противном случае будет слишком поздно для сохранения ViewState.

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