会话变量分配给数据表并创建对象引用问题?

时间:2010-01-13 15:54:40

标签: c# .net asp.net

---->我有数据表,它传递给会话变量中的另一个页面。

---->现在在另一页上我将会话变量带入数据表。

datatable ds_table = new datatable();
ds_table = (datatable)session["table_value"]; 

---->所以问题是,当我从ds_table过滤一些行时。在会话变量中生效。如果某些行从ds_table中删除。然后它也会从会话变量中删除。

---->所以,有人告诉我为什么会发生这种情况?

帮助我。它是必要的。

3 个答案:

答案 0 :(得分:0)

好吧,如果session [“table_value”]指向数据表,并且您将其值(数据表)指定给另一个变量,然后将其更改为该变量,更改将在数据表中重新生成,因此您将看到您所说明的效果。

-----并非总是如此,但在您说明的情况下(数据表是共享资源吗?)

答案 1 :(得分:0)

听起来像是make a copy of the DataTable。试试这个:

ds_table = ((datatable)session["table_value"]).Copy(); 

如果DataTable很大,这将是不好的,所以记住这一点。也就是说,对大型DataTable使用Session听起来不是一个坏主意!

当然是否有效取决于你改变其状态的位置(我做了一些大的假设)。也许更详细地描述您正在做什么,并且您将获得更多帮助(例如代码示例)。

答案 2 :(得分:0)

我建议您在将数据表放入会话之前复制它。然后,它不会受到您稍后对原始数据表所做的任何更改的影响。

您所要做的只是declare a new DataTable variable and copy it

private void CopyDataTable(DataTable table){
    // Create an object variable for the copy.
    DataTable copyDataTable;
    copyDataTable = table.Copy();

    // Insert code to work with the copy.
 }

然后您可以将copyDataTable置于会话中。