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,然后同步它们的垂直滚动。现在我的问题是,有没有更好的方法可以做到这一点,如果没有,我应该更喜欢上面的哪一种?

或者换句话说:

如何在不冻结其他列的情况下冻结数据网格视图右侧的列?

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;