DataGridView可调整列宽,但最后一列无法调整更大?

6
对于 c = 0 到 grd.Columns.Count - 1
    grd.Columns(c).Resizable = DataGridViewTriState.True
下一步 c

这使得我的DataGridView中的所有列都可以调整大小,除了最后一列。为什么? 我 可以 得到可调整大小的小鼠标指针...但你只能让列变得 更小,永远不能 更宽

(如果我尝试使用VB.net IDE将所有列设置为可调整大小,会出现相同的问题)

我在这里做错了什么?我不应该能够调整我想要的 任何 列的大小吗?

6个回答

0

你不能使最后一列变宽,因为它已经填满了控件中所有可用的空间!

与中间的其他列不同,它们只是从右侧的列中窃取空间,而最后一列右侧没有任何列可以窃取空间。由于它无处可去,控件会阻止你调整最后一列的大小。


7
我们所见过的其他网格...你只需要选取任何列标题(包括最后一列)...然后向右滑动即可。我们并不想使网格变得更宽...或使列延伸超出网格的宽度...只是想让更宽。我认为这就是为什么在底部有一个水平滚动条的原因。不是吗? - Bonnie

0
你可能想要的是让用户调整最后一列的左边缘,而不是能够调整最后一列的右边缘。
一种选择是将最后一列的AutoSizeMode设置为“Fill”,其他列设置为其他模式,比如“Not Set”。这样做的话,当你调整倒数第二列的右边缘时,最后一列的左边缘会自动填充那个空间。

0
我遇到了同样的问题-无法调整DataGridView中的最后一列大小(可调整大小属性设置为“True”)。当我将“填充模式”设为“显示单元格”时,便出现了这个问题。当我将该设置改为“未设置”,则可以正常调整最后一列的大小。

1
我认为你没有理解最后一列无法调整大小的重点,因为网格控件本身在那里结束,没有空间可用于调整其大小。 - urbanhusky

0

这是一个老问题,但始终没有一个好的解决方案/答案,也可能永远不会有,但我会添加下一个最好的方法。我在搜索中遇到了这个问题,最后还是自己解决了,所以我为其他需要帮助的可怜人添加了一个答案。

不幸的是,DataGridView(DGV)的设计方式使得如果最后一列与控件本身的宽度相同(即当列比控件更宽时,会添加水平滚动条),则无法增加最后一列的宽度。如果总列宽未超过控件宽度,则可以将最后一列扩展到控件的宽度。因此,我是如何解决这个问题的:

  1. 将DGV放置在一个Panel内并填充整个面板。
  2. 在加载数据到DGV后,添加以下代码行(如果更名,请更改Panel1)

Panel1.AutoScrollMinSize = New Size(Integer.Parse(grd.Columns.GetColumnsWidth(DataGridViewElementStates.Visible)) + 200, 0)

我使用了+200,但你可以随意更改。这将使面板的最小滚动宽度比总列宽更宽,为您扩展最后一列提供额外空间。它还有一个好处,就是您不需要任何填充列,可能会破坏您的DGV。

  1. 如果你想全面考虑,那么你还应该将相同的代码行添加到grd_ColumnWidthChanged事件中,这样当你调整列大小时,面板会自动调整大小以保持更宽的宽度。您可能需要考虑隐藏/显示列等其他事件。

0
请按照以下方式尝试
grd.Columns(c).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
grd.Columns(c).AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader
grd.Columns(c).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
grd.RowsDefaultCellStyle.WrapMode = DataGridViewTriState.True
grd.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders

你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到更多关于如何撰写好回答的信息。 - undefined

-1
为什么不添加一个额外的列,并将其宽度设置为零,这样用户就可以调整您真正想显示的最后一列大小?我知道这有点笨拙!如果你在意的话,你可能会把额外的零长度单元格的可调整大小属性设置为false,以防止调整大小。但是对于我而言,这种方法并没有正常工作。要求将最后一个字段绑定到某个东西,否则,在添加虚假字段之前,它的前一个字段(也是我的最后一列)将不允许调整大小。
对我来说,问题是由于我更改了我的最后一列的AutoSizeMode属性为AllCells(它是一个DataGridViewTextBoxColumn),建议我采用修复措施来制作多列文本框。但是这并不是我需要它工作的方式,因此我选择了另一种方式(通过创建动态文本框并将其放置在需要的位置,但保留了AutoSizeMode = AllCells)。
当我将AutroSizeMode = NotSet设置为我的最后一列时,DataGridView现在允许用户调整此最后一列的大小!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接