解决 DataGridView - 防止滚动超出定义的行

tim8w

众所周知的成员
加入
9月8日,2020年
消息
86
编程经验
10+
我有一个DataGridView,具有定义了两行,大小,以便仅显示两行和没有背景(灰色区域)。 Scrollbars设置为"None"。当我用鼠标单击每个单元格时,一切都按预期工作。如果我标签或使用箭头键或以编程方式选择第二行的单元,则控制滚动并显示行两个和背景。我怎么能阻止这种情况发生?

dgvselect1.png


dgvselect2.png.
 
Solution
如果控制尺寸的高度太小以显示行,则可以提高高度,直到它完全适合您所需的行数。可以有多个可见行,但如果例如控件可以显示1.99行,那么它将在激活该行的最后一行之后显示0.99空的空间,如果它可以显示2个完整行,不会发生。您可以尝试在设计器中添加高度,直到它适合,或尝试这样的代码:
C#:
grid.Height = 2 + grid.ColumnHeadersHeight + grid.Rows[0].Height * 2;

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,901
地点
切萨皮克,va.
编程经验
10+
首先,如果您希望显示静态数据,我认为您正在使用错误的控制。更喜欢使用tablelayoutpanel而不是DataGridView。 DataGridView是指给用户提供类似体验的Excel或访问数据表。

接下来,您应该真正在WPF中做事,但基于您的其他线程,似乎您已经拥有了大型沉船成本。 WPF为您提供了更多的样式和控制控制行为选项。

使用WinForms DataGridView,我认为有方法可以告诉它它具有固定数量的行并禁用滚动,但我不会再回忆起。自从我必须使用WinForms,这已经是多年了,因为我把它视为eol。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
这不是我讨厌DGV控制的秘密,我从来没有喜欢过它,所以这里的可明智的贡献有限。 @jmcilkinney. 是这种控制的DGV大师。也许如果他有业余时间,他可以在上网时建议给你一些价值。但是你需要等待,因为他是我们所有人的不同时光。

我还在第二个建议用WPF通过Winforms。大多数潜水到应用程序开发的DEVS倾向于在WPF的类似WPF中倾向于简单的阻力和删除,因为简单起见,仅对后来的遗憾没有为他们的应用挑选更强大和现代的平台。如果它不到迟到,请考虑将您的应用程序移植到WPF。您还将找到使用绑定和额外的可自定义选项,以便在XAML中更轻松地使用。

虽然我不确定这对你有助于限制行,但你可以这样做,如此: 在.cs设计表单中添加C#中的DataGridView中的固定行数 这是否会有助于您的问题,我不确定,但你可以尝试。
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,160
地点
挪威
编程经验
10+
如果控制尺寸的高度太小以显示行,则可以提高高度,直到它完全适合您所需的行数。可以有多个可见行,但如果例如控件可以显示1.99行,那么它将在激活该行的最后一行之后显示0.99空的空间,如果它可以显示2个完整行,不会发生。您可以尝试在设计器中添加高度,直到它适合,或尝试这样的代码:
C#:
grid.Height = 2 + grid.ColumnHeadersHeight + grid.Rows[0].Height * 2;
 
解决方案

tim8w

众所周知的成员
加入
9月8日,2020年
消息
86
编程经验
10+
如果控制尺寸的高度太小以显示行,则可以提高高度,直到它完全适合您所需的行数。可以有多个可见行,但如果例如控件可以显示1.99行,那么它将在激活该行的最后一行之后显示0.99空的空间,如果它可以显示2个完整行,不会发生。您可以尝试在设计器中添加高度,直到它适合,或尝试这样的代码:
C#:
grid.Height = 2 + grid.ColumnHeadersHeight + grid.Rows[0].Height * 2;
约翰,
惊人的。我以为我有身高吧。我用代码片段,它像魅力一样工作!
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,160
地点
挪威
编程经验
10+
Great, and if you're binding data or adding rows at a later time, and want to size the grid before the rows are added, you can use grid.RowTemplate.Height instead of grid.Rows[0].Height.
 
最佳 底部