强制 DataGridView 填充 SplitContainer 中的可用空间

Posted

技术标签:

【中文标题】强制 DataGridView 填充 SplitContainer 中的可用空间【英文标题】:Forcing DataGridView to fill available space in SplitContainer 【发布时间】:2016-10-17 15:30:22 【问题描述】:

我正在编写一个 Windows 窗体应用程序,该应用程序在三个可用区域中的两个区域中使用两个嵌套的 SplitContainer 和 DataGridView,如下图所示。我已经连接了设置和表单初始化,以允许用户禁用多窗格格式,以支持仅包含第一个 DataGridView 的单窗格视图。

这里的主要问题(正如我将在(希望)足够的深度中解释的那样)是,如果其他面板被隐藏,DataGridViews 不遵守 SplitContainer 面板的约束。

这里,红色轮廓表示父SplitContainer,在引用中适当地称为masterSplitContainer。蓝色轮廓表示子SplitContainer,标题为bottomSplitContainer,占据masterSplitContainer.Panel2 的位置。

DataGridViews 占据了masterSplitContainer.Panel1bottomSplitContainer.Panel1 区域,到目前为止我已经设计了初始化代码,以便程序考虑三种可能性:

    用户想要单窗格视图/UI布局,从而使masterSplitContainer.Panel1占据masterSplitContainer的整个区域。 用户启用了双窗格布局,但删除了底部容器的 Panel 2。 用户想要所有三个面板。

正如我仅使用 SplitContainers 构建的测试表明的那样,第二个 SplitContainer(孩子)达到了预期的目的,并且对这种安排非常满意,没有任何障碍。但是,当测试启用单窗格视图的设置时,结果如下:

masterSplitContainer.Panel2 被以下代码禁用:

masterSplitContainer.Panel2Collapsed = true;
masterSplitContainer.Panel2.Hide();

在这种情况下,我希望 DataGridView 承担 masterSplitContainer 的完整操作区域,而不是保留其预定义的边界,因为这是我添加部件时面板拆分器所在的位置而设置的。

对于消除过程,放置在子 SplitContainer(即bottomSplitContainer.Panel1)中的第二个 DataGridView 也会发生同样的事情 - 它也不服从其封闭区域。

到目前为止,我已经对此进行了一些阅读,看起来这可能是一个锚定问题,但我对 .NET 和 Windows 窗体的经验非常有限,所以这可能需要一点点手-持有或指出明显的错误。

另外,如果你们都需要更多实际的代码参考,我很乐意应要求发布表单类。

【问题讨论】:

DGVs Dock=Fill 吗?嵌套的 SpliContainer Dock=Fill 吗? @TaW 进行这两项更改会导致元素按预期执行。 制作一个控制线很简单。提示:通过添加一个或多个固定拆分容器来完成多个相同的操作.. 【参考方案1】:

试试这个:

添加以下方法:

public static void DoubleBuffered(this DataGridView dgv, bool setting)
    
        Type dgvType = dgv.GetType();
        PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
            BindingFlags.Instance | BindingFlags.NonPublic);
        if (pi != null) pi.SetValue(dgv, setting, null);
    

这样称呼:

dataGridView1.DoubleBuffered(true);

dataGridView1 是您拆分面板中的那个。

【讨论】:

以上是关于强制 DataGridView 填充 SplitContainer 中的可用空间的主要内容,如果未能解决你的问题,请参考以下文章

在线程中填充 DataGridView

DataGridVIew 填充匿名类型,如何过滤?

使用 sql 语句从第二个 datagridview 填充 DataGridView

用 MySQL 数据填充 Datagridview

以编程方式将新列添加到 DataGridView(填充有 DataTable 的 DataGridview)

DataGridView 自动调整和填充