C#:填充 DataGridView 字段的宽度并在需要时添加滚动条

标签 c# datagridview scrollbar

我正在使用 C# 开发一个表单应用程序,并且一直被 DataGridView 的宽度所困扰。 我想要实现的是:

  1. 通过适当调整列大小,AND,用数据完全填充 DataGridView 水平字段
  2. 如果更多列需要更多空间,请添加滚动条。

问题是,我不确定表中有多少列可供读取数据。 我认为我已经通过以下代码实现了要求 1 和 2:

for(int i=0; i<myDataGridView.Columns.Count; i++){
    myDataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}

但是,我意识到这并不能满足要求2。在需要更多列空间的地方,无法添加滚动条。如果列数多于某个值,则会隐藏部分列和数据单元格。如下图所示,关系列的“p”被隐藏并且没有滚动条:enter image description here

经过一番努力,我注意到以下代码成功添加了滚动条:

for(int i=0; i<myDataGridView.Columns.Count; i++){
    myDataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}

但是,现在这段代码不能满足我的第一个要求。如果需要更多空间容纳更多列,它会添加一个滚动条,但如果只有几列,它会留下未使用的区域,如下图所示(背景色为黑色): enter image description here

现在我不知道如何实现这两个要求。一种方法只能满足一种要求。有人可以提前告诉我如何满足这两个要求吗?谢谢!

最佳答案

您需要设置每列的填充权重,并将其自动调整大小模式设置为Fill,并设置它们的最小宽度,这样无论您有多少列或多窄,它们都不会被迫适应用户制作窗口。

    myDataGridView.Columns[i].FillWeight = GetFillWeight(myDataGridView.Columns[i].Name);
    myDataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
    myDataGridView.Columns[i].MinimumWidth = (int) myDataGridView.Columns[i].FillWeight;

如果你设置了列的最小宽度,并且这些宽度加起来超过了gridview的宽度,那么gridview将获得一个滚动条。

我建议设置 FillWeight,你有一个函数,它实际上根据它是什么列进行不同的设置。类似的东西

    private float GetFillWeight(string FieldName)
    {
        switch (FieldName)
        {
            case "FirstName":
            case "LastName":
            case "City":
                return 300;
            case "Sex":
                return 150;
            case "Age":
                return 100;

关于C#:填充 DataGridView 字段的宽度并在需要时添加滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46330106/

相关文章:

c# - 如何访问注册表并循环访问 C 中的键(提供的示例 C# 代码)?

c# - 禁用除滚动之外的 DataGridView

sql-server - vb.net SQL Server “Incorrect Syntax near' ='.”

c# - 如何判断 datagridview 列是图像列还是复选框列?

html - 如何删除溢出引起的滚动条?

java - 当我们按下键盘上的 TAB 按钮时,如何使滚动 Pane 的滚动条随光标自动移动?

c# - WPF 一个属性的多个绑定(bind)

c# - 如何解决 Windbg 上显示的这个错误?

wpf - 如何在 WPF 数据网格上启用滚动条/滚动

c# - 选择带有两个下拉列表的选择