下面是个绑定“ComboBox”控件的代码。
            //绑定商品名称
            string sql_spmc = "select * from spglb";
            DataTable dt = access.FillDt(sql_spmc);
            SPMC.DataSource = dt;
            SPMC.DisplayMember = "spmc";
            SPMC.ValueMember = "spmc";现在正常显示,但是如果在下面加上一句:dt.Dispos()则不能帮定ComboBox控件,请问这是为什么?理论上绑定好了应该可以释放了才对啊?其实绑定“DGV”时也是这种情况

解决方案 »

  1.   

    DataTable是对数据库的内存映射
      

  2.   

    DataGridView.DataSource 引用了DataTable就不会释放。
    直到Form被关闭。
    垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用的对象的内存
      

  3.   


    DataGridView.DataSource=dt;
    SPMC.DataSource = dt;
    SPMC.DisplayMember = "spmc";
    SPMC.ValueMember = "spmc";
    dt.Dispose();
    当执行完
    dt.Dispose();可以断点看一下
    dt对象本身没有立即被垃圾回收器回收,而是他们相对于两个控件的引用关系发生了变化
    这时的DataGridView.DataSource还是引用dt,而SPMC.DataSource已经为null了这里问一下如梦大哥,为什么会有这样的不同呢?
      

  4.   

    DataSource 绑定数据源就是他们统一起来了,一个改变都改变.这是绑定,如果想释放的话就对数据源进行实例化(new).或是设置为null,都可以的.你的意思是要断开绑定?