如何删除会话数据表行上点击一个按钮里面Datalist

问题描述:

如何使用数据列表中的按钮删除会话数据表中的数据?
如何删除会话数据表行上点击一个按钮里面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我想删除单行数据 –

添加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 –

自定义属性(例如,你的数据库条目的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位置行 –

请重新分配将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(); 
 
    }