UpdateState在更新DataTable时自动更新

时间:2012-06-01 11:10:03

标签: c# asp.net datatable viewstate

我在 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”)时,其DataTable dt2 即使我没有将 dt2 分配回 ViewState(“dtThis”)。(表示在ViewSate中删除了列 - “FirstName”(“ dtThis“)DataTable)。

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

如何维护原始的ViewState?

3 个答案:

答案 0 :(得分:6)

您正在将数据表的引用存储到viewstate中。因此,对viewstate["dtThis"]所做的更新直接影响method1()中分配的原始Datatable obj。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

像这样使用它解决了引用问题

DataTable dt2= ( (DataTable)ViewState["dtThis"]).Copy();