我在 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?
答案 0 :(得分:6)
您正在将数据表的引用存储到viewstate中。因此,对viewstate["dtThis"]
所做的更新直接影响method1()
中分配的原始Datatable obj。
保留原始视图状态数据表的一种方法是使用DataTable.Copy()创建原始副本并在该副本上操作
答案 1 :(得分:1)
我不确定原因,但它也发生在我身上,但当时我有点匆忙,所以我选择了另一种方式。当我从ViewState获取数据表时,我创建了一个新表并循环遍历原始表的记录并在新表中设置值:)所以我的viewstate表保持不变。
答案 2 :(得分:0)
像这样使用它解决了引用问题
DataTable dt2= ( (DataTable)ViewState["dtThis"]).Copy();