人気ブログランキング | 話題のタグを見る
(.Net)DataGridViewで列、高さ自動設定の注意。
行の場合、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

by jehoshaphat | 2008-12-02 17:54 | .Net開発


<< (VB.Net)DataGri... (HTML)JavaScrip... >>