Строки, удаленные из таблицы данных, также удаляются из переменной сеанса, которая создала таблицу данных

Я заметил странное поведение при работе с таблицами данных, хранящимися в переменных сеанса. Удаление строки из таблицы данных, созданной из переменной сеанса, по-видимому, также изменяет переменную сеанса, как показано ниже.

<asp:GridView ID="gvResults" runat="server" DataKeyNames="id">
<Columns>
    <asp:TemplateField ShowHeader="False">
        <ItemTemplate>
            <asp:Button ID="btnSelectUserToRemove" runat="server" CausesValidation="false" CommandName="Remove" Text="Select" CommandArgument='<%# Eval("id") %>' OnCommand="Command" />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>
</asp:GridView>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class Test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable dtResults = new DataTable();
            dtResults.Columns.Add("id");

            dtResults.Rows.Add();
            dtResults.Rows[0]["id"] = "1";
            dtResults.Rows.Add();
            dtResults.Rows[1]["id"] = "2";

            Session["id"] = dtResults;
            gvResults.DataSource = dtResults;
            gvResults.DataBind();
        }
    }

    protected void Command(object sender, CommandEventArgs e)
    {
        if (e.CommandName == "Remove")
        {
            DataTable dtTemp = (DataTable)Session["id"];
            for (Int32 i = 0; i < dtTemp.Rows.Count; i++)
            {
                if (e.CommandArgument.ToString() == dtTemp.Rows[i]["id"].ToString())
                {
                    dtTemp.Rows[i].Delete(); //Should just remove the row from the datatable.
                }
            }
            dtTemp.AcceptChanges();
        }
        DisplayData();
    }

    protected void DisplayData()
    {
        gvResults.DataSource = (DataTable)Session["id"];
        gvResults.DataBind(); //Should display both rows because I did not save the modified datatable back to this session variable.
    }
}

Я не сохраняю измененныйdtTemp данные обратно вSession["id"] переменная. Насколько я понимаю, в 1 строкеdtTemp, потому что одна строка была удалена, а 2 строки вSession["id"] при звонкеDisplayData, Тем не менее, только одна строка отображается в виде сетки послеDisplayData пробеги.

Я надеюсь, что есть кто-то, кто может пролить свет на то, почему это происходит.

Ответы на вопрос(2)

Ваш ответ на вопрос