问题描述
如果我在的构造函数里面绑定了datagridview数据源。那么我把这个组件从工具箱拖入form1算构造一次了吗?因为form上的绑定源的列被创建了,在form的设计器里面生产了相关代码。然后我启动F5是不是又构造了一次?这样数据源相当于绑定了2次?我组件拖入FORM的时候,表的列就加载进datagridview了,我启动F5的时候,又加载了一次这样表的列就重复了一次。请教怎么解决
解决方案
解决方案二:
我组件拖入FORM的时候,表的列就加载进datagridview了,我启动F5的时候,又加载了一次这样表的列就重复了一次。没这种可能吧..
解决方案三:
引用1楼luochanghua的回复:
我组件拖入FORM的时候,表的列就加载进datagridview了,我启动F5的时候,又加载了一次这样表的列就重复了一次。没这种可能吧..
因为我绑定数据源在构造函数里面啊
解决方案四:
就一次,你那个肯定是你没有清除列吧,有固定的列,代码中又增加了列?
解决方案五:
引用3楼bdmh的回复:
就一次,你那个肯定是你没有清除列吧,有固定的列,代码中又增加了列?
当我拖入dgv的时候,因为绑定源在构造函数里面,所以这个时候列就被创建了,在Designer.cs代码里面可以看到拖入组件的时候列就生产了。然后F5启动的时候又创建了一次,这样就把同一张表绑定了2次
解决方案六:
在设计器里把组件拖入窗体的时候,并不是创建了一次,而是设计器自动为你生成了创建组件的代码,而当执行到这段代码时(按F5),组件才会被创建,因此不存在两次创建的问题。如果有多余的列或其它组件被生成,那可能是设计器出了问题(我碰到过),你可以试着把组件删掉再重新放一个,或者看一下.designer.cs文件。
解决方案七:
引用5楼effun的回复:
在设计器里把组件拖入窗体的时候,并不是创建了一次,而是设计器自动为你生成了创建组件的代码,而当执行到这段代码时(按F5),组件才会被创建,因此不存在两次创建的问题。如果有多余的列或其它组件被生成,那可能是设计器出了问题(我碰到过),你可以试着把组件删掉再重新放一个,或者看一下.designer.cs文件。
[size=16px]问题是这样的,是因为我构造dgv的构造函数里面绑定了数据源,所以执行newdgv()的时候,完毕了就已经有数据源的列了,然后开始执行designer.cs,因为设计器在我把组件拖入窗体的时候生产了一些代码,所以会执行Columns.AddRange,这样就是2倍的列数据。请教怎么解决[/size]
解决方案八:
这句话我不是很明白:“是因为我构造dgv的构造函数里面绑定了数据源”。你的拖到窗体上的组件是原生的DataGridView控件,还是自己从DataGridView派生的一个类?建议你把你构造dgv的构造函数以及设计器生成及初始化dgv的代码帖出来,有助于解决问题。如果是在派生类的构造函数里直接绑定数据源可不是什么好主意。通常情况下,为了避免设计器为控件属性的默认值生成代码,可以在该属性上添加DefaultValueAttribute,对于集合我还真不知道应该怎么做。
解决方案九:
引用7楼effun的回复:
这句话我不是很明白:“是因为我构造dgv的构造函数里面绑定了数据源”。你的拖到窗体上的组件是原生的DataGridView控件,还是自己从DataGridView派生的一个类?建议你把你构造dgv的构造函数以及设计器生成及初始化dgv的代码帖出来,有助于解决问题。如果是在派生类的构造函数里直接绑定数据源可不是什么好主意。通常情况下,为了避免设计器为控件属性的默认值生成代码,可以在……
在派生类的构造函数里直接绑定数据源是这个原因。问题现在是这样:因为我构造dgv的构造函数里面绑定了数据源,所以执行newdgv()的时候,完毕了就已经有数据源的列了,然后开始执行designer.cs,因为设计器在我把组件拖入窗体的时候生产了一些代码,所以会执行Columns.AddRange,这样就是2倍的列数据。请教怎么解决
解决方案十:
我大概没看明白不过你试试datagridview.AllowUserToAddRows=false;
解决方案十一:
不对上面的写错了我记得应该有阻止自动生成列的属性,或者你把手动添加列的地方删了
解决方案十二:
引用8楼dionxu的回复:
在派生类的构造函数里直接绑定数据源是这个原因。问题现在是这样:因为我构造dgv的构造函数里面绑定了数据源,所以执行newdgv()的时候,完毕了就已经有数据源的列了,然后开始执行designer.cs,因为设计器在我把组件拖入窗体的时候生产了一些代码,所以会执行Columns.AddRange,这样就是2倍的列数据。
我能想到的有两个办法:1、如果你的派生类只是为了统一数据源的话,建议不要用派生类,直接用原生的DataGridView。可以写一个公用的方法来初始化数据源,然后在每一个用到这个数据源的地方调用此方法来初始化。2、仍旧在派生类里绑定数据源,但只在运行时绑定,而不在设计器中绑定。可以用DesignMode这个属性来判断当前是否处于设计模式下。这样做,在设计器里看不到列,而在运行时才能看得到。