【问题标题】:store datatable into viewstate in asp.net将数据表存储到asp.net中的视图状态
【发布时间】:2014-08-12 07:09:47
【问题描述】:

我创建了一个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。

我的问题是:每当我从Viewstate 检索DataTable

DataTable _dtTemp = (DataTable)ViewState["_table"];

该表还包含DataRow...

我不想要数据行。我只想要带有列字段的表格。

【问题讨论】:

  • 请使用相应的按钮{} 来格式化您的代码行

标签: asp.net datatable ado.net viewstate


【解决方案1】:

存储在 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();
....    

【讨论】:

    猜你喜欢
    • 2014-06-12
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多