在数据库中,有 表A(字段:name ,ClaAid)并事先添加两记录,name ,ClaAid 
                                                       name1  1
                                                       name2  2
在建一表 表B(字段:ClaAid(引用表A的ClaAid),sumry),有两记录----------ClaAid   sumry
                                                                       1   sumry1
                                                                       2   sumry2
在程序里建一对象private class ClaA   
                {
                   string name = "";
                   int ClaAid = -1;
                }
再建一TreeNode,加一根结点,TreeNode.Tag=ClaA一事例对象。将数据库记录(表A)读出,与是树上有两个子接点:name1,name2.当选中name1时,可以通过name1.Tag.ClaA.ClaAid读取表B中的关联记录,name2也一样。现在将表B里与 name1 关联的记录读出,并将该记录的ClaAid改为2,保存,发现此时
name1.Tag.ClaA.ClaAid = 2,原来时等于1的。然而我并没有改该Tag对象里的任何东西。关闭程序,重新运行程序,name1.Tag.ClaA.ClaAid又还原为原来正确的1.
这时怎么回事情呢?
我说明白了吗?
我的目的  不能修改树接点的tag.claA.ClaAid的值,我也不知道时什么原因修改了tag.claA.ClaAid的值

解决方案 »

  1.   

    存的时候,不要存对象,而要存对象的clone。不过你的类型要提供clone函数。
      

  2.   

    参看clone方法。
    http://blog.csdn.net/Knight94/archive/2006/06/04/772886.aspx
      

  3.   

    由于class定义的类型对象,在赋值操作时候,是传递对象引用。因此某处进行修改,最造成副本也进行修改了。
      

  4.   

    中间又很多片段没写出来
    先要 从数据库里读表A每读一条,创建一个ClaA对象,并将数据存入ClaA对象,然后将该对象加到树结构上(微软的标准TreeView)选中一个结点时,提取该结点Tag对象,读取tag.ClaAid值,通过tag.ClaAid读取表B里的相关记录读取以后 修改表B记录的ClaAid的值,保存。
    此时发现 被选中结点的tag.ClaAid也跟着变了而我并没有改他,树型图只在程序第一次加载时构造,以后再每动她,  但她却变了
      

  5.   

    确实是引用的问题,我没用 new
    非常感谢
    可以回家了
      

  6.   

    不解,我是再两个窗体操作里,难道第二个窗体里的对象还可以使用第一个窗体里的某个对象的一个int型的引用。而且 C#里,int不是引用地址吧
    但是 我使用 New以后就好了
    不解  不解 不解 
    感谢