在DataGridView中将最后一行设置为Frozen

时间:2014-06-18 13:10:54

标签: c# winforms datagridview

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

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

1 个答案:

答案 0 :(得分:2)

您使用的是DataGridviewRow.Frozen媒体资源:请参阅文档here

  

此属性可让您保留一行或多行重要内容   用户滚动DataGridView时的信息。 所有   冻结行上方的行也会被冻结。

这基本上意味着,如果你"冻结"最后一行,冻结行上方的所有行也被冻结;意思是滚动条得到,因为你冻结了最后一行,删除了。

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


this document中记录了一种解决方法。但是,它是在VB中,所以你必须自己将它转换为C#。

实际上看得更远,我找到了this document,它在C#中有一个小例子。它似乎有错误,但可能会让你朝着你的目标前进。

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,则滚动条仍然可见。