如果我在的构造函数里面绑定了datagridview数据源。那么我把这个组件从工具箱拖入form1算构造一次了吗?
因为form上的绑定源的列被创建了,在form的设计器里面生产了相关代码。
然后我启动F5是不是又构造了一次?这样数据源相当于绑定了2次?我组件拖入FORM的时候,表的列就加载进datagridview了,我启动F5的时候,又加载了一次
这样表的列就重复了一次。请教怎么解决

解决方案 »

  1.   

    我组件拖入FORM的时候,表的列就加载进datagridview了,我启动F5的时候,又加载了一次
    这样表的列就重复了一次。
    没这种可能吧..
      

  2.   

    当我拖入dgv的时候,因为绑定源在构造函数里面,所以这个时候列就被创建了,在Designer.cs代码里面可以看到拖入组件的时候列就生产了。
    然后F5启动的时候又创建了一次,这样就把同一张表绑定了2次

      

  3.   

    在设计器里把组件拖入窗体的时候,并不是创建了一次,而是设计器自动为你生成了创建组件的代码,而当执行到这段代码时(按F5),组件才会被创建,因此不存在两次创建的问题。
    如果有多余的列或其它组件被生成,那可能是设计器出了问题(我碰到过),你可以试着把组件删掉再重新放一个,或者看一下.designer.cs文件。
      

  4.   

    [size=16px]问题是这样的,是因为我构造dgv的构造函数里面绑定了数据源,所以执行new dgv()的时候,完毕了就已经有数据源的列了,然后开始执行designer.cs,因为设计器在我把组件拖入窗体的时候生产了一些代码,所以会执行Columns.AddRange,这样就是2倍的列数据。
    请教怎么解决
    [/size]
      

  5.   

    这句话我不是很明白:“是因为我构造dgv的构造函数里面绑定了数据源”。你的拖到窗体上的组件是原生的DataGridView控件,还是自己从DataGridView派生的一个类?建议你把你构造dgv的构造函数以及设计器生成及初始化dgv的代码帖出来,有助于解决问题。如果是在派生类的构造函数里直接绑定数据源可不是什么好主意。通常情况下,为了避免设计器为控件属性的默认值生成代码,可以在该属性上添加DefaultValueAttribute,对于集合我还真不知道应该怎么做。
      

  6.   


    在派生类的构造函数里直接绑定数据源是这个原因。
    问题现在是这样:因为我构造dgv的构造函数里面绑定了数据源,所以执行new dgv()的时候,完毕了就已经有数据源的列了,然后开始执行designer.cs,因为设计器在我把组件拖入窗体的时候生产了一些代码,所以会执行Columns.AddRange,这样就是2倍的列数据。
    请教怎么解决
      

  7.   

    我大概没看明白不过你试试
    datagridview.AllowUserToAddRows=false;
      

  8.   


    我能想到的有两个办法:
    1、如果你的派生类只是为了统一数据源的话,建议不要用派生类,直接用原生的DataGridView。可以写一个公用的方法来初始化数据源,然后在每一个用到这个数据源的地方调用此方法来初始化。
    2、仍旧在派生类里绑定数据源,但只在运行时绑定,而不在设计器中绑定。可以用DesignMode这个属性来判断当前是否处于设计模式下。这样做,在设计器里看不到列,而在运行时才能看得到。