我的MDI程序里面,我每次打开一个编辑子窗口f1,都会产生一个暂存的DataTable,
DataTable在ControlTableClass中产生,并且会初始化一些列,但是我要在其他class中都要调用该DataTable,方法是
1。如果采用ControlTableClass a =  new ControlTableClass(),就会重新产生DataTable,使原来的DataTable中的数据都没有了
2 如果是在ControlTableClass中将DataTable设置成static类型,我在打开第二个编辑窗口的时候,就会说该table中的一些列名重复。是因为内存中已经存在该table 大家帮我想想有什么办法解决?
 使我能顺利在各个class中调用ControlTableClass中的dataTable而不每次实例化它。谢谢

解决方案 »

  1.   

    初始化的时候传入DATATABLE吧
    DataTable _dataTable;
    public test(DataTable dt)  
    {
         InitializeComponent();
         _dataTable=dt;
    }
      

  2.   

    我class太多了
    这样我也试过,实在太麻烦了,一定有好的办法的,高手帮忙啊
      

  3.   

    初始化的时候检查DataTable,如果已经有数据则不再初始化该datatable
      

  4.   

    可以借鉴在VC++中的MFC编程中所提出的文档试图模式来解决此问题,在C#中可以建立一个独立的文档类,该类用来存储程序中需要用到的数据,如你这里的DataTable,然后在各个需要显示的地方(试图类,如各个窗口)使用文档类中的数据就可以了,对于文档类中的数据如DataTable在程序初始化的时候对其进行实例化便可,并不需要在各个界面中进行独立的初始化。你可以采用以上思想来解决此类问题。
      

  5.   

    上面的意思是将datatable设置成static类型,然后如果再打开一个子窗口不再实例化table,但是这样新打开的调用该table就会保留原来的数据,而我在新的字窗口中要重新用一个没有数据的datatable,烦啊~~~~~
      

  6.   

    在窗体中定义
    ControlTableClass a ;
    然后在需要编辑的地方:
    if a==null
      a=new ControlTableClass();
    然后操作表a就可以了。其实你要求的就是一个编辑子窗口f1的实例中包含一个表a就可以了
      

  7.   

    对阿,我在子窗口中就是这样实例化table的,但是我在其他class中也需要用到这个table以及在子窗口存入table的数据,除了用全局静态变量还有什么办法么?
      

  8.   

    单件模式啊单件模式构造函数中 先判断内存中有没有这个datatable的句柄,如果没有就初始化一个新的如果有就直接返回这个句柄就可以达到楼主的要求了
      

  9.   

    要不我还是设置static的table,在主窗口中去判断当前是那个字窗口,然后将数据邦定到table