DataGridViewの行の高さを内容に合わせて変更し、なおかつ最小の高さも決めておきたい。


やりたいこと

DataGridViewの行の高さを内容に合わせて変更し、なおかつ最小の高さも決めておきたい。

困ったこと

dataGridView.AutoResizeRowsをAllCellsにすると、コラムの中の一番大きいコラムに合わせて行が変更されるが、最小の高さまでは決められない。MinimumHeightというプロパティもあるけど、これは逆に最大の高さになる感じ(名前が紛らわしい)。

解決方法

各行のセルで一番大きい行の高さを取得する。
以下の例では、行の最小値は50で、一番大きい行がそれ以下なら、50になる。

foreach(DataGridViewRow row in dataGridView.Rows)
{
    var cells = row.Cells.Cast<DataGridViewCell>();
    int maxHeight = cells.Max(n => n.PreferredSize.Height);

    row.Height = maxHeight > row.Height ? maxHeight : 50;
}

Heightではなく、PreferredSize.Heightにしている。heightだと内容に合わせたサイズではなくて、もともと行として決まっているHeightが取得されるのか。