2012-02-29 4 views
0

입력 유형 = "image"및 해당 행 ID가 이미지에 연결되도록 GridView에서 행을 삭제하려고하므로 해당 이미지를 클릭하면 asp에서 함수가 호출됩니다. 해당 ID를 기반으로 데이터베이스에서 해당 레코드를 삭제하고 해당 그리드를 다시로드하십시오. 이 방법에 가장 좋은 방법은 무엇입니까? 당신의 도움을 주셔서 감사합니다.GridView 행 삭제

<asp:GridView ID="grdHouses" runat="server" 
     CssClass="gridview" 
     RowStyle-CssClass="gridview_itm" 
     AlternatingRowStyle-CssClass="gridview_aitm" 
     HeaderStyle-CssClass="gridview_hdr" Width="100%" AutoGenerateColumns="False"> 
    <Columns> 
    <asp:TemplateField HeaderText="" ItemStyle-Width="2%"> 
     <ItemTemplate> 
     <input type="image" name="imgDelete" class="listViewTdToolsS1" src="../App_Themes/Sugar2006/images/delete_inline.gif" alt="rem" style="height:12px;width:12px;border-width:0px;" value="" 
     <%# DataBinder.Eval(Container.DataItem, "ID") %>"> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
     <HeaderTemplate> 
     <asp:LinkButton ID="Name_SortLnkBtn" runat="server" Text="NAME" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="Name" CausesValidation="false" /> 
     <asp:ImageButton ID="Name_SortImgBtn" runat="server" Visible="false" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="Name" CausesValidation="false" /> 
     </HeaderTemplate> 
     <ItemTemplate> 
     <%#Eval("Name")%> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
     <HeaderTemplate> 
     <asp:LinkButton ID="Description_SortLnkBtn" runat="server" Text="DESCRIPTION" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="Description" CausesValidation="false" /> 
     <asp:ImageButton ID="Description_SortImgBtn" runat="server" Visible="false" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="Description" CausesValidation="false" /> 
     </HeaderTemplate> 
     <ItemTemplate> 
     <%#Eval("Description")%> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
+0

있는 gridview – Amitesh

답변

0

명령 단추 :

<asp:TemplateField HeaderText="" ItemStyle-Width="2%"> 
<ItemTemplate>   
     <asp:ImageButton runat="server" 
      CommandName='DeleteItem' 
      CommandArgument = '<%# Eval("ID") %>' 
      CssClass="listViewTdToolsS1" 
      ImageUrl="~/App_Themes/Sugar2006/images/delete_inline.gif" 
      Tooltip="rem" 
</ItemTemplate>  
</asp> 

의 GridView OnItemCommand 이벤트 처리 : 데이터 소스가 뒤에 코드에서 설정되어 있기 때문에

void ContactsGridView_RowCommand(Object sender, GridViewCommandEventArgs e) 
    { 
    // If multiple buttons are used in a GridView control, use the 
    // CommandName property to determine which button was clicked. 
    if(e.CommandName=="DeleteItem") 
    { 
     var id = Int32.Parse(e.CommandArgument); 
     // delete the object from database 
     Database.DeleteObject(id); 
     // rebind the gridview 
     grdHouses.DataSource = DataBase.GetItems(); 
      grdHouses.DataBind(); 
    } 
    } 

을, 나는 의 deleteItem 또는 다른 뭔가를 사용하는 것이 좋습니다 대신을 명령 이름으로 삭제하십시오.

+0

에서 dataKeyNames = "이드"이봐, 당신의 도움을 주셔서 감사 추가하지만, 이제 오류가 발생합니다 : 잘못된 포스트 백 또는 콜백 인수. 이벤트 유효성 검사는 페이지의 <% @ Page EnableEventValidation = "true"%>에서 를 사용하여 활성화됩니다. 보안상의 이유로이 기능은 포스트 백 또는 콜백 이벤트에 대한 인수가 원래 렌더링 된 서버 컨트롤에서 비롯된 것인지 확인합니다. 데이터가 유효하고 예상되는 경우 유효성 검사를 위해 다시 게시 또는 콜백 데이터를 등록하려면 ClientScriptManager.RegisterForEventValidation 메서드를 사용합니다. –

+0

웹 사용자 정의 컨트롤에이 코드가 있습니다. –

+0

약간 대답이 바뀌 었습니다. 더 이상 다음을 필요로하지 않습니다.

0

먼저 다음의 gridview의 사용 RowDeleting 뒤에 코드에서이

<asp:GridView ID="grdHouses" runat="server" 
    CssClass="gridview" DataKeyNames="ID" 
    RowStyle-CssClass="gridview_itm" 
    AlternatingRowStyle-CssClass="gridview_aitm" 
    HeaderStyle-CssClass="gridview_hdr" Width="100%" AutoGenerateColumns="False" onrowdeleting="grdHouses_RowDeleting"> 
<Columns> 
<asp:TemplateField HeaderText="ID"> 
     <ItemTemplate> 
      <asp:Label ID="lblID" runat="server" Text='<%# Bind("ID") %>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
<asp:TemplateField> 
    <HeaderTemplate> 
    <asp:LinkButton ID="Name_SortLnkBtn" runat="server" Text="NAME" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="Name" CausesValidation="false" /> 
    <asp:ImageButton ID="Name_SortImgBtn" runat="server" Visible="false" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="Name" CausesValidation="false" /> 
    </HeaderTemplate> 
    <ItemTemplate> 
    <%#Eval("Name")%> 
    </ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField> 
    <HeaderTemplate> 
    <asp:LinkButton ID="Description_SortLnkBtn" runat="server" Text="DESCRIPTION" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="Description" CausesValidation="false" /> 
    <asp:ImageButton ID="Description_SortImgBtn" runat="server" Visible="false" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="Description" CausesValidation="false" /> 
    </HeaderTemplate> 
    <ItemTemplate> 
    <%#Eval("Description")%> 
    </ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Delete?"> 
<ItemTemplate> 
    <span onclick="return confirm('Are you sure to Delete the record?')"> 
     <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"> </asp:LinkButton> 
    </span> 
</ItemTemplate> 

</asp:TemplateField> 
    </Columns> 
</asp:GridView> 

처럼있는 gridview에 DataKeyName 추가

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    try 
    { 
     string id = GridView1.DataKeys[e.RowIndex].Values["ID"].ToString(); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.CommandText = "Delete FROM Table Name where ID='" + id + "'"; 
     cmd.Connection = con; 
     con.Open(); 
     cmd.ExecuteNonQuery();        
    } 
    catch (Exception ex) 
    { 

    } 
    finally 
    { 
     if (con.State == ConnectionState.Open) 
     { 
      con.Close(); 

     } 
    }   
}