Пошаговое руководство. Извлечение, обновление, вставка и удаление данных с помощью элементов управления LinqDataSource и DetailsView
Обновлен: Ноябрь 2007
В этом пошаговом руководстве создается простая база данных и веб-страница, на которой используется элемент управления LinqDataSource. Веб-страница позволяет пользователям извлечь, обновить, вставить и удалить данные из таблицы базы данных. Для отображения данных используется элемент управления DetailsView. Элемент управления LinqDataSource позволяет выполнять все эти операции без создания операторов Select, Update, Insert или Delete.
Сред. Объектно-реляционный конструктор используется для создания класса, представляющего таблицу базы данных, которая содержит значения. Элемент управления LinqDataSource взаимодействует с этим созданным классом для извлечения, обновления, вставки и удаления данных.
Обязательные компоненты
Для реализации процедур в собственной среде разработки потребуются:
Visual Studio 2008 либо Visual Web Developer, экспресс-выпуск
Приложение SQL Server, экспресс-выпуск, установленное на компьютере. Если приложение SQL Server установлено, можно использовать его, однако необходимо внести незначительные изменения в некоторые процедуры.
Веб-узел ASP.NET.
Создание таблицы базы данных
Для выполнения инструкций данного пошагового руководства требуется таблица базы данных. Если таблица отсутствует, ее можно создать с помощью следующей процедуры. Если используется существующая таблица, действия, описанные в некоторых процедурах, не будут точно соответствовать базе данных. Однако концепции, описанные в данном пошаговом руководстве, останутся такими же.
Создание таблицы базы данных
Если веб-узел еще не содержит папку App_Data, то в окне Обозреватель решений щелкните правой кнопкой мыши проект, нажмите кнопку Добавить папку ASP.NET и затем нажмите App_Data.
Щелкните правой кнопкой мыши папку App_Data и выберите команду Добавить новый элемент.
В разделе Установленные шаблоны выберите База данных SQL, измените имя файла на Reviews.mdf, а затем нажмите кнопку Добавить.
Откройте узел Reviews.mdf в обозревателе сервера и щелкните правой кнопкой мыши папку Таблицы.
Нажмите кнопку Добавить новую таблицу.
Создайте в таблице следующие столбцы:
Имя столбца
Тип данных
Свойства
MovieID
int
IsIdentity = Yes
Не Null
Первичный ключ
Название
nvarchar(50)
Театр
nvarchar(50)
Просмотр
nvarchar(1000)
Оценка
int
Не Null
Сохраните таблицу и назовите ее MovieReviews.
Добавьте в таблицу MovieReviews с примерами данных несколько записей.
В окне Обозреватель серверов щелкните правой кнопкой мыши таблицу MovieReviews и выберите команду Показать таблицу данных. Значение MovieID указывать не нужно, так как оно генерируется базой данных.
Создание классов для представления сущностей баз данных
Для работы с элементом управления LinqDataSource используются классы, представляющие сущности базы данных. Для создания этих классов можно использовать средства в Visual Studio 2008 или Visual Web Developer, экспресс-выпуск.
Создание класса для таблицы MovieReviews
Если веб-узел еще не содержит папку App_Code, то в Обозревателе решений щелкните правой кнопкой мыши проект, выберите команду Добавить папку ASP.NET и затем выберите App_Code.
Щелкните правой кнопкой мыши папку App_Code и выберите команду Добавить новый элемент.
В группе Установленные шаблоны выберите шаблон Классы преобразования языка LINQ в язык SQL, переименуйте файл Reviews.dbml и нажмите кнопку Добавить.
Открывается Реляционный конструктор объектов.
В окне обозревателя серверов перетащите таблицу MovieReviews в окно Реляционный конструктор объектов.
Таблица MovieReviews и ее столбцы представляются в виде сущности MovieReview в окне конструктора.
Сохраните файл Reviews.dbml.
В обозревателе решений откройте файл Reviews.designer.cs или Reviews.designer.vb.
Обратите внимание на то, что теперь в нем есть классы для ReviewsDataContext и MovieReview. Класс ReviewsDataContext представляет базу данных, а класс MovieReview представляет таблицу базы данных. Конструктор без параметров для класса ReviewsDataContext считывает строку подключения из файла Web.config.
Откройте файл Web.config.
Обратите внимание на то, что строка подключения была добавлена в элемент connectionStrings.
Закройте файл класса и файл Web.config.
Создание и настройка элемента управления LinqDataSource
Когда у вас есть таблица базы данных и классы, представляющие записи базы данных, для управления данными можно воспользоваться элементом управления LinqDataSource на веб-странице ASP.NET.
Создание и настройка элемента управления LinqDataSource
В Visual Studio создайте новую веб-страницу ASP.NET или переключитесь в представление конструирования.
С вкладки Данныепанели элементов перетащите элемент управления LinqDataSource в элемент form на веб-странице.
Для свойства ID можно оставить значение LinqDataSource1.
Присвойте свойству ContextTypeName значение ReviewsDataContext.
Присвойте свойству TableName значение MovieReviews.
Присвойте свойству AutoPage значение true и переключитесь в представление исходного кода.
В следующем примере показана декларативная разметка для элемента управления LinqDataSource.
<asp:LinqDataSource ContextTypeName="ReviewsDataContext" TableName="MovieReviews" AutoPage="true" ID="LinqDataSource1" runat="server"> </asp:LinqDataSource>
Обратите внимание, что при этом не потребовалось задавать какие-либо команды базы данных для выбора данных.
Добавление элемента управления для отображения данных
Теперь можно добавить элемент управления DetailsView и привязать его к элементу управления LinqDataSource. Элемент управления DetailsView позволяет пользователям просматривать данные, управляемые элементом управления LinqDataSource.
Подключение данных из LinqDataSource к DetailsView
На вкладке Данныепанели элементов дважды щелкните элемент управления DetailsView, чтобы добавить его на страницу.
Для свойства ID можно оставить значение DetailsView1.
Присвойте свойству DataSourceID значение LinqDataSource1.
Присвойте свойству DataKeyNames значение MovieID.
Задайте для AllowPaging значение true.
В следующем примере показана декларативная разметка для элемента управления DetailsView.
<asp:DetailsView DataSourceID="LinqDataSource1" DataKeyNames="MovieID" AllowPaging="true" ID="DetailsView1" runat="server"> </asp:DetailsView>
Сохраните изменения и нажмите сочетание клавиш CTRL+F5 для просмотра страницы в обозревателе.
Элемент управления DetailsView отображает значения для текущей записи из таблицы MovieReviews. Элемент управления DetailsView автоматически создает веб-элементы управления для отображения каждого столбца из таблицы базы данных.
Предоставление пользователям разрешения на обновление, вставку и удаление данных
Элемент управления LinqDataSource может создавать команды для обновления, вставки и удаления данных.
Разрешение операций обновления, вставки и удаления
В элементе управления LinqDataSource присвойте свойствам EnableUpdate, EnableInsert и EnableDelete значение true.
В следующем примере показана декларативная разметка для элемента управления LinqDataSource.
<asp:LinqDataSource ContextTypeName="ReviewsDataContext" TableName="MovieReviews" AutoPage="true" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" runat="server"> </asp:LinqDataSource>
В элементе управления DetailsView присвойте свойствам AutoGenerateEditButton, AutoGenerateInsertButton и AutoGenerateDeleteButton значение true.
Чтобы задать, какие поля отображаются в элементе управления DetailsView и их порядок, присвойте свойству AutoGenerateRows значение false.
Добавьте поля для столбцов "Название", "Театр", "Оценка" и "Просмотр" и привяжите их к соответствующим полям данных.
В следующем примере показана декларативная разметка для элемента управления DetailsView.
<asp:DetailsView DataSourceID="LinqDataSource1" DataKeyNames="MovieID" AutoGenerateRows="false" AutoGenerateEditButton="true" AutoGenerateInsertButton="true" AutoGenerateDeleteButton="true" AllowPaging="true" ID="DetailsView1" runat="server"> <Fields> <asp:BoundField HeaderText="Title" DataField="Title" /> <asp:BoundField HeaderText="Theater" DataField="Theater" /> <asp:BoundField HeaderText="Number of Stars" DataField="Score" /> <asp:BoundField HeaderText="Review" DataField="Review" /> </Fields> </asp:DetailsView>
Столбец MovieID выбирается из источника данных вместе с другими столбцами. Однако он не отображается в элементе управления DetailsView, и пользователь не может изменить значение в нем. Чтобы настроить элемент управления LinqDataSource на автоматическое создание команд для обновления, вставки и удаления данных, необходимо выбрать свойство MovieID.
Обратите внимание на то, что указывать команды для этих операций с данными не нужно.
Сохраните изменения и нажмите клавиши CTRL+F5 для отображения страницы в обозревателе.
Элемент управления DetailsView отображает поля для текущей записи из таблицы MovieReviews. Записи можно обновлять, вставлять и удалять, нажимая соответствующие кнопки на элементе управления DetailsView.
Следующие действия
В данном пошаговом руководстве демонстрируется базовая функциональность операций обновления, вставки и удаления записей с помощью элемента управления LinqDataSource. Для получения сведений о дополнительных возможностях элемента управления LinqDataSource можно выполнить следующие действия:
Можно воспользоваться фильтром возвращаемых записей данных, указав значение свойства Where. Можно также выбрать только подмножество столбцов, указав значение свойства Select. Дополнительные сведения см. в разделе Пошаговое руководство. Выбор и фильтрация подмножества данных с помощью элементов управления LinqDataSource и GridView.
Чтобы убедиться, что данные в базе данных не изменились с момента их считывания веб-страницей, элемент управления LinqDataSource сохраняет исходные значения всех выбранных данных. Когда на веб-сервере публикуется обновление, объект LinqDataSource сравнивает каждое сохраненное поле с текущим значением в базе данных. Если они совпадают (то есть запись не изменилась), объект LinqDataSource обновляет или удаляет запись. Хранение всех исходных значений столбца может оказаться неэффективным. Чтобы этого избежать, можно добавить в таблицу базы данных столбец timestamp. Дополнительные сведения см. в разделе Пошаговое руководство. Использование временной метки с управляющим элементом LinqDataSource для проверки целостности данных.
См. также
Основные понятия
Общие сведения о серверном веб-элементе управления LinqDataSource