とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

データバインディングのおべんきょ。その8。

前回までのあらすじ

ユー、BindingList でやっちゃいなよ。

さて、そんな感じで List クラスでのデータバインディングをほっぽりだしていましたが、

データバインディングのおべんきょ。その4。

に戻って、List クラスでバインドをやっちゃう方法を書きます。以前も書きましたが、List クラス単独では難しそうですので、ちょっくら調べてきました。

今回から数回のエントリで使用するクラスは、BindingSource クラスです。MSDNだと、こちら↓

MSDN:BindingSource クラス(http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.bindingsource(VS.80).aspx)

MSDN:BindingSource コンポーネント(http://msdn2.microsoft.com/ja-jp/library/h974h4y2(VS.80).aspx)

とりあえず、大きいクラスです。あ、気持ち的にですけどね。なので、今回はList クラスでバインドをやっちゃう部分だけ書きますね。

今回は見てもらったほうが分かりやすいので先にコードをすべてお見せします。

Imports System
Imports System.Windows.Forms


Public Class Form1

    Private _entertainerList As List(Of WankumaEntertainer)
    Private _entertainersBindingSource As BindingSource

    Public Sub New()
        InitializeComponent()
        Me.components = New System.ComponentModel.Container         Me._entertainersBindingSource = New BindingSource(Me.components)
    End Sub

    Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles MyBase.Load
        Me._entertainerList = New List(Of WankumaEntertainer)
        Me._entertainerList.Add(New WankumaEntertainer("ぽぴ王子"))         Me._entertainerList.Add(New WankumaEntertainer("アクア"))         Me._entertainerList.Add(New WankumaEntertainer("R・田中一郎"))
        Me._entertainersBindingSource.DataSource = Me._entertainerList
        Me.ComboBox1.DataSource = Me._entertainersBindingSource         Me.ComboBox1.DisplayMember = "Name"
    End Sub

    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        Me._entertainersBindingSource.Add(New WankumaEntertainer("とりこびと"))
    End Sub

    Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button2.Click
        For Each entertainer As WankumaEntertainer In Me._entertainerList
            If entertainer.Name = "とりこびと" Then
                entertainer.Name = "とりこびと(仮)"
            End If
        Next
        Me._entertainersBindingSource.ResetBindings(False)
    End Sub

End Class

さくっと内容を書きますと、

    Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles MyBase.Load

        Me._entertainerList = New List(Of WankumaEntertainer)
        Me._entertainerList.Add(New WankumaEntertainer("ぽぴ王子"))         Me._entertainerList.Add(New WankumaEntertainer("アクア"))         Me._entertainerList.Add(New WankumaEntertainer("R・田中一郎"))
        Me._entertainersBindingSource.DataSource = Me._entertainerList
        Me.ComboBox1.DataSource = Me._entertainersBindingSource         Me.ComboBox1.DisplayMember = "Name"
    End Sub

この部分、見た感じ _entertainerList と ComboBox1 の間に _entertainersBindingSource を挟み込んだ感じになっていますね。

    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click

        Me._entertainersBindingSource.Add(New WankumaEntertainer("とりこびと"))
    End Sub

_entertainerList に直接ではなく、_entertainersBindingSource に追加しています。

    Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button2.Click

        For Each entertainer As WankumaEntertainer In Me._entertainerList
            If entertainer.Name = "とりこびと" Then
                entertainer.Name = "とりこびと(仮)"
            End If
        Next
        Me._entertainersBindingSource.ResetBindings(False)
    End Sub

_entertainersBindingSource.ResetBindings メソッドの呼び出しです。これってその6でやった BindingList.ResetBindings と同じ感じっぽいですよね。

ではでは、実行してみてください♪Button1 をクリックして 'とりこびと' を追加し、Button2 をクリックして変更してみてください。でもってその後 ComboBox1 のリストを確認してみてください。


List クラスでもでけたでぇ!


どうやら BindingSource クラスは データとコントロールの仲を取り持ってくれているっぽいですね。データに直接ではなく、BindingSource に追加(Add メソッド)すると、ListChanged イベントを発生させてくれたり、ResetBindings メソッドをもってくれていたりととっても大助かりです。

理由あって IBindingList を実装できないクラスをバインドしたいときなど、このクラスでさくっとできそうですね。

投稿日時 : 2007年5月31日 10:19

Feedback

# データバインディングのおべんきょ。その12。 2007/06/04 16:33 とりこびと ぶろぐ。

データバインディングのおべんきょ。その12。

タイトル  
名前  
Url
コメント