c#2005,datagridview拖动列的问题

时间:2022-09-28 15:47:01
用datagridview设计了一个表格,例如有A B C D E F G 共7列。
现在要实现,ABC3列是固定顺序的。DEFG4列是可以通过鼠标来拖动列到新的位置。
例如拖动A到B和C之间是不可以的。也就是表的左边是固定的ABC列,剩下的可以随意拖动。
DEFG可以通过鼠标拖动列标题为EDFG.

7 个解决方案

#1


补充一下:
不是在程序中用DISPLAYINDEX设定,
而是用鼠标来拖动。

#2


将前三个列的冻结属性设为true不久可以了么?
v2005用得不多,只是用过该冻结属性

#3


DataGridViewColumn OneColumn = new DataGridViewColumn();
 OneColumn.DisplayIndex = ColInfo.DisplayIndex;
 OneColumn.Frozen = ColInfo.Frozen;

我试过了,用冻结的方法,可以使得在拖动滚动条的时候,这ABC3列始终显示出来。
但是,ABC还是可以互相拖动,DEFG可以互相拖动,并且ABC不能拖到CDEF中。

但不是我想要的。我要的是ABC是固定在左边的3列,顺序不能变。DEFG次序可以变。

#4


那就用两个DataGrid并列来显示...

#5


这样的话,用滚动条来滚动时不太好看了,并且对列数据排序后,显示都比较麻烦。

如果这个控件真的没有这个属性,我只能想其他办法了。

谢各位了。

DELPHI中有列控件可以固定列,不能移动,这个控件没有,太失望了。

#6


你可以尝试在datagridview的mousedown事件里用HitTest(e.X,e.Y)检查鼠标按下的位置,判断如果在A,B,C三个列的列头,那么:
设定datagridview的AllowDrop属性为false,否则为true
或者通过别的方式控制拖拽事件

#7


自己解决了,公布一下.

其中有一个属性AllowUserToOrderColumns,是否允许用户拖动列.

当鼠标按下时,判断是否在ABC3列的位置内时设置为false.

#1


补充一下:
不是在程序中用DISPLAYINDEX设定,
而是用鼠标来拖动。

#2


将前三个列的冻结属性设为true不久可以了么?
v2005用得不多,只是用过该冻结属性

#3


DataGridViewColumn OneColumn = new DataGridViewColumn();
 OneColumn.DisplayIndex = ColInfo.DisplayIndex;
 OneColumn.Frozen = ColInfo.Frozen;

我试过了,用冻结的方法,可以使得在拖动滚动条的时候,这ABC3列始终显示出来。
但是,ABC还是可以互相拖动,DEFG可以互相拖动,并且ABC不能拖到CDEF中。

但不是我想要的。我要的是ABC是固定在左边的3列,顺序不能变。DEFG次序可以变。

#4


那就用两个DataGrid并列来显示...

#5


这样的话,用滚动条来滚动时不太好看了,并且对列数据排序后,显示都比较麻烦。

如果这个控件真的没有这个属性,我只能想其他办法了。

谢各位了。

DELPHI中有列控件可以固定列,不能移动,这个控件没有,太失望了。

#6


你可以尝试在datagridview的mousedown事件里用HitTest(e.X,e.Y)检查鼠标按下的位置,判断如果在A,B,C三个列的列头,那么:
设定datagridview的AllowDrop属性为false,否则为true
或者通过别的方式控制拖拽事件

#7


自己解决了,公布一下.

其中有一个属性AllowUserToOrderColumns,是否允许用户拖动列.

当鼠标按下时,判断是否在ABC3列的位置内时设置为false.