Per Mausklick bewerten und Feedback geben
MSDN
MSDN Library
.NET Entwicklung
.NET Framework 3.5
.NET Framework 3,5
BindingSource-Klasse
Alle reduzieren/Alle erweitern Alle reduzieren
Diese Seite ist spezifisch für
Microsoft Visual Studio 2008/.Net Framework 3.5

Andere Versionen stehen ebenfalls zur Verfügung für:
.NET Framework-Klassenbibliothek
BindingSource-Klasse

Aktualisiert: November 2007

Kapselt die Datenquelle für ein Formular.

Namespace:  System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)
Visual Basic (Deklaration)
<ComplexBindingPropertiesAttribute("DataSource", "DataMember")> _
Public Class BindingSource _
    Inherits Component _
    Implements IBindingListView, IBindingList, IList, ICollection,  _
    IEnumerable, ITypedList, ICancelAddNew, ISupportInitializeNotification, ISupportInitialize,  _
    ICurrencyManagerProvider
Visual Basic (Verwendung)
Dim instance As BindingSource
C#
[ComplexBindingPropertiesAttribute("DataSource", "DataMember")]
public class BindingSource : Component, 
    IBindingListView, IBindingList, IList, ICollection, IEnumerable, 
    ITypedList, ICancelAddNew, ISupportInitializeNotification, ISupportInitialize, ICurrencyManagerProvider
VisualC++
[ComplexBindingPropertiesAttribute(L"DataSource", L"DataMember")]
public ref class BindingSource : public Component, 
    IBindingListView, IBindingList, IList, ICollection, IEnumerable, 
    ITypedList, ICancelAddNew, ISupportInitializeNotification, ISupportInitialize, ICurrencyManagerProvider
J#
/** @attribute ComplexBindingPropertiesAttribute("DataSource", "DataMember") */
public class BindingSource extends Component implements IBindingListView, 
    IBindingList, IList, ICollection, IEnumerable, ITypedList, 
    ICancelAddNew, ISupportInitializeNotification, ISupportInitialize, ICurrencyManagerProvider
Jscript
public class BindingSource extends Component implements IBindingListView, IBindingList, IList, ICollection, IEnumerable, ITypedList, ICancelAddNew, ISupportInitializeNotification, ISupportInitialize, ICurrencyManagerProvider

Die BindingSource-Komponente erfüllt viele Zwecke. Zunächst vereinfacht sie das Binden von Steuerelementen an Daten in einem Formular durch Positionsverwaltung, Änderungsbenachrichtigung und andere Dienste zwischen Windows Forms-Steuerelementen und Datenquellen. Dies erfolgt durch Anfügen der BindingSource-Komponente an die Datenquelle mit der DataSource-Eigenschaft. In komplexen Bindungsszenarios können Sie optional die DataMember-Eigenschaft für eine bestimmte Spalte oder Liste in der Datenquelle festlegen. Anschließend binden Sie die Steuerelemente an die BindingSource. Die weitere Interaktion mit den Daten erfolgt über Aufrufe der BindingSource-Komponente. Beispiele zum Vereinfachen des Bindungsprozesses anhand der BindingSource finden Sie unter Gewusst wie: Binden von Windows Forms-Steuerelementen an DBNull-Datenbankwerte und Gewusst wie: Behandeln von Fehlern und Ausnahmen in Zusammenhang mit der Datenbindung. Die Navigation und Aktualisierung der Datenquelle erfolgt z. B. durch die Methoden MoveNext, MoveLast und Remove. Operationen, z. B. Sortierung und Filterung, werden mit der Sort-Eigenschaft und der Filter-Eigenschaft behandelt. Weitere Informationen zum Sortieren und Filtern mit der BindingSource finden Sie unter Gewusst wie: Sortieren und Filtern von ADO.NET-Daten mit der BindingSource-Komponente in Windows Forms.

Außerdem kann die BindingSource-Komponente als stark typisierte Datenquelle agieren. Üblicherweise wird der Typ der zugrunde liegenden Datenquelle durch einen der folgenden Mechanismen fixiert:

  • Mit der Add-Methode können Sie der BindingSource-Komponente ein Element hinzufügen.

  • Legen Sie die DataSource-Eigenschaft auf eine Liste, ein einzelnes Objekt oder einen Typ fest.

Mit beiden Mechanismen wird eine stark typisierte Liste erstellt. Weitere Informationen zum Verwenden der BindingSource zum Binden an einen Typ finden Sie unter Gewusst wie: Binden eines Windows Forms-Steuerelements an einen Typ. Sie können die Steuerelemente auch mit der BindingSource an ein Factoryobjekt binden. Weitere Informationen hierzu finden Sie unter Gewusst wie: Binden eines Windows Forms-Steuerelements an ein Factoryobjekt.

ms158145.alert_note(de-de,VS.90).gifHinweis:

Da eine BindingSource sowohl einfache als auch komplexe Datenquellen behandelt, ist die Terminologie problematisch. Innerhalb dieser Klassendokumentation bezieht sich der Begriff Liste auf eine Datenauflistung innerhalb der gehosteten Datenquelle, und Element bezeichnet ein einzelnes Element. Beim Erörtern der mit komplexen Datenquellen verbundenen Funktionen werden die äquivalenten Begriffe Tabelle und Zeile verwendet.

BindingSource stellt Member für den Zugriff auf die zugrunde liegenden Daten bereit. Das aktuelle Element kann über die Current-Eigenschaft abgerufen werden, und die gesamte Liste kann über die List-Eigenschaft abgerufen werden. Bearbeitungsoperationen werden für das aktuelle Element durch Current und die Methoden RemoveCurrent, EndEdit, CancelEdit und Add sowie AddNew unterstützt. Obwohl die Datenquellenverwaltung für alle zugrunde liegenden Datenquellentypen automatisch behandelt wird, macht diese Klasse eine Anzahl von Ereignissen verfügbar, z. B. das CurrentItemChanged-Ereignis und das DataSourceChanged-Ereignis, die eine Anpassung ermöglichen.

Die Verwaltung und Navigation für Datenquellen, die an eine BindingSource-Komponente gebunden sind, erfolgt ebenfalls mit der BindingNavigator-Klasse. Diese stellt für die Navigation von Elementen innerhalb einer Liste eine VCR-ähnliche Benutzeroberfläche bereit. Obwohl BindingNavigator an eine beliebige Datenquelle gebunden werden kann, wurde er für die Integration mit einer BindingSource-Komponente über deren BindingNavigator..::.BindingSource-Eigenschaft entworfen.

Die Standardeigenschaft für die BindingSource-Klasse ist DataSource. Das Standardereignis ist CurrentChanged.

ms158145.alert_caution(de-de,VS.90).gifVorsicht:

Viele Member der BindingSource-Klasse operieren auf der zugrunde liegenden Liste, die durch die List-Eigenschaft dargestellt ist, und ihre Operation verweist einfach auf die zugrunde liegende Liste. Daher kann sich das genaue Verhalten dieser Member von dem in der Klassendokumentation beschriebenen unterscheiden, wenn die BindingSource an eine benutzerdefinierte Implementierung von IList gebunden ist. Beispielsweise ruft die RemoveAt-Methode IList..::.RemoveAt auf. In der BindingSource-Dokumentation wird die RemoveAt-Methode unter der Voraussetzung beschrieben, dass die RemoveAt-Methode für die zugrunde liegende IList korrekt implementiert ist.

Im folgenden Codebeispiel wird eine ListBox-Grenze für eine BindingSource veranschaulicht. Die BindingSource ist an eine BindingList<(Of <(T>)>) gebunden, die eine Liste von Schriftarten enthält.

Visual Basic
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Public Class Form1
    Inherits Form

    <STAThread()> _
    Shared Sub Main()
        Application.EnableVisualStyles()
        Application.Run(New Form1())

    End Sub

    Public Sub New()

    End Sub

    Private textBox1 As TextBox
    Private WithEvents button1 As Button
    Private listBox1 As ListBox
    Private components As IContainer
    Private binding1 As BindingSource

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        listBox1 = New ListBox()
        textBox1 = New TextBox()
        binding1 = New BindingSource()
        button1 = New Button()
        listBox1.Location = New Point(140, 25)
        listBox1.Size = New Size(123, 160)
        textBox1.Location = New Point(23, 70)
        textBox1.Size = New Size(100, 20)
        textBox1.Text = "Wingdings"
        button1.Location = New Point(23, 25)
        button1.Size = New Size(75, 23)
        button1.Text = "Search"
        Me.ClientSize = New Size(292, 266)
        Me.Controls.Add(Me.button1)
        Me.Controls.Add(Me.textBox1)
        Me.Controls.Add(Me.listBox1)

        Dim fonts As New MyFontList()
        Dim i As Integer
        For i = 0 To FontFamily.Families.Length - 1
            If FontFamily.Families(i).IsStyleAvailable(FontStyle.Regular) Then
                fonts.Add(New Font(FontFamily.Families(i), 11.0F, FontStyle.Regular))
            End If
        Next i
        binding1.DataSource = fonts
        listBox1.DataSource = binding1
        listBox1.DisplayMember = "Name"

    End Sub
    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
        Handles button1.Click

        If binding1.SupportsSearching <> True Then
            MessageBox.Show("Cannot search the list.")
        Else
            Dim foundIndex As Integer = binding1.Find("Name", textBox1.Text)
            If foundIndex > -1 Then
                listBox1.SelectedIndex = foundIndex
            Else
                MessageBox.Show("Font was not found.")
            End If
        End If

    End Sub
End Class

Public Class MyFontList
    Inherits BindingList(Of Font)

    Protected Overrides ReadOnly Property SupportsSearchingCore() As Boolean
        Get
            Return True
        End Get
    End Property

    Protected Overrides Function FindCore(ByVal prop As PropertyDescriptor, _
        ByVal key As Object) As Integer
        ' Ignore the prop value and search by family name.
        Dim i As Integer
        While i < Count
            If Items(i).FontFamily.Name.ToLower() = CStr(key).ToLower() Then
                Return i
            End If
            i += 1
        End While

        Return -1
    End Function
End Class
C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace BindingSourceExamples
{
    public class Form1 : Form
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }

        public Form1()
        {
            this.Load += new EventHandler(Form1_Load);
        }

        private TextBox textBox1;
        private Button button1;
        private ListBox listBox1;

        private BindingSource binding1;
        void Form1_Load(object sender, EventArgs e)
        {
            listBox1 = new ListBox();
            textBox1 = new TextBox();
            binding1 = new BindingSource();
            button1 = new Button();
            listBox1.Location = new Point(140, 25);
            listBox1.Size = new Size(123, 160);
            textBox1.Location = new Point(23, 70);
            textBox1.Size = new Size(100, 20);
            textBox1.Text = "Wingdings";
            button1.Location = new Point(23, 25);
            button1.Size = new Size(75, 23);
            button1.Text = "Search";
            button1.Click += new EventHandler(this.button1_Click);
            this.ClientSize = new Size(292, 266);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.listBox1);

            MyFontList fonts = new MyFontList();
            for (int i = 0; i < FontFamily.Families.Length; i++)
            {
                if (FontFamily.Families[i].IsStyleAvailable(FontStyle.Regular))
                    fonts.Add(new Font(FontFamily.Families[i], 11.0F, FontStyle.Regular));
            }
            binding1.DataSource = fonts;
            listBox1.DataSource = binding1;
            listBox1.DisplayMember = "Name";

        }


        private void button1_Click(object sender, EventArgs e)
        {
            if (binding1.SupportsSearching != true)
                MessageBox.Show("Cannot search the list.");
            else
            {
                int foundIndex = binding1.Find("Name", textBox1.Text);
                if (foundIndex > -1)
                    listBox1.SelectedIndex = foundIndex;
                else
                    MessageBox.Show("Font was not found.");
            }
        }
    }

    public class MyFontList : BindingList<Font>
    {

        protected override bool SupportsSearchingCore
        {
            get { return true; }
        }
        protected override int FindCore(PropertyDescriptor prop, object key)
        {
            // Ignore the prop value and search by family name.
            for (int i = 0; i < Count; ++i)
            {
                if (Items[i].FontFamily.Name.ToLower() == ((string)key).ToLower())
                    return i;

            }
            return -1;
        }


    }

}
System..::.Object
  System..::.MarshalByRefObject
    System.ComponentModel..::.Component
      System.Windows.Forms..::.BindingSource
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile für Smartphone, Windows Mobile für Pocket PC

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0

.NET Compact Framework

Unterstützt in: 3.5, 2.0
Communityinhalt   Was ist Community Content?
Neuen Inhalt hinzufügen RSS  Anmerkungen
Processing
© 2009 Microsoft Corporation. Alle Rechte vorbehalten. Nutzungsbedingungen | Markenzeichen | Informationen zur Datensicherheit
Page view tracker