방법: DataList 웹 서버 컨트롤에서 항목 삭제 허용

Visual Studio 2010

업데이트: 2007년 11월

DataList 컨트롤의 항목을 다양한 방식으로 삭제하도록 할 수 있습니다. 예를 들어 사용자가 클릭하면 즉시 항목을 삭제하는 삭제 단추를 항목에 삽입할 수 있습니다.

개별 항목에 확인란을 포함시킬 수도 있습니다. 이 경우 사용자는 제거할 항목을 모두 선택한 다음 별도의 삭제 단추를 클릭하여 한 번에 모두 삭제합니다. 이 방법은 MSN Hotmail 같은 프로그램에서 사용됩니다.

사용자가 개별 항목을 삭제할 수 있도록 하려면

  1. 페이지에 데이터 소스 컨트롤을 추가합니다.

  2. 데이터 소스 컨트롤에 대해 삭제 명령 또는 메서드를 정의합니다.

    예를 들어 SqlDataSource 컨트롤을 사용하는 경우 다음 예제처럼 데이터 소스 컨트롤의 DeleteCommand 속성을 ID의 자리 표시자가 포함된 SQL Delete 문으로 설정합니다.

    DELETE FROM Categories WHERE CategoryID = @CategoryID
    

    ObjectDataSource 컨트롤을 사용하는 경우에는 DeleteMethod 속성을 삭제를 수행하는 메서드의 이름으로 설정합니다.

  3. 데이터 소스 컨트롤에서 삭제할 레코드 ID의 단일 매개 변수가 포함된 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(ko-kr,VS.100).gif참고:

    SelectCommandUpdateCommand 같은 다른 명령은 이 예제에 나와 있지 않습니다.

    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. DataList 컨트롤의 DeleteCommand 이벤트에 대한 이벤트 처리기를 만듭니다. 메서드에서 다음과 같은 작업을 수행합니다.

    1. DataList 컨트롤의 DataKeys 컬렉션에서 삭제할 레코드의 ID를 가져옵니다. 현재 레코드의 키를 가져오려면 현재 항목의 ItemIndex 속성이 반환한 인덱스를 사용합니다.

    2. 3단계에서 만든 매개 변수의 DefaultValue 속성을 설정합니다.

    3. 데이터 소스 컨트롤의 Delete 메서드를 호출합니다.

    다음 코드는 SqlDataSource1이라는 SqlDataSource 컨트롤을 데이터 소스로 사용하여 이러한 작업을 보여 줍니다.

    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. DataList 컨트롤의 ItemTemplateAlternatingItemTemplate(사용하는 경우)에 CheckBox 웹 서버 컨트롤을 추가하고 이 컨트롤의 ID 속성을 "Delete" 같은 특정 이름으로 설정합니다. CheckBox 컨트롤의 AutoPostBack 속성이 false로 설정되어 있는지 확인합니다.

  3. Button 웹 서버 컨트롤을 페이지에 추가합니다. Text 속성은 "Delete All"로, ID 속성은 DeleteAll로 각각 설정합니다. DataList 템플릿에는 이 단추를 추가하지 않습니다.

  4. Delete All 단추의 Click 이벤트에 대한 메서드를 만듭니다. 메서드에서 다음과 같은 작업을 수행합니다.

    1. DataList 컨트롤의 Items 컬렉션을 순환하며 각 항목을 차례대로 추출합니다.

    2. 항목 안에서 항목의 FindControl 메서드를 사용하여 1단계에서 추가한 CheckBox 컨트롤을 가져오고 이 컨트롤의 Checked 속성을 테스트합니다.

    3. 확인란이 선택되어 있으면 해당 항목을 데이터 소스에서 삭제합니다.

    다음 예제에서는 위에서 설명한 방법으로 항목을 한 번에 모두 삭제하는 DeleteAll 단추에 대한 이벤트 처리기를 보여 줍니다.

    [Visual Basic]

[C#]

표시: