При загрузке данных из БД возникает исключение InvalidOperationException с сообщением: Элемент коллекции должен быть пустым перед использованием ItemsSource. Знаю, что для заполнения DataGrid можно использовать коллекции Items или ItemsSource, но одновременно их использовать нельзя: если задано значение для свойства ItemsSource и в коде C# добавляется элемент в Items, возникает исключение. |
Разработка Silverlight-приложения
Цель
В процессе выполнения работы необходимо разработать браузерное/внебраузерное Silverlight-приложения
Задание 1. Разработать серверные компоненты приложения – 2 час.
Создайте новое веб-приложение ASP.NET, например с именем PersonService ( рис. 9.1). Имя приложения целесообразно связать с вариантом разрабатываемтй информационной подсистемы
В проекте целесообразно использовать порт 12345. Для этого откройтве окно свойств проекта и на вкладке Веб введите новый номер порта ( рис. 9.2).
Добавьте в проект новый элемент – модель ADO.NET EDM, и присвойте файлу модели имя, в примере это - Employee.edmx.
При завершении работы мастера создания EDM-модели в проект будет добавлен файл Employee.edmx.
Создание службы данных. Добавьте в проект новый элемент – службы данных WCF, файл которой в примере назван - WfcDataServicePerson.svc ( рис. 9.3).
В объявлении сгенерированного класса WcfDataServicePerson необходимо указать обобщенный тип PersonalEntities (EDM-модель) родительского класса DataService, то есть:
public class WcfDataServicePerson : DataService<PersonalEntities>
и права при работе с таблицами базы данных:
config.SetEntitySetAccessRule("Employees", EntitySetRights.All); config.SetEntitySetAccessRule("JobTitles", EntitySetRights.All);
Это обеспечивает авторизованным клиентам доступ к ресурсам указанных наборов сущностей.
Отредактированный класс службы данных будет иметь следующий вид:
public class WcfDataServicePerson: DataService<PersonalEntities> { public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule("Employees", EntitySetRights.All); config.SetEntitySetAccessRule("JobTitles", EntitySetRights.All); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; } }
Результаты запуска службы данных приведены на рис. 9.4.
Задание 2. Разработать интерфейс клиентской части приложения – 2 часа.
Создайте для имеющегося решения новый проект Silverlight, например с именем SilverlightAppPersonal ( рис. 9.5).
В окне мастера создания приложения Silverlight проверьте размещение приложения и версию Silverlight ( рис. 9.6). В нашем проекте приложение Silverlight должно размещаться на существующем сайте в решении PersonService, а версия Silverlight должна быть – 4.
В обозревателе решений будет добавлен новый проект SilverlightAppPersonal ( рис. 9.7).
Для проекта SilverlightAppPersonal добавьте ссылку на службу данных. В мастере добавления ссылки на службу с помощью кнопки "Найти" определите адрес и имя службы и задайте пространство имен службы – Personal ( рис. 9.8).
В обозревателе решений будет добавлена ссылка на службу ( рис. 9.9).
Добавление в проект нового файла кода позволяет приложению оперировать с классами данных, которые используются для доступа к ресурсам служб данных, и взаимодействовать с ними, как с объектами. Классы данных создаются в стандартном пространстве имен клиентского приложения, которое в нашем случае имеет имя Personal.
Для обеспечения функциональности необходимо добавить интерфейсные элементы на главную страницу приложения.