Доступ к данным с помощью элементов управления источником данных (DataSource) в ASP.NET 2.0 - Удаление при помощи элемента управления GridView
ОГЛАВЛЕНИЕ
Удаление при помощи элемента управления GridView
В ASP.NET 2.0 было представлено несколько новых элементов управления данными, к примеру, GridView, DetailsView, FormView и др. Элемент управления GridView разработан для того, чтобы отображать информацию о множестве записей, а также он обладает функциональностью удаления, которую можно активировать, установив соответствующую галочку. Для того чтобы продемонстрировать данную функциональность, мы рассмотрим случай, когда GridView будет отображать все записи, и затем добавим колонку кнопок удаления к сетке.
Для начала, добавьте элемент управления SqlDataSource на страницу и затем используйте тот же DeleteCommand что и в предыдущем примере:
DELETE FROM [Products] WHERE [ProductID] = @ProductID
Далее добавьте параметр @ProductID к набору DeleteParameters элемента. Вместо того, чтобы использовать ControlParameter , как мы делали это в предыдущем примере, используйте стандартный объект Parameter.
<asp:SqlDataSource ID="ProductsDataSource" runat="server" ConnectionString="..."
DeleteCommand="DELETE FROM [Products] WHERE [ProductID] = @ProductID"
SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice], [Discontinued] FROM [Products] ORDER BY [ProductName]">
<DeleteParameters>
<asp:Parameter Name="ProductID" Type="Int32" />
</DeleteParameters>
</asp:SqlDataSource>
Заметьте: SelectCommand , который мы использовали в упомянутом SqlDataSource немного отличается от предыдущего примера тем, что он возвращает два дополнительных поля из таблицы Products: UnitPrice и Discontinued.
Далее, добавляем на страницу GridView и из его смарт-тега привязываем его к элементу SqlDataSource, который мы только что добавили (ProductsDataSource). При этом BoundFields автоматически добавляется к колонкам, возвращенным в SelectCommand. Он также устанавливает свойство DataKeys элемента GridView в колонки первичного ключа возвращенных данных - в данном случае ">ProductID".
Для того чтобы добавить колонку кнопок удаления (Delete), перейдите к смарт-тегу GridView и активируйте опцию удаления "Enable Deleting". Это добавляет CommandField к DetailsView и устанавливает его свойство ShowDeleteButton в True. CommandField при данной конфигурации отображает колонку, где для каждой строки есть кнопка удаления. Также активируйте опцию листания "Enable Paging", которая также расположена в смарт-теге GridView.
После того, как вы выполните все шаги, декларативная разметка вашего GridView должна быть похожа на следующую:
<asp:GridView ID="gvProducts" runat="server" AllowPaging="True"
AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="ProductsDataSource">
<Columns>
<asp:CommandField ShowDeleteButton="True" />
<asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
<asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" />
<asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" SortExpression="Discontinued" />
</Columns>
</asp:GridView>
И это все! При нажатии кнопки Delete выполняются следующие действия:
- Выполняется постбэк
- Выполняется событие RowDeleting элемента GridView
- GridView заполняет @ProductID используя значение DataKeys для того кортежа, где была нажата кнопка удаления (Delete). (Свойство DataKeys должно быть установлено в "ProductID". Если вы очистите данное значение, или оно будет сброшено либо потеряно каким-то образом, то значение параметра @ProductID не будет присвоено при нажатии кнопки Delete. Следовательно, выражение DELETE не удалит ни одной записи! Поэтому, если вы тестируете GridView и узнаете, что кнопка Delete ничего не делает, то первым делом вам необходимо проверить правильно ли настроено свойство DataKeys элемента GridView.)
- GridView вызывает метод Delete() своего SqlDataSource
- Выполняется событие RowDeleted элемента GridView
Данный пример демонстрирует только простые возможности GridView и не включает в себя некоторые возможности, такие как предоставление окна сообщений для подтверждения удаления.
