GridView: Columns.Insert () заставляет мои данные исчезать при обратной передаче, но Columns.Add () работает нормально? - PullRequest
2 голосов
/ 13 октября 2010

У меня есть GridView, который имеет несколько динамических столбцов (я не знаю, сколько во время разработки, и это может быть 0-12 столбцов, следовательно, нужны динамические столбцы). У меня есть столбцы в сетке и привязанные к ним данные - отлично работает. Существуют другие стандартные столбцы TemplateField времени разработки с элементами управления TextBox в них. Они связаны со значениями, которые пользователь может редактировать. Сетка отправляется обратно с помощью кнопки Отправить.

Мой вопрос: «Почему gv.Columns.Insert() приводит к тому, что все мои TextBox данные становятся нулевыми при обратной передаче, но gv.Columns.Add() работает как чемпион?»

Соответствующее SO Link

protected void BuildColumns()
{
    // The first column to begin to insert the columns in the GridView
    int columnIndex = 5;

    BoundField aoColumn = new BoundField();
    aoColumn.HeaderText = "New Column 1";
    gvMyGrid.Columns.Insert(columnIndex, aoColumn); // kills txtQuantity.Text on postback
    gvMyGrid.Columns.Add(aoColumn);                 // works fine
    columnIndex++;

    foreach (MyEntity my in _myEntityCollection)
    {
        BoundField myColumn = new BoundField();
        myColumn.HeaderText = String.Format("{0:d}", my.StartDate);
        gvMyGrid.Columns.Insert(columnIndex, myColumn);
        columnIndex++;
    }
}

Затем я продолжаю присваивать значения этим BoundFields в методе _RowDataBound, и все это прекрасно работает. Тем не менее, когда я отправляю назад и пытаюсь сослаться на некоторые TextBox, и они все нулевые. И да, у меня есть вызов BuildColumns(), если (!IsPostBack) на Page_Load.

Конечно, я хотел бы использовать .Insert(), чтобы столбцы могли располагаться в нужном месте, а не в конце массива Columns.

1 Ответ

3 голосов
/ 31 марта 2011

Ошибка Visual Studio, которая не будет исправлена:

Подробнее об этом здесь .

...