2016-11-25 33 views
0

如何使用數據列表中的按鈕刪除會話數據表中的數據?
如何刪除會話數據錶行上點擊一個按鈕裏面Datalist

該代碼是用於顯示購物車和B取出按鈕內加入產物被用來從數據列表

前端代碼

<asp:DataList ID="DataList1" runat="server" Width="100%" HorizontalAlign="Center"> 
    <ItemStyle BorderStyle="Double" /> 
    <ItemTemplate> 
    <center> 
     <table class="table" style="border-style: dashed; top: 211px; left: 23px; height: auto; table-layout: fixed; width: 100%;"> 
     <tr> 
      <td> 
      <asp:Image ID="Pimg" runat="server" ImageUrl='<%# Eval("Pimg") %>' CssClass="img img-responsive" Height="140px" Width="240px" /> 
      </td> 
      <td> 
      <asp:Label ID="Pname" runat="server" Text='<%# Eval("Pname") %>'></asp:Label> 
      </td> 
      <td> 
      <asp:Label ID="Pqty" runat="server" Text='<%# Eval("Pqty") %>'></asp:Label> 
      </td> 
      <td> 
      <asp:Label ID="Price" runat="server" Text='<%# Eval("Price") %>'></asp:Label> 
      </td> 
      <td> 
      <asp:Button ID="bremove" runat="server" Text="Remove" OnClick="bremove_Click" /> 
      </td> 
     </tr> 
     </table> 
    </center> 
    </ItemTemplate> 
</asp:DataList> 

後退結束碼

刪除項目
protected void bremove_Click(object sender, EventArgs e) 
    { 
     int index = DataList1.SelectedIndex; 
     DataTable dt = Session["AddToCard"] as DataTable; 
     dt.Rows[index].Delete(); 
     porductlist = dt; 
     BindData(); 
     Response.Redirect("Default.aspx"); 
    } 
public void BindData() 
    { 
     DataList1.DataSource = porductlist; 
     DataList1.DataBind(); 
    } 
+0

而你的問題是......? – VDWWD

+0

如何從數據表中刪除數據,然後點擊Datalist中的按鈕?會話數據綁定裏面Datalist我想刪除單行數據 –

回答

0

添加AcceptChanges()

protected void bremove_Click(object sender, EventArgs e) 
{ 
    int index = DataList1.SelectedIndex; 
    DataTable dt = Session["AddToCard"] as DataTable; 

    dt.Rows[index].Delete(); 
    dt.AcceptChanges(); 

    DataList1.DataSource = dt; 
    DataList1.DataBind(); 

    porductlist = dt; 
    BindData(); 
    Response.Redirect("Default.aspx"); 
} 

但你打電話BindData()和重定向,重定向是沒有必要的。除非你想去另外一頁,在這種情況下BindData()是沒有必要的。

UPDATE

要獲得正確的行數,使用按鈕用Command,而不是一個Click和發送的行數爲CommandArgument

<asp:Button ID="bremove" runat="server" Text="Button" OnCommand="bremove_Command" CommandArgument='<%# Container.ItemIndex %>' /> 

protected void bremove_Command(object sender, CommandEventArgs e) 
{ 
    int index = Convert.ToInt32(e.CommandArgument); 
} 
+0

謝謝你的幫助@vdwwd –

0

自定義屬性(例如,你的數據庫條目的ID)添加到您的按鈕:

<asp:Button ID="bremove" runat="server" Text="Remove" OnClick="bremove_Click" entry-id='<%# Eval("ID") %>' /> 

然後在代碼隱藏,你可以讀出的屬性:

protected void bremove_Click(object sender, EventArgs e) 
{ 
     string id = ((Button)sender).Attributes["data-id"]; 
     // .. your code .. 
} 
+0

謝謝@ user1519979我已經嘗試過你的步驟,但它刪除數據存在於數據表中的0位置行 –

0

請重新分配將dt更新爲會話變量以更新會話值。

protected void bremove_Click(object sender, EventArgs e) 
 
    { 
 
     int index = DataList1.SelectedIndex; 
 
     DataTable dt = Session["AddToCard"] as DataTable; 
 
     dt.Rows[index].Delete(); 
 
     porductlist = dt; 
 
     Session["AddToCard"]= dt 
 
     BindData(); 
 
     Response.Redirect("Default.aspx"); 
 
    } 
 
public void BindData() 
 
    { 
 
     DataList1.DataSource = porductlist; 
 
     DataList1.DataBind(); 
 
    }