2012-02-29 12 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(); 
    } 
    } 

DataSourceは背後にあるコードで設定されているので、私はDeleteItemまたは何か他のものを使用することをお勧めしますの代わりにをコマンド名として削除します。

+0

でdataKeyNames = "Idが" ねえ、あなたの助けをありがとうございますが、今私はエラーを取得しています:無効なポストバックまたはコールバックの引数。イベントの検証は、ページまたは<%@ 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(); 

     } 
    }   
} 
関連する問題