在DataGridView中设置最后一行为冻结

本文关键字:一行 冻结 DataGridView 设置 最后 | 更新日期: 2023-09-27 18:09:13

我的网格目前有40行。一次只能显示20行,所以网格有一个滚动条。

我想冻结DataGridView的最后一行,但是滚动条消失了。如何解决这个问题?

在DataGridView中设置最后一行为冻结

您正在使用DataGridviewRow.Frozen属性:请参阅这里的文档。

此属性允许您保留一行或几行重要的当用户滚动到DataGridView时,在适当的位置显示信息。所有

这实际上意味着,如果你"冻结"最后一行,冻结行上面的所有行也被冻结;这意味着滚动条因为你冻结了最后一行而被移除。

回答你的问题;您不能单独"冻结"最后一行,这不是Frozen属性的性质。


在本文档中有一个解决方法。但是,它是用VB编写的,所以你必须自己把它翻译成c#。

实际上进一步寻找我发现这个文档,其中有一个c#的小例子。它似乎有bug,但可能会让你朝着你的目标前进。

public partial class MyDataGridView : DataGridView
{
    public StatusStrip Footer
    {
        get { return (StatusStrip)this.Controls["Footer"]; }
    }
    private bool _footerVisible;
    [Browsable(false)]
    ///
    /// Sets or Gets the value specifying if a footer bar is shown or not
    ///
    public bool FooterVisible
    {
        get { return _footerVisible; }
        set
        {
            _footerVisible = value;
            this.Controls["Footer"].Visible = _footerVisible;
        }
    }
    public MyDataGridView()
    {
        InitializeComponent();
        StatusStrip footer = new StatusStrip();
        footer.Name = "Footer";
        footer.ForeColor = Color.Black;
        this.Controls.Add(footer);
        ((StatusStrip)this.Controls["Footer"]).Visible = _footerVisible;
        ((StatusStrip)this.Controls["Footer"]).VisibleChanged += new EventHandler(RDataGridView_VisibleChanged);
        this.Scroll += new ScrollEventHandler(RDataGridView_Scroll);
        _footerItems = ((StatusStrip)this.Controls["Footer"]).Items;
    }
}

上述代码可以用作用户控件,并继承自DataGridView。然后添加一个页脚,您可以用您选择的最后一行填充。如果您将所有行的Frozen属性设置为False,则滚动条仍然可见。