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

时间:2017-09-20 19:15:08

标签: c# datagridview scrollbar

我正在使用C#中的表单应用程序,并且我一直处于DataGridView的宽度。 我想要实现的是:

  1. 通过适当调整列大小 AND
  2. ,将DataGridView水平字段与数据完全一致
  3. 如果更多列需要更多空间,请添加滚动条。
  4. 问题是,我不确定表中存在多少列来读取数据。 我以为我已经用以下代码达到了要求1和2:

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

    但是,我意识到这不满足要求2.如果需要更多列空间,则无法添加滚动条。如果列数多于某个值,则会隐藏列和数据单元格的某些部分。如下图所示,关系列&#34; p&#34; 隐藏 AND 没有滚动条:{{3 }}

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

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

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

    现在我对如何实现这两个要求感到茫然。一种方式只满足一个要求。有人可以就如何满足这两个要求给我一些进展吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您需要设置每列的填充重量并将其自动调整模式设置为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;