2016-11-25 3 views
0

Как удалить данные из сеанса, используя datatable с помощью кнопки внутри datalist?
Как удалить Session datatable row при нажатии кнопки внутри Datalist

Этот код предназначен для отображения продукт добавлен в корзину и кнопка bremove используется для удаления этого элемента из DataList

Front End Код

<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> 

Back End Код

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

Как я могу удалить данные из сеанса из datatable при нажатии кнопки внутри 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

Добавление пользовательского атрибута (например, идентификатор вашей БД-записи) к кнопке:

<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 позиции в Datatable –

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

Смежные вопросы