【问题标题】:How to place two DatagridView vertically in Winform?Winform中如何垂直放置两个DatagridView?
【发布时间】:2015-10-15 16:04:51
【问题描述】:

我想在 Winform 中垂直放置两个 DataGridView(自动绑定)及其标签。所以它应该适合区域并且看起来不错。

它应该按以下顺序显示: 数据网格视图标签1 数据网格视图1 数据网格视图标签2 数据网格视图2

它应该自动调整滚动和最大化行为。我尝试过使用 Panels 和 FlowLayoutPanel 但没有成功。我知道如何在 WPF 中使用相对布局,但不知道如何在 winform 中进行。

【问题讨论】:

标签: c# winforms datagridview


【解决方案1】:

问题似乎主要在于保持两个 DGV 的大小同步。

为此,您可以使用SplitContainer,它会自动执行此操作:

  • 设置Orientation = Orientation.Horizontal
  • 设置IsSplitterFixed = true
  • FixedPanel 设置为None
  • 将其Anchors 设置为您喜欢的,可能是所有四个方面
  • 把你的两个DataGridViews放在两个SplitContainer.Panels
  • 两个 DGV 到 Dock=Fill

现在两个 DGV 将保持相同大小,平等共享 SplitContainer 大小,或者准确地说是原始比例。

如果您希望 Labels 位于每个 DGV 上方,只需将它们放在适当的位置,但在 Dock=Fill 之外选择四个 Anchors 用于 DGV。

如果您希望您的Buttons 保持在SplitContainer 之下,简单的Anchoring 可能会这样做..

请注意,通过嵌套更多这样的SplitContainers,您可以保持三个或更多Controls 以相同的大小同步..

【讨论】:

  • 您的解决方案没有考虑标签以及底部的导航按钮。
  • 确实如此,原因是我不知道他想要什么。当然,一旦定义它就很容易适应。也许有第二个SplitContainer,其中按钮位于下部,然后是FixedPanel。我不知道这些标签实际上在哪里.. - 但我已经添加了一些评论。
  • 有很多解决方案。此外,最好将按钮放在面板中并将面板停靠在底部,将标签设置为停靠在顶部,将网格设置为停靠填充。 +1
  • 是的,有很多方法,但自动保持两个控件同步的方法不多。将按钮放在面板中似乎是一种自然的改进..
  • @TaW 感谢您的回复,我的要求是不要让两个 DGV 的大小相同,它应该根据动态大小划分空间,例如 DGV1 可以有 50 行,DGV2 可以只有 5 行。在这种情况下,我希望两个 DGV 都应该显示,但大部分空间应该被 DGV1 占用。这个比率可能会根据各个行动态变化。我不知道通用解决方案是否可行??
【解决方案2】:

我使用 TableLayoutPanel 控件解决了这个问题。 创建了四行:

Row1:SizeType:绝对值:20

Row2:SizeType:AutoSize

Row3:SizeType:绝对值:20 Row4:SizeType:AutoSize

并且 DatagridView1.AutoSize = true; DatagridView2.AutoSize = true;

tableLayoutPanel1.AutoScroll=true;

现在,它会根据 DataGridViewRows 的不同大小自动调整滚动和最大化行为

感谢 LarsTech 和 TaW 等人的支持!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2020-06-21
    • 2011-04-29
    • 2013-08-16
    • 2018-09-08
    相关资源
    最近更新 更多