Datagridview右侧冻结的列
本文关键字:冻结 Datagridview | 更新日期: 2023-09-27 18:25:30
我有一个列为的数据网格视图
col A | col B | ... | col M | col N
现在我想冻结右侧的col N
,这样当用户水平滚动数据网格视图时,。。。,M可以水平滚动,但col N
保持冻结。
现在我已经尝试为col N
设置Frozen
属性,但冻结列左侧的所有列也被冻结,这是我不希望的。我能想到的最好的方法是反转绑定到DataGridView的DataTable的列,这样它现在就有了的顺序
col N | col M | ... | col B | col A
然后从RightToLeft
中绘制DataGridView,使列再次反转,然后显示为
col A | col B | ... | col M | col N
我尝试过的另一个解决方案是提取必须冻结的最右边的列,并将它们放在右侧的不同DataGridView中,将其余列放在原始DataGridView,然后同步它们的垂直滚动。现在我的问题是,有没有更好的方法可以做到这一点,如果没有,我应该更喜欢上面的哪一种?
或者换句话说:
如何在不冻结其他列的情况下冻结数据网格视图右侧的列?
joe,在c#DataGridView
中,yo可以将列冻结在表的中间,仅在表的开头,就像在excel中一样。这是有道理的,因为如果我们冻结中间的柱子,我们就不知道它在侧面应该如何反应。我们需要两个不同侧面的滚动条吗?
从这里你可以看到这是c想要的行为:
当一列被冻结时,其左侧(或从右到左语言中的右侧)的所有列也会被冻结。冻结列和未冻结列组成两组。如果通过将AllowUserToOrderColumns属性设置为true来启用列重新定位,则用户无法将列从一个组拖动到另一个组
你可以试试这个:
var cols = dcols.ToArray();//dcols is the DataGridViewColumn List wait to add to DataGridView
if (cols.Last().Frozen)
{
_this.RightToLeft = RightToLeft.Yes;
cols = cols.Reverse().ToArray();
}
_this.Columns.AddRange(cols);
//Note that DataGridView does not allow freezing on both sides at the same time, or freezing some columns in the middle.
你会有问题的。滚动条将位于最右侧。然后,你可以尝试下面的代码:
//OnDataBindingComplete
if (this.Columns.Count > 0)
this.FirstDisplayedScrollingColumnIndex = this.Columns.Count - 1;