とりこらぼ。

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

目次

Blog 利用状況

ニュース

プロフィール

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

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

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

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

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

今回はその4でどっかで書きますって書いてた部分を書こうかなと思います。それは

さて、どんなオブジェクトがリストとしてバインディング可能なのでしょうか?なんとなく、配列とか、コレクションとかがイメージできますが、一般的には IList インターフェイス か IListSource インターフェイスをサポートしていることが必要なようです。(どっかで書きますが、例外もあります。

でした。といっても「うわー!すっごい例外だね!!」ってワケではなくて、ちょっとした小咄程度です。

今回エントリで使用するクラスは、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)

この BindingSource クラスを使用すると、

何でもできちゃう気がするのですよ。(気のせいかもしれません。)

ええ、いろいろやってくれますよ。BindingSource クラスって。たとえば、

IEnumerable インターフェイスしか実装してなくてもバインドしたげるよ♪

MSDN:IEnumerable インターフェイス(http://msdn2.microsoft.com/ja-jp/library/system.collections.ienumerable(VS.80).aspx)

って、感じです。ちょっくらやってみます。

まず、最初に Visual Studio 2005 を使用して Visual Basic で WindowsApplication プロジェクトを作成します。プロジェクト名は「WindowsApplication1」でいいです。するとご存知のとおり、Form1 クラスの作成までやってくれますね。その勝手に出来上がった Form1 に ComboBox を配置しておきます。(ComboBox1 でいいですよ。)

んでもって、以前使用した WankumaEntertainer クラスを用意します。

Public Class WankumaEntertainer


    Private _name As String = String.Empty
    Public Property Name() As String         Get             Return _name         End Get         Set(ByVal value As String)             _name = value         End Set     End Property

    Public Sub New()
    End Sub

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

End Class

次に、IEnumerable インターフェイスを実装した以下のクラスを用意します。

Imports System.Collections
Imports System.Collections.Generic


Public Class WankumaEntertainerEnum     Implements IEnumerable

    Private _entertainers As List(Of WankumaEntertainer)

    Public Sub New()
        Me._entertainers = New List(Of WankumaEntertainer)
    End Sub

    Public Sub Add(ByVal entertainer As WankumaEntertainer)
        Me._entertainers.Add(entertainer)
    End Sub
    Public ReadOnly Property Count() As Integer         Get
            Return Me._entertainers.Count()         End Get     End Property

    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
        Return Me._entertainers.GetEnumerator()
    End Function

End Class

内部で List(Of WankumaEntertainer) なフィールドを保持し、自分の IEnumerable.GetEnumerator は List(Of WankumaEntertainer) のGetEnumeratorを返して勘弁してもらおうというクラスです。後は要素を追加する Add メソッド と 要素数を取得する Count プロパティを書いておきました。

Imports System
Imports System.ComponentModel
Imports System.Windows.Forms


Public Class Form1

    Private _entertainerEnum As WankumaEntertainerEnum
    Private _entertainersBindingSource As BindingSource

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

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

End Class

では、さっそく実行してみましょう♪ どうですか?リストの項目にお三方のお名前が表示されていますよね。


すんげー!すんげー!


いや~、すばらしい!さ、これでIEnumerable インターフェイスを実装したクラスによるデータバインディングのおべんきょはおしまい、めでたしめでたし♪




って、当たり前ですけどこのままでは終わりませんよ。


ええ、そうです。ちょっとこんなの試してみてください。デザイナから Form1 にButton を一つ追加して(Button1 で。)Form1 のコードに以下のように書き加えます。

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

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

Button1 をクリックすると _entertainerEnum に 'とりこびと' という Name プロパティ に設定された WankumaEntertainer を追加するコードです。

ではでは、実行してみましょう。Button1 をクリックしてから ComboBox1 のリストを確認してみてください。


あれ?また 'とりこびと' いないYO!(まさか、このリストには入れない仕様なんじゃ・・・。)


そうです。_entertainerEnum に対して行った変更が反映されません。・・・困りましたね。



・・・と、困ったところで次回につ・づ・く♪





# セッションの用意しないと~。

投稿日時 : 2007年6月4日 10:51

Feedback

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

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

# FGNYUIHdrKib 2011/09/30 8:12 http://oemfinder.com

KoVeOJ I was looking for the report in Yandex and suddenly came across this page. I found a little information on my topic of my report. I would like more, and thanks for that..!

タイトル
名前
Url
コメント