3

我在ViewState中分配一个DataTable

public void Method1()
{    
    DataTable dt = getData(); //Gets the Data

    ViewState["dtThis"] = dt;
}

现在,当“ Method2 ”执行时, ViewState将被分配给DataTable

public void Method2()
{    
    DataTable dt2 = (DataTable)ViewState["dtThis"];

    dt2.Columns.Remove("FirstName");    //Removing a column

    dt2.AcceptChanges();
}

现在,在执行Method2后,当我检查(DataTable)ViewState("dtThis")时,即使我没有将dt2分配回ViewState("dtThis") ,它也具有 DataTable dt2 (意味着在 ViewSate("dtThis") 数据表中删除了列 - "FirstName")。

知道为什么 ViewState 会出现这种行为吗?

以及如何保持原来的 ViewState ?

4

3 回答 3

6

您正在将数据表的引用存储到视图状态中。因此,所做的任何更新viewstate["dtThis"]都会直接影响在method1().

保留原始视图状态数据表的一种方法是使用 DataTable.Copy() 创建原始副本并对该副本进行操作

于 2012-06-01T11:14:11.730 回答
1

我不确定原因,但它也发生在我身上,但当时我有点着急,所以我选择了另一种方式。当我从 ViewState 获取数据表时,我创建了一个新表并遍历原始表的记录并在新表中设置值:) 所以我的 viewstate 表保持不变。

于 2012-06-01T11:19:57.593 回答
0

像这样使用它可以解决引用问题

DataTable dt2= ( (DataTable)ViewState["dtThis"]).Copy(); 
于 2013-12-06T07:23:50.530 回答