一个viewstate赋值问题
asp.net 2003下开发
看代码://页面加载
if(!Page.IsPostBack)
{
GetDB(DS,(string)Session["staProID"],mDS);
Show(txtOPFlag.Text,txtTaskID.Text);
}
------------------------
//方法
private void GetDB(StaffDS DS,string proid,ManageDS mDS)
{
gc.GetDataProGantt(DS,proid);//此处,GetDataProGantt方法获取DS,填充
ViewState["DS"] = DS;
ViewState["DSview"] = DS;//此时的ViewState["DSview"]中11条记录

BindDB(DS,mDS);
}
private void Show(string operationflag,string taskid)
{
if(operationflag.Trim().Length != 0 && taskid.Trim().Length != 0)
{
if(operationflag.Equals("browse") || operationflag.Equals("edit"))
{
DA.GetDataProGantt(DS,(string)Session["staProID"],taskid);//GetDataProGantt方法再次填充DS,此时DS中一条记录
ViewState["DSshow"] = DS;//此处的ViewState["DSshow"]中,1条记录
//此处给页面控件赋值,略去
}
}
}

private void ddlPreviousTask_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(ddlPreviousTask.SelectedItem.Value.Equals("-1"))
{
txtprevious.Value = "1900/1/1";
}
else
{
txtprevious.Value = ((DateTime)(ViewState["DSview"] as StaffDS).ProGantt.Select("TaskID = "+ ddlPreviousTask.SelectedItem.Value +"")[0]["EndDate"]).ToString("yyyy/MM/dd");
//跟踪此处的ViewState["DSview"],里面居然是1条记录,而且是在Show方法里获取的那条。这个,让我很不理解。
//在GetDB方法里,已经获取了DS,而且里是11条记录,赋给了ViewState["DSview"]。
//那么,为什么此处的ViewState["DSview"] 是1条记录呢?
//想了很久,跟踪测试了很久,没结果。请假各位,谢谢,谢谢。 }
}

解决方案 »

  1.   

    执行顺序问题,你先执行GetDB 赋值后执行Show 重新赋值,最后的值当然是在Show中取得的
      

  2.   

    请楼主研究下asp.net页面周期,控件的事件都是在Page_load事件之前发生的
      

  3.   


    对,就是这个地方
    让我想不明白
    我第一次获得了DS之后,里面是11条记录,
    然后将DS给了ViewState["DSview"],
    这之后,只要页面不关闭
    那么ViewState["DSview"]里,是不是就该是11条记录呢?
    因为赋值是在页面首次加载时候才做的呀
      

  4.   

    因为DS是引用类型,ViewState["DSview"]和ViewState["DSshow"]都是指向同一个对象的不同引用,你改变了其中一个的值,另一个也会改变
      

  5.   

    你这个跟ViewState有关,它是存储在页面一个隐藏字段里的,我一般只赋值一个字符串(在页面不关闭的情况下),但从没赋值为11条记录,貌似是一张表!
    所以应该跟viewstate能不能存一张表有关系,我觉得viewstate不能存储一张表!
      

  6.   

    设置一下DS,如:public 类型 DS;
    if(!Page.IsPostBack)
    ...................
    ...................
    试试!!
      

  7.   

    给盖茨兄提个BUG票,再交个报告过来。
      

  8.   

    嗯,若是这样的话
    那么我还想用到ViewState["DSview"]和ViewState["DSshow"]
    有什么办法?
      

  9.   

    不要用同一个对象,再创建一个StaffDS 对象,分别放这两者的值
      

  10.   


    好的
    不知道有没有更好的办法了感谢天行健
    前两天还看你了推荐的
    【oj每周推荐】(算法)各位乘积 [推荐] [.NET技术][C#] 
    呵呵。。结贴