我的网格目前有40行。一次只能显示20行,因此网格有一个滚动条。
我想冻结DataGridView的最后一行,但滚动条消失了。怎么解决这个问题?
答案 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,则滚动条仍然可见。