Vorgehensweise: Binden eines Windows Forms-Steuerelements an einen Typ
Beim Erstellen von Steuerelementen, die mit Daten interagieren, ist es manchmal erforderlich, ein Steuerelement an einen Typ statt an ein Objekt zu binden. Diese Situation tritt vor allem zur Entwurfszeit auf, wenn Daten möglicherweise nicht verfügbar sind, aber die datengebundenen Steuerelemente dennoch Informationen von der öffentlichen Schnittstelle eines Typs anzeigen müssen. Sie können beispielsweise ein DataGridView-Steuerelement an ein von einem Webdienst bereitgestelltes Objekt binden, und dafür sorgen, dass das DataGridView-Steuerelement zur Entwurfszeit die zugehörigen Spalten mit den Membernamen eines benutzerdefinierten Typs beschriftet.
Mit der BindingSource-Komponente können Sie ein Steuerelement problemlos an einen Typ binden.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie ein DataGridView-Steuerelement mithilfe einer BindingSource-Komponente an einen benutzerdefinierten Typ gebunden wird. Beim Ausführen des Beispiels werden Sie feststellen, dass DataGridView die Spalten, die die Eigenschaften eines Customer
-Objekts darstellen, beschriftet hat, bevor das Steuerelement mit Daten gefüllt wird. In dem Beispiel ist eine Schaltfläche "Add Customer" enthalten, mit der dem DataGridView-Steuerelement Daten hinzugefügt werden können. Wenn Sie auf die Schaltfläche klicken, wird BindingSource ein neues Customer
-Objekt hinzugefügt. In einem realen Szenario könnten die Daten durch den Aufruf eines Webdiensts oder einer anderen Datenquelle abgerufen werden.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
class Form1 : Form
{
BindingSource bSource = new BindingSource();
private Button button1;
DataGridView dgv = new DataGridView();
public Form1()
{
this.button1 = new System.Windows.Forms.Button();
this.button1.Location = new System.Drawing.Point(140, 326);
this.button1.Name = "button1";
this.button1.AutoSize = true;
this.button1.Text = "Add Customer";
this.button1.Click += new System.EventHandler(this.button1_Click);
this.ClientSize = new System.Drawing.Size(362, 370);
this.Controls.Add(this.button1);
// Bind the BindingSource to the DemoCustomer type.
bSource.DataSource = typeof(DemoCustomer);
// Set up the DataGridView control.
dgv.Dock = DockStyle.Top;
this.Controls.Add(dgv);
// Bind the DataGridView control to the BindingSource.
dgv.DataSource = bSource;
}
public static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, EventArgs e)
{
bSource.Add(new DemoCustomer(DateTime.Today));
}
}
// This simple class is used to demonstrate binding to a type.
public class DemoCustomer
{
public DemoCustomer()
{
idValue = Guid.NewGuid();
}
public DemoCustomer(DateTime FirstOrderDate)
{
FirstOrder = FirstOrderDate;
idValue = Guid.NewGuid();
}
// These fields hold the data that backs the public properties.
private DateTime firstOrderDateValue;
private Guid idValue;
private string custNameValue;
public string CustomerName
{
get { return custNameValue; }
set { custNameValue = value; }
}
// This is a property that represents a birth date.
public DateTime FirstOrder
{
get
{
return this.firstOrderDateValue;
}
set
{
if (value != this.firstOrderDateValue)
{
this.firstOrderDateValue = value;
}
}
}
// This is a property that represents a customer ID.
public Guid ID
{
get
{
return this.idValue;
}
}
}
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Windows.Forms
Class Form1
Inherits Form
Private bSource As New BindingSource()
Private WithEvents button1 As Button
Private dgv As New DataGridView()
Public Sub New()
Me.button1 = New System.Windows.Forms.Button()
Me.button1.Location = New System.Drawing.Point(140, 326)
Me.button1.Name = "button1"
Me.button1.AutoSize = True
Me.button1.Text = "Add Customer"
Me.ClientSize = New System.Drawing.Size(362, 370)
Me.Controls.Add(Me.button1)
' Bind the BindingSource to the DemoCustomer type.
bSource.DataSource = GetType(DemoCustomer)
' Set up the DataGridView control.
dgv.Dock = DockStyle.Top
Me.Controls.Add(dgv)
' Bind the DataGridView control to the BindingSource.
dgv.DataSource = bSource
End Sub
Public Shared Sub Main()
Application.Run(New Form1())
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles button1.Click
bSource.Add(New DemoCustomer(DateTime.Today))
End Sub
End Class
' This simple class is used to demonstrate binding to a type.
Public Class DemoCustomer
Public Sub New()
idValue = Guid.NewGuid()
End Sub
Public Sub New(ByVal FirstOrderDate As DateTime)
FirstOrder = FirstOrderDate
idValue = Guid.NewGuid()
End Sub
' These fields hold the data that backs the public properties.
Private firstOrderDateValue As DateTime
Private idValue As Guid
Private custNameValue As String
Public Property CustomerName() As String
Get
Return custNameValue
End Get
Set(ByVal value As String)
custNameValue = value
End Set
End Property
' This is a property that represents the first order date.
Public Property FirstOrder() As DateTime
Get
Return Me.firstOrderDateValue
End Get
Set(ByVal value As DateTime)
If value <> Me.firstOrderDateValue Then
Me.firstOrderDateValue = value
End If
End Set
End Property
' This is a property that represents a customer ID.
Public ReadOnly Property ID() As Guid
Get
Return Me.idValue
End Get
End Property
End Class
Kompilieren des Codes
Für dieses Beispiel benötigen Sie Folgendes:
- Verweise auf die Assemblys "System" und "System.Windows.Forms".
Weitere Informationen
.NET Desktop feedback
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für