如何基于文本长度计算datagridview行高

时间:2019-07-08 22:34:30

标签: .net winforms datagridview

具有datagridview,一列启用了自动换行。将AutoSizeRowsMo​​de设置为None以外的任何值都会导致网格花费很长时间来填充。绑定或未绑定10行或100行无关紧要。我的网格未绑定。 我想循环遍历该行,并根据换行列中文本的长度计算每行的行高。 如何计算自动换行产生的行数?还是可以使用文本的长度并根据其他变量计算行高?

其他帖子建议使用DataGridViewAutoSizeRowsMo​​de.DisplayedCells。那没有帮助。

2 个答案:

答案 0 :(得分:0)

Dim strTemp As String
Dim szTemp As SizeF
Dim intLineHeight As Int32
Dim gphicsTemp As Graphics
gphicsTemp = Graphics.FromHwnd(Me.Handle)
Dim baselineSize As SizeF = gphicsTemp.MeasureString("SAMPLE ROW", dgvDeals.Font)
Dim intPadding As Int32 = 6
For Each dgvrTemp In dgvDeals.Rows
If dgvrTemp.Cells("CD_DESCRIPTION").Value.ToString.Trim <> "" Then
    strTemp = dgvrTemp.Cells("CD_DESCRIPTION").Value.ToString
    szTemp = gphicsTemp.MeasureString(strTemp, dgvDeals.Font, dgvrTemp.Cells("CD_DESCRIPTION").Size.Width)
    intLineHeight = Math.Round((szTemp.Height / baselineSize.Height))
    dgvrTemp.Height = (Math.Round(baselineSize.Height) * intLineHeight) + intPadding
End If
Next

答案 1 :(得分:0)

最简单的方法是使用GetPreferredHeight

For iRow As Int32 = 0 To dgvItems.Rows.Count - 1

    dgvItems.Rows(iRow).Height = 
dgvItems.Rows(iRow).GetPreferredHeight(iRow, DataGridViewAutoSizeRowMode.AllCells, True)

Next