我有这么一段代码:
datatable pv=DataSet.Table["a"];
datagirdview1.datasource=pv;
pv=DataSet.Table["b"];
comboBox1.datasource=pv;现改为:
datatable pv=DataSet.Table["a"];
dataview dv=new dataview(pv);
datagirdview1.datasource=dv;
pv=DataSet.Table["b"];
dv=new dataview(pv)
comboBox1.datasource=dv;我的问题是第一段code中设置datasoruce后,实际上控件已经和表绑定,因此,变量pv再次赋值不影响绑定。不知道我这样理解的有没有错?
我的第二段code中pv是不是也是这种情形,这样还有一个问题就是,我的datatable有name因此我可以每次覆盖,而dataview没有,那么每次dv=new dataview(pv)就创建一个新的dataview,那岂不是内存越来越多,如何才能覆盖dataview,或回收后再建?

解决方案 »

  1.   

    第一个问题你试一下不就知道了?
    第二个问题你可以用pv.DefaultView代替new DataView(),就不会象你说的那样无限创建了
      

  2.   

    up,新建dataview的话就跟原来的datatable没关了,否则的话pv改变,绑定的控件也会变。
      

  3.   

    LZ  记住这样一点 控件绑定数据的本质其实是DataView 即使是DataTable绑定归结还是DataView的绑定
    另外创建DataView的方式可以这样
    DataView view=new DataView(datatablename)
    或者DataView view=datatablename.DefauleView在创建之前可以先这样声明对象
    DataView view=null 再实例化
    结束之后不需用时可以讲表内存释放 DataView=null 或者DataTable=null
    如果只是数据的清空可以 Datatable.Clear()
      

  4.   

    用for,close后再for,代码没必要写的那么死
      

  5.   


    为题在于DataView=null是不是把表上的所有dataview都清了?我只是想清其中一个。
      

  6.   

    LZ  记住这样一点 控件绑定数据的本质其实是DataView 即使是DataTable绑定归结还是DataView的绑定 
    另外创建DataView的方式可以这样 
    DataView view=new DataView(datatablename) 
    或者DataView view=datatablename.DefauleView 在创建之前可以先这样声明对象 
    DataView view=null 再实例化 
    结束之后不需用时可以讲表内存释放 DataView=null 或者DataTable=null 
    如果只是数据的清空可以 Datatable.Clear() 
      

  7.   

    谢谢,我还是有些不太明白。举个例子:
    我用DataView view=new DataView(datatablename) 创建了一个dataview,然后绑定 
    DataView view=new DataView(datatablenameA);
    datagridview1.datasoruce=view;
    view=new DataView(datatablenameB);
    datagridview2.datasoruce=view;以上代码是可以运行的,datagridview2绑定到由datatablenameB创建的视图,并不影响到datagirdview1绑定的由datatablenameA创建的视图。我认为语句datagridview1.datasoruce=view;运行后,datagridview1已经绑定到视图上,因此view再次赋值不影响datagridiew1的数据。因此就存在这样一个问题:我不知道由语句DataView view=new DataView(datatablenameA);创建的视图能够存活多久?因为它已经和变量无关了,如果我在另外一个form中也调用了由datatablenameA创建的视图,这使得我无法对datatable上的视图全部清除,因此我如何清除由datatablename1生成的视图view?谢谢!
      

  8.   

    也就是我认为
    DataView view=new DataView(datatablename) 

    view=null并不能清除说创建的dataview,dataview仍然创造内存不知道是不是?