将数据表存储到asp.net中的viewstate中

时间:2014-08-12 07:09:48

标签: asp.net datatable ado.net viewstate

我已创建DataTable _dt并添加了如下所示的列

_dt.Columns.Add("INDATE", typeof(string));
_dt.Columns.Add("INTIME", typeof(string));
_dt.Columns.Add("OUTTIME", typeof(string));
_dt.Columns.Add("OUTDATE", typeof(string));

我将_dt存储到Viewstate

ViewState["_table"] = _dt;

然后我在DataTable添加了一行,如下所示:

DataRow _dr = _dt.NewRow();
_dr[0] = string.Format("{0:dd/MM/yyyy}", System.DateTime.Now);
_dr[3] = string.Format("{0:dd/MM/yyyy}", System.DateTime.Now);
_dt.Rows.Add(_dr);

并成功将DataTable绑定到gridview。

我的问题是:每当我从DataTable

中检索Viewstate
DataTable _dtTemp = (DataTable)ViewState["_table"];

该表还包含DataRow ...

我不想要dataRow ..我只想要带有列字段的表。

1 个答案:

答案 0 :(得分:0)

存储在ViewState中的DataTable对象实例与添加行时使用的对象实例相同。所以,无论你做什么,都会在下次检索时看到它

您可以使用存储在ViewState中的原始数据表上的Clone method,并向此克隆添加行。通过这种方式,您将拥有两个不同的对象,向第二个添加行不会影响第一个

ViewState["_table"] = _dt;
DataTable temp = _dt.Clone();
DataRow _dr = temp.NewRow();
_dr[0] = string.Format("{0:dd/MM/yyyy}", System.DateTime.Now);
_dr[3] = string.Format("{0:dd/MM/yyyy}", System.DateTime.Now);
temp.Rows.Add(_dr);

....

DataTable temp = (ViewState["_table"] as DataTable).Clone();
....