DataTable pdTbl=Bargain()//注:Bargain()返回一个DataTable;初始化ViewState["pdTbl"]=pdTbl;FillTable();DataGrid1.DataSource=pdTbl;  //这里pdTbl为什么是填充后的数据,系统自动多加了一条语句:pdTbl=(DataTable)ViewState["pdTbl"],郁闷,为什么不是一个初始化的那个pdTbl,难道
ViewState["pdTbl"]是指向pdTbl的地址吗?咋觉得像C/C++的指针,却又不用声明,感到有点难以理解。希望高手解释下谢谢。DataGrid1.DataBind();
private void FillTable()
{
DataTable pdTbl=(DataTable)ViewState["pdTbl"];接下来对pdTbl填充。
}

解决方案 »

  1.   

    没有用new 关键字去创建table那么你就只有一个table可以用,dateview,dateGrid使用的都只是那个table的引用。
      

  2.   

    这个有什么问题么....为什么不具体的看看Bargain()这个是做什么的.应该是添加数据后绑定的吧.
      

  3.   

    ViewState 相当与 Page 页面的序列化变量,其数据保存在页面的隐藏域
    <input type="hidden" name="__VIEWSTATE" value="dDwtODM5OTE5MTczO">里面,
    可以把它当作一个已经定义的控件使用
      

  4.   

    C#的引用本身就类似C++的指针!你赋来赋去,一直就只有一个DataTable,当然是那样的结果。
      

  5.   

    .net里除了值类型(int,bool....)其他类型的对象使用时都是对象的引用,要使用对象的副本,需要使用clone,或者完全生成新的对象,再将数据赋值进去
      

  6.   

    .net里除了值类型(int,bool....)其他类型的对象使用时都是对象的引用,如我们经常使用的session也是这样,在一个页面里写入一个对象,在另一个页面读取其数据,读取写入操作的都是同一个对象.
    若要使用对象的副本,需要使用Copy
    DataTable table = pdTbl.Copy();