Практическое руководство. Предоставление пользователям разрешения на удаление элементов в серверном веб-элементе управления DataList

Visual Studio 2010

Обновлен: Ноябрь 2007

Пользователям можно разрешить удалять элементы в элементе управления DataList несколькими способами. Одним из способов является включение в элемент кнопки Delete — элемент удаляется сразу после нажатия пользователем этой кнопки.

Вторым способом является включение в отдельный элемент элемента управления с флажками. Пользователь может становить флажки для всех элементов, которые нужно удалить, и затем отдельно нажать кнопку Delete, чтобы удалить элементы в пакетном режиме. Этот способ используется в программах, таких как MSN Hotmail.

Предоставление пользователям разрешения на удаление отдельных элементов

  1. Добавьте элемент управления источником данных на страницу.

  2. Определите команду удаления или метод для элемента управления источника данных.

    Например, если используется элемент управления SqlDataSource, установите в качестве значения свойства DeleteCommand элемента управления источника данных оператор SQL Delete, который включает заполнитель для идентификатора, как в следующем примере:

    DELETE FROM Categories WHERE CategoryID = @CategoryID
    

    Если используется элемент управления ObjectDataSource, установите для свойства DeleteMethod имя метода, выполняющего удаление.

  3. В элементе источника данных создайте запись для свойства DeleteParameters, которое включает один параметр для идентификатора записи для удаления.

    Например, элемент SqlDataSource может выглядеть следующим образом:

    <asp:SqlDataSource ID="SqlDataSource1" 
        Runat="server" 
        ConnectionString=
            "<%$ ConnectionStrings:NorthwindConnectionString %>"
        DeleteCommand="DELETE FROM [Categories] 
            WHERE [CategoryID] = @CategoryID">
        <DeleteParameters>
            <asp:Parameter Type="Int32" 
                  Name="CategoryID">
            </asp:Parameter>
        </DeleteParameters>
    </asp:SqlDataSource>
    
    efx1fwb6.alert_note(ru-ru,VS.100).gifПримечание.

    Другие команды, такие как SelectCommand и UpdateCommand, не показаны в этом примере.

    Элемент ObjectDataSource может выглядеть следующим образом:

    <asp:ObjectDataSource ID="ObjectDataSource1" Runat="server" 
            DeleteMethod="DeleteCategory()">
        <DeleteParameters>
            <asp:Parameter Name="example"></asp:Parameter>
        </DeleteParameters>
    </asp:ObjectDataSource>
    
  4. В элементе управления DataList задайте для свойства DataKeyField значение первичного ключа таблицы, из которой нужно удалить запись.

  5. В элемент ItemTemplateAlternatingItemTemplate, если он используется) добавьте серверный веб-элемент управления Button или LinkButton.

  6. Присвойте свойству CommandName кнопки значение delete.

    Разметка элемента управления DataList может выглядеть следующим образом:

    <asp:DataList ID="DataList1" Runat="server" 
        DataSourceID="SqlDataSource1" 
        DataKeyField="CategoryID" 
        OnDeleteCommand="DataList1_DeleteCommand">
        <ItemTemplate>
           CategoryName: <asp:Label ID="CategoryNameLabel" 
                              Runat="server" 
                              Text='<%# Eval("CategoryName") %>'>
                         </asp:Label>
           <br />
           Description: <asp:Label ID="DescriptionLabel" 
                             Runat="server" 
                              Text='<%# Eval("Description") %>'>
                        </asp:Label>
          <br />
          <asp:Button ID="Delete" Runat="server" 
               Text="Delete" 
               CommandName="delete" />
        </ItemTemplate>
    </asp:DataList>
    
  7. Создайте обработчик событий для события DeleteCommand элемента управления DataList. В этом методе:

    1. Возвратите идентификатор записи для удаления из коллекции DataKeys элемента управления DataList. Можно возвратить ключ для текущей записи с помощью индекса, возвращенного свойством ItemIndex текущего элемента.

    2. Задайте значение свойства DefaultValue параметра, созданного на шаге 3.

    3. Вызовите метод Delete элемента управления источника данных.

    Эти задачи показаны в следующем коде с использованием элемента управления SqlDataSource с именем SqlDataSource1, как источника данных:

    Protected Sub DataList1_DeleteCommand(ByVal source As Object, 
            ByVal e As DataListCommandEventArgs)
        Dim id As Integer = _
            CInt(DataList1.DataKeys(e.Item.ItemIndex))
        SqlDataSource1.DeleteParameters("CategoryID").DefaultValue _
             = id
        SqlDataSource1.Delete()
    End Sub
    

    protected void DataList1_DeleteCommand(object source, 
        DataListCommandEventArgs e)
    {
        int id = (int)DataList1.DataKeys[e.Item.ItemIndex];
        SqlDataSource1.DeleteParameters["CategoryID"].DefaultValue 
            = id;
        SqlDataSource1.Delete();
    }
    

Предоставление пользователям разрешения на удаление группы элементов

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

  2. В свойстве ItemTemplateAlternatingItemTemplate, если используется) элемента управления DataList добавьте веб-серверный элемент управления CheckBox и задайте для его свойства ID отдельное имя, например, «Delete». Убедитесь, что для свойства AutoPostBack элемента управления CheckBox установлено значение false.

  3. Добавьте на страницу серверный веб-элемент управления Button. Установите для свойства Text значение «Delete All» и для свойства IDDeleteAll. Эту кнопку не требуется помещать на шаблоны DataList.

  4. Создайте метод для события Click кнопки Delete All. В этом методе:

    1. Выполните цикл в коллекции Items элемента управления DataList, поочередно извлекая каждый элемент.

    2. Внутри элемента используйте метод FindControl элемента для возвращения элемента управления CheckBox шага 1 и тестирования его свойства Checked.

    3. Если флажок установлен, удалите соответствующий элемент из источника данных.

    В следующем примере обработчик событий кнопки DeleteAll удаляет группу элементов в соответствии с описанной выше процедурой.

    [Visual Basic]

    Private Sub DeleteAll_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles DeleteAll.Click
        Dim isDeleted As Boolean
        Dim itemIndex As Integer = 0
        Dim id As String
    
       ' Check each box and see if the item should be deleted.
       For Each dlItem As DataListItem In DataList1.Items
          isDeleted = CType(dlItem.FindControl("Delete"), _
              CheckBox).Checked
          If isDeleted Then
                id = DataList1.DataKeys(itemIndex).ToString()
                SqlDataSource1.DeleteParameters(0).DefaultValue = id
                SqlDataSource1.Delete()
          End If
          itemIndex += 1
       Next
    End Sub
    

[C#]

Показ: