如何在单击数据列表中的按钮时删除会话数据表行

How to remove Session datatable row on click of a Button inside Datalist

如何使用数据列表中的按钮从会话数据表中删除数据?

此代码用于显示添加到购物车中的产品,bremove 按钮用于从数据列表中删除该项目

前端代码

<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();
    }

添加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() 是没有必要的。

更新

要获得正确的行号,请使用带有 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);
}

向您的按钮添加自定义属性(例如您的数据库条目的 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 .. 
 }

请将更新 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();
    }