我已创建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 ..我只想要带有列字段的表。
答案 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();
....