Varias veces se ha tocado el tema a lo largo del tiempo de cómo adaptar el alto de las celdas de un Gridview a su contenido. Se han aportado varias soluciones y yo aporté en su día la mía, basada en la capacidad de hacer ese cálculo, pero para un Richtext, de la clase Font.
Sin embargo me he encontrado con que ninguna de esas soluciones me valía, bien por no trabajar con richtexts, bien por no ser demasiado fiables, así que he desarrollado otra basada en Text.
El código es una funcioncita llamada desde el evento Data del Gridview/TableView y es este:
Código:
Public Sub tv_Data(Row As Integer, Column As Integer)
'rellenamos las celdas con el contenido de los campos.
$res.MoveTo(row)
If $cfields[tv.columns[column].title] = Gb.Boolean Then 'los campos booleanos según el picture de la celda
If $res[tv.columns[column].title] = True Then
tv[row, Column].Picture = Stock["24/ok"]
Else
tv[row, Column].Picture = Null
Endif
Else
tv[row, column].Text = $res[tv.columns[column].title] 'Se guarda el texto en Text
If $completos Then
calcHeight(row, column) 'Se cambia el alto de la fila si es necesario.
Endif
Endif
End
Private Sub calcHeight(row As Integer, column As Integer)
Dim nAlto, nAncho, anchoLinea As Integer
Dim alineas, alinea As String[]
Dim linea As String
nAncho = tv.columns[column].W
alineas = Split(tv[row, column].text, "\n")
nAlto = alineas.Length
For Each linea In alineas
anchoLinea = tv[row, column].Font.TextWidth(linea)
If ancholinea > nAncho Then
If InStr(linea, " ") > 0 Then
nAlto += Int(ancholinea / nancho)
Endif
Endif
Next
If nAlto > 1 Then
tv.Rows[row].H = (nAlto * tv.Font.h) + tv.Rows.h
tv[row, column].WordWrap = True
Endif
End
Extraído del proyecto asociado a éste Video:
Espero que os sea útil.
Saludos