行の場合、DataGridView.AutoSizeRowsModeプロパティ
列の場合、DataGridView.AutoSizeColumnsModeプロパティで
指定できますが、これらのプロパティでNone以外の値指定すると、セルの値が変わったときに自動的に変更になるので、表示データが多い場合、パフォーマンスがよろしくありません。また、このプロパティを指定するとユーザが手動で列や行の幅を変更することができなくなります。
ということ、DataGridViewには1回だけサイズ自動調整する
DataGridView.AutoResizeRows()
DataGridView.AutoResizeColumns()
というメソッドが用意されてます。
今回はこれにやられました。
メインのフォームでデータ作成し、サブフォームのDataGridVewで表示するという流れです。
最初こんな感じで書いていました。サブフォーム名は frmDataExt と、DataGridViewはVSのデザイナで作成してます。
'結果表示するフォームの生成と設定 Dim frmDataExt As New frmDataExtract() 'DataGridView上の各種設定 frmDataExt.dgvExtract.DataSource = dtbl 'DataTableをデータソースに設定 '行の高さを1回だけ自動的に調整する frmDataExt.dgvExtract.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells) '結果表示するフォームを表示 frmDataExt.ShowDialog()
しかし、これだとうまくいきませんでした。行の高さが全然自動的に調整されていないのです。
それで、いろいろ試してみた結果、フォームが表示されないと AutoResizeRows() は使えないということがわかりました。
具体的なタイミングは未調査ですが、サブフォームの LoadイベントでAutoResizeRows()を処理すると自動的に調整されました。
'親フォーム側 '結果表示するフォームの生成と設定 Dim frmDataExt As New frmDataExtract() 'DataGridView上の各種設定 frmDataExt.dgvExtract.DataSource = dtbl 'DataTableをデータソースに設定 '結果表示するフォームを表示 frmDataExt.ShowDialog()
'サブフォーム側 Public Class frmDataExtract 'Loadイベントに書くとうまくいった Private Sub frmDataExtract_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'グリッドの行の高さ自動調整 Me.dgvExtract.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells) End Sub End Class