2017-09-20 25 views
0

我正在使用C#编写一个表单应用程序,并且我一直使用的宽度为DataGridView。 我想实现的是:C#:填充DataGridView字段的宽度并在需要时添加滚动条

  1. 与数据通过适当地调整列大小完全充满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

现在我在如何实现这两个要求的损失。一种方式只满足一个要求。有人可以请我提前一点如何满足这两个要求?谢谢!

+0

的可能重复的东西[水平滚动条消失设定的最后一列的大小,以填补](https://stackoverflow.com/questions/27863788/horizo​​ntal-scrollbar-disappear-setting-the-last-column- size-to-fill) – OhBeWise

回答

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; 
+0

谢谢,但示例程序中第3行的NewCol是什么? –

+0

对不起,应该是'myDataGridView.Colums [i]' – AgapwIesu