Привязка данных и динамическое создание TabPanel - PullRequest
1 голос
/ 09 февраля 2010

Моя текущая задача - страница ASP.NET для отображения содержимого объекта данных. Одним из свойств этого объекта является список именованных списков. Ради непрозрачности давайте назовем это Company, у которого есть список названных местоположений, и каждое местоположение связано (только) со списком сотрудников.

В случае, если это имеет значение, Company имеет это свойство реализовано так:

IDictionary<string, IList<Employee>> mEmployeesByLocation;

Каждый из этих списков может очень легко отображаться в GridView.. Я думаю, я хочу поместить все это в TabContainer и иметь отдельный TabPanel, содержащий каждую сетку. Вкладки и сетки будут идентичны друг другу, а имя каждой вкладки будет ассоциированным ключом словаря.

Есть ли хороший способ сделать это?

Моей первой мыслью было использование Repeater, но вы не можете поместить его внутрь TabContainer. Парсер не знает, что с этим делать.

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

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

Мысли? Ввод? Лучшие идеи?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2010

Эта идея была отброшена из-за ошибки в TabContainer.В той версии инструментария, которую я использую, элемент управления не может правильно обрабатывать динамически создаваемые вкладки в постбэках.

Проблема, по-видимому, в LoadControlState и свойстве ActiveTabIndex.Когда состояние загружено, контейнер наивно пытается установить индекс вкладки, каким он был ранее.Поскольку динамические вкладки еще не были созданы во время LoadControlState, загруженный индекс, вероятно, будет недействительным.В этом случае свойство выдает ArgumentOutOfRangeException, а содержащаяся страница взрывается.

(Я нашел частичный обходной путь, но он вообще не дает работать LoadControlState, и в итоге оказывается слишком уродливым, чтобы беспокоитьс.)

Из-за сложных служебных политик я не должен обновлять или изменять свою версию AjaxControlToolkit, но для всех, у кого есть эта ошибка, она, по-видимому, была исправлена ​​по состоянию на июнь прошлого года:
http://www.codeplex.com/AjaxControlToolkit/WorkItem/View.aspx?WorkItemId=15658

0 голосов
/ 09 февраля 2010

Нет встроенной поддержки для этого элемента управления; то есть в сторонних элементах управления, но не в наборе средств управления AJAX. Вам придется загружать вкладки программно, и если сетки довольно близки к тому же, используйте пользовательский элемент управления с сеткой (можно загрузить пользовательский элемент управления с помощью метода LoadControl, как в http://aspalliance.com/565_Dynamic_Loading_of_ASPNET_User_Controls).

И, таким образом, вы можете программно создать пользовательский интерфейс. Вы должны знать, что вам, вероятно, нужно будет воссоздавать пользовательский интерфейс при каждой загрузке страницы (подробнее об этом здесь: http://www.asp.net/(S(wnmvzu45umnszm455c1qs522))/learn/ajax-videos/video-286.aspx). Динамические элементы управления не сохраняются при обратной передаче страницы. сохраняется.

НТН.

...