首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2013-06-19 
datatable 回发后自动清空?DataTable myda new DataTable()protected void Page_Load(object sender, Ev

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 = (DataTable)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;
        }
    }

热点排行