У меня есть 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.