Повторитель данных, вложенный в GridView, не будет обновляться - PullRequest
2 голосов
/ 28 октября 2011

У меня есть Repeater вложенное внутри GridView. В событии RowDataBound для GridView я устанавливаю DataSource (на основе одного из столбцов строки) и затем связываю Repeater. Это прекрасно работает для начальной загрузки, однако мне нужно иметь возможность добавлять новые элементы в Repeater динамически.

Я добавляю элемент в DataSource, сохраняю его в ViewState, и там, где я обычно связываюсь, используя вызов метода, я связываюсь с объектом, сохраненным в ViewState. DataSouce отражает изменение, однако страница - нет.

Чего мне не хватает? У меня точно такая же настройка на другой странице без вложенности, и она отлично работает.

if (ViewState["RepeaterObj"]!=null)
{
   rpt.DataSource=(IList<DataTransferObject>)ViewState["RepeaterObj"];
}
else
{
   rpt.DataSource = controller.GetObj(param);
   rpt.DataBind();
}

Ответы [ 3 ]

1 голос
/ 14 ноября 2011

В итоге я решил вопрос, полностью исключив ViewState, хотя думал, что мой временный DataSource будет потерян через postback, но это не так. Я закончил с классом variable, который работает отлично. Кажется, я не совсем понял, что происходит во время postback.

0 голосов
/ 28 октября 2011

Прежде всего, вы не должны хранить источник данных во ViewState.Это, пожалуй, худшее место, где вы могли бы его поставить.

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

0 голосов
/ 28 октября 2011

Я думаю, проблема в том, что вы не привязываете Repeater. Вы говорите, что изменили способ привязки к объекту ViewState, но действительно ли вы запускаете Bind? Похоже, что нет, и страница просто перезагружается с текущими данными, сохраненными с помощью элемента управления ViewState.

Убедитесь, что вы явно вызываете событие связывания Repeaters, чтобы убедиться, что оно восстанавливается.

РЕДАКТИРОВАТЬ: Я подозреваю, что это может быть что-то делать, где вам может понадобиться повторно привязать GridView, а не только Repeater.

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