2017-06-07 6 views
0

私のページ私はデータベースからいくつかのデータを表示していますが、各項目にはデータベースからこれを削除するボタンがあります。私は、コードビハインド方式でItem.id_produktを取得できますかListViewのボタンのクリックハンドラに値を渡すにはどうすればよいですか?

<asp:ListView ID="productList" runat="server" 
       DataKeyNames="id_produkt" 
       ItemType="Shop.Models.Produkt" SelectMethod="GetProducts"> 
       <ItemTemplate> 
        <tr> 
         <td><%#:Item.id_produkt%></td> 
         <td><%#:Item.nazwa_produkt%></td> 
         <td><%#:Item.cena%></td> 
         <td><%#:Item.poprzednia_cena%></td> 
         <td><%#:Item.Ilosc%></td> 
         <td> 
          <asp:Button CssClass="btn btn-info btn-sm" ID="Edytuj" runat="server" Text="Edytuj" OnClick="AddProductButton_Click" CausesValidation="true" /> 
          <asp:Button CssClass="btn btn-danger btn-sm" ID="RemoveButton" runat="server" Text="Usuń Produkt" OnClick="RemoveProductButton_Click" CausesValidation="false" /> 
          <a href="AdminPage_Details.aspx?productID=<%#:Item.id_produkt%>" class="btn btn-info btn-sm">Szczegóły</a> 
         </td> 
        </tr> 
       </ItemTemplate> 
       <ItemSeparatorTemplate></ItemSeparatorTemplate> 
      </asp:ListView> 

は、ここでのaspxですか?

、今ではこのようになりますのために:どういうわけか

protected void RemoveProductButton_Click(object sender, EventArgs e) 
     { 
      using (var _db = new Shop.Models.EgzemplarzContext()) 
      { 
       int productId = Convert.ToInt16(); 
       var myItem = (from c in _db.Produkty where c.id_produkt == productId select c).FirstOrDefault(); 

       IQueryable<Egzemplarz> query = _db.Egzemplarze; 
       query = query.Where(p => p.id_produkt == productId); 

       if (myItem != null && query != null) 
       { 
        foreach (var item in query) 
        { 
         _db.Egzemplarze.Remove(item); 
        } 

        _db.Produkty.Remove(myItem); 
        _db.SaveChanges(); 

        // Reload the page. 
        string pageUrl = Request.Url.AbsoluteUri.Substring(0, Request.Url.AbsoluteUri.Count() - Request.Url.Query.Count()); 
        Response.Redirect(pageUrl + "?ProductAction=remove"); 
       } 
       else 
       { 
        LabelAddStatusDanger.Text = "Nie można usunąć produktu."; 
       } 
      } 
     } 

私はこの方法でproductlistからItem.id_produktを取得する必要があります。

どうすればいいですか?

答えて

0

ボタンのCommandArgumentプロパティを使用して渡します。

マークアップ:背後

<asp:Button ID="RemoveButton" 
      runat="server" 
      Text="Usuń Produkt" 
      OnClick="RemoveProductButton_Click" 
      CommandArgument='<%#:Item.id_produkt%>' /> 

コード:

protected void RemoveProductButton_Click(object sender, EventArgs e) 
{ 
    var button = (Button)sender; 
    var id_produkt = button.CommandArgument; 
} 

これは、あなたが望むプロダクトIDを持っているリストビュー内のボタンのCommandArgumentを設定します。クリックイベントハンドラが取得されると、送信者がボタンになります。 CommandArgumentプロパティにアクセスするには、ボタンタイプにキャストする必要があります。

関連する問題