读书人

datatable 回发后自动清空?解决方案

发布时间: 2013-06-19 10:26:41 作者: rapoo

datatable 回发后自动清空?

    
DataTable myda = new DataTable()

protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{

DataColumn datacol = myda.Columns.Add("UnitName");
datacol.DataType = Type.GetType("System.String");
datacol = myda.Columns.Add("ProjCharger");
datacol.DataType = Type.GetType("System.String");
ViewState["table"] = myda;
grid.DataSource = myda;
grid.DataBind();
this.grid.KeyFieldName = "UnitName";
}

}
protected void LinkButton1_Click(object sender, EventArgs e)
{

grid.AddNewRow();

}

protected void grid_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) //插入事件
{

myda = (DataTable)ViewState["table"];
DataRow darow = myda.NewRow();
darow[0] = e.NewValues[0].ToString();
darow[1] = e.NewValues[1].ToString();

myda.Rows.Add(darow);
grid.DataSource = myda;
grid.DataBind();
ViewState["table"] = myda;
grid.CancelEdit();
e.Cancel = true;
}


为什么我每次插入记录之后就自动把之前的清空了呢,我明明用viewstate了啊

[解决办法]
跟Viewstate有什么关系?你定义一个变量,每次回发时自然就是初始化的。这是web,不是winform。
[解决办法]
如果你一定要滥用ViewState,那么可以写

protected void Page_Load(object sender, EventArgs e)
{
myda = —ataTable)ViewState["table"];


if (!this.IsPostBack)
{
..................
}

但是对于asp.net程序来说,这完全没有必要。与其把数据花时间 序列化/反序列化,并且在千里之外的浏览器端(随着每一个回发操作而)传来传来地,那么还不如就是从服务器端本地数据库里去Select查询。当你使用数据库系统时,可以使用数据缓存技术来避免不必要的数据库查询操作。

但是这跟ViewStat没有关系,不需要ViewState。
[解决办法]
看不出问题的所在~
你可以学 下断点 调戏
观察运行过程 观察dt中的数据变法~
[解决办法]


public Datatable dt
{
get
{
object o = ViewState["dt"];
return o == null ? null: o as datatable;
}
set
{
ViewState["dt"] = value;
}
}

读书人网 >asp.net

热点推荐