TIL

Today I Learned. 知ったこと、学んだことを書いていく

DataGridViewにList(Of クラス)の内容を表示する - VB.NET

DataGridViewにListの中身を表示したい時がある。一つ一つ行を追加しているとすごい時間がかかるため、これをやりたい。

でも、List(Of String)ではできないため、クラスを作らないといけないのが微妙。

ポイント

  • DataGridView.AutoGenerateColumns = Falseにすることで、DataSourceで設定したときに自動で列を追加されないようにする。
  • Columns.DataPropertyNameに表示したいプロパティ名を指定する。
  • DataGridView.DataSourceに表示したいListを設定する(※ Listの方は独自のクラスでないと無理っぽい)

以下が実際に試したソース

Form1にはDataGridView1というDataGridViewが配置してあるとする。

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        ' DataSourceの設定によって、自動で列が追加されないようにする
        DataGridView1.AutoGenerateColumns = False

        ' テキストボックス列の追加
        Dim col1 As New DataGridViewTextBoxColumn
        col1.Name = "id"
        col1.HeaderText = "ID"
        ' DataPropertyName でクラスに定義されているプロパティ名を指定する
        col1.DataPropertyName = "Id"

        DataGridView1.Columns.Add(col1)

        Dim col2 As New DataGridViewTextBoxColumn
        col2.Name = "name"
        col2.HeaderText = "NAME"
        col2.DataPropertyName = "Name"

        DataGridView1.Columns.Add(col2)


        ' 入れるテストデータの作成(実際にはSQLとかの結果から作成する?)
        Dim testList As New List(Of Test)
        testList.Add(New Test("1", "Taro"))
        testList.Add(New Test("2", "Jiro"))

        ' DataGridViewにバインド
        DataGridView1.DataSource = testList

    End Sub
End Class

Public Class Test

    Public Property Id As String
    Public Property Name As String

    Public Sub New(ByVal id As String, ByVal name As String)
        Me.Id = id
        Me.Name = name
    End Sub

End Class



参考文献