Binding-Klasse
Stellt die einfache Bindung zwischen dem Eigenschaftenwert eines Objekts und dem Eigenschaftenwert eines Steuerelements dar.
Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)
Syntax
'Declaration
Public Class Binding
'Usage
Dim instance As Binding
public class Binding
public ref class Binding
public class Binding
public class Binding
Hinweise
Erstellen und verwalten Sie mit der Binding-Klasse eine einfache Bindung zwischen der Eigenschaft eines Steuerelements und der Eigenschaft eines Objekts bzw. der Eigenschaft des aktuellen Objekts in einer Liste von Objekten.
Als Beispiel für den ersten Fall können Sie die Text-Eigenschaft eines TextBox-Steuerelements an die FirstName-Eigenschaft eines Customer-Objekts binden. Als Beispiel für den zweiten Fall können Sie die Text-Eigenschaft eines TextBox-Steuerelements an die FirstName-Eigenschaft einer DataTable binden, die Kunden enthält.
Mit der Binding-Klasse können Sie auch Werte zur Anzeige über das Format-Ereignis formatieren und formatierte Werte über das Parse-Ereignis abrufen.
Wenn Sie eine Binding-Instanz mit einem Binding-Konstruktor erstellen, müssen Sie drei Elemente angeben:
Den Namen der Steuerelementeigenschaft, an die gebunden werden soll.
Die Datenquelle.
Den Navigationspfad, der in eine Liste oder Eigenschaft in der Datenquelle aufgelöst wird. Mit dem Navigationspfad erstellen Sie auch die BindingMemberInfo-Eigenschaft des Objekts.
Zuerst müssen Sie den Namen der Steuerelementeigenschaft angeben, an die Sie die Daten binden möchten. Zur Anzeige der Daten z. B. in einem TextBox-Steuerelement geben Sie die Text-Eigenschaft an.
Des Weiteren können Sie als Datenquelle eine Instanz einer beliebigen der folgenden Klassen angeben.
Beschreibung |
C#-Beispiel |
---|---|
Jede Klasse, die IBindingList oder ITypedList implementiert. Dazu zählen: DataSet, DataTable, DataView oder DataViewManager. |
|
Jede Klasse, die IList implementiert, um eine indizierte Auflistung von Objekten zu erstellen. Die Auflistung muss erstellt und aufgefüllt werden, bevor das Binding erstellt wird. Alle Objekte in der Liste müssen demselben Typ angehören, andernfalls wird eine Ausnahme ausgelöst. |
|
Eine stark typisierte IList von stark typisierten Objekten |
|
Zum Schluss geben Sie den Navigationspfad an. Dieser kann eine leere Zeichenfolge (""), ein einzelner Eigenschaftenname oder eine Hierarchie von durch Punkte getrennten Namen sein. Wenn Sie als Navigationspfad eine leere Zeichenfolge festlegen, wird die ToString-Methode für das zugrunde liegende Datenquellenobjekt aufgerufen.
Wenn die Datenquelle eine DataTable ist, die mehrere DataColumn-Objekte enthalten kann, muss zur Auflösung in eine bestimmte Spalte der Navigationspfad verwendet werden.
Hinweis
Wenn die Datenquelle ein DataSet, einen DataViewManager oder eine DataTable ist, erfolgt die tatsächliche Bindung an eine DataView. Daher sind gebundene Zeilen eigentlich DataRowView-Objekte.
Ein durch Punkte getrennter Navigationspfad ist erforderlich, wenn die Datenquelle auf ein Objekt festgelegt ist, das mehrere DataTable-Objekte enthält, z. B. DataSet oder DataViewManager. Sie können einen durch Punkte getrennten Navigationspfad auch verwenden, wenn die Bindung an ein Objekt erfolgt, dessen Eigenschaften Verweise auf andere Objekte zurückgeben, z. B. eine Klasse mit Eigenschaften, die andere Klassenobjekte zurückgeben. Sämtliche der folgenden Navigationspfade beschreiben z. B. gültige Datenfelder:
"Size.Height"
"Suppliers.CompanyName"
"Regions.regionsToCustomers.CustomerFirstName"
"Regions.regionsToCustomers.customersToOrders.ordersToDetails.Quantity"
Jeder Member des Pfads kann eine Eigenschaft, die in einen einzelnen Wert aufgelöst wird (z. B. eine ganze Zahl), oder aber eine Liste von Werten (z. B. ein Zeichenfolgenarray) zurückgeben. Zwar kann jeder Member im Pfad eine Liste oder Eigenschaft sein, der letzte Member muss jedoch in eine Eigenschaft aufzulösen sein. Jeder Member basiert auf dem vorhergehenden Member: "Size.Height" wird in die Height-Eigenschaft für die aktuelle Size aufgelöst, "Regions.regionsToCustomers.CustomerFirstName" wird in den Vornamen des aktuellen Kunden aufgelöst, wobei der Kunde einer der Kunden in der aktuellen Region ist.
DataRelation gibt eine Liste von Werten zurück, indem eine DataTable mit einer zweiten DataTable in einem DataSet verknüpft wird. Wenn DataSetDataRelation-Objekte enthält, können Sie den Datenmember als TableName, gefolgt von einem RelationName und einem ColumnName angeben. Wenn z. B. die DataTable "Suppliers" die DataRelation "suppliers2products" enthält, dann könnte der Datenmember "Suppliers.suppliers2products.ProductName" sein.
Die Datenquelle kann aus einer Reihe miteinander verknüpfter Klassen bestehen. Stellen Sie sich z. B. eine Reihe von Klassen vor, mit der Sonnensysteme katalogisiert werden. Die Klasse mit dem Namen System
enthält eine Eigenschaft mit dem Namen Stars
, die eine Auflistung von Star
-Objekten zurückgibt. Jedes Star
-Objekt besitzt eine Name
-Eigenschaft und eine Mass
-Eigenschaft sowie eine Planets
-Eigenschaft, die eine Auflistung von Planet
-Objekten zurückgibt. In diesem System verfügt auch jeder Planet über eine Mass
-Eigenschaft und eine Name
-Eigenschaft. Jedes Planet
-Objekt besitzt zudem eine Moons
-Eigenschaft, die eine Auflistung von Moon
-Objekt zurückgibt, von denen wiederum jede eine Name
-Eigenschaft und eine Mass
-Eigenschaft besitzt. Wenn Sie ein System
-Objekt als Datenquelle angeben, können Sie als Datenmember einen beliebigen der folgenden Member angeben:
"Sterne.Name"
"Sterne.Masse"
"Sterne.Planeten.Name"
"Sterne.Planeten.Masse"
"Sterne.Planeten.Monde.Name"
"Sterne.Planeten.Monde.Masse"
Steuerelemente, die einfach gebunden werden können, enthalten eine Auflistung von Binding-Objekten in einer ControlBindingsCollection, auf die Sie über die DataBindings-Eigenschaft des Steuerelements zugreifen können. Der Auflistung wird ein Binding hinzugefügt, indem Sie die Add-Methode aufrufen und so eine Eigenschaft des Steuerelements an eine Eigenschaft eines Objekts (oder an eine Eigenschaft des aktuellen Objekts in einer Liste) binden.
Sie können einfache Bindungen an beliebige Objekte erstellen, die von der System.Windows.Forms.Control-Klasse abgeleitet sind, z. B. folgende Windows-Steuerelemente:
TextBox
Hinweis
Nur die SelectedValue-Eigenschaft der Steuerelemente ComboBox, CheckedListBox und ListBox wird einfach gebunden.
Die BindingManagerBase-Klasse ist eine abstrakte Klasse, die sämtliche Binding-Objekte für eine bestimmte Datenquelle und einen bestimmten Datenmember verwaltet. Von BindingManagerBase abgeleitete Klassen sind die CurrencyManager-Klasse und die PropertyManager-Klasse. Die Art der Verwaltung eines Binding hängt davon ab, ob es sich bei dem Binding um eine Listenbindung oder eine Eigenschaftenbindung handelt. Wenn es sich z. B. um eine Listenbindung handelt, können Sie mit der BindingManagerBase eine Position in der Liste angeben. Durch Position wird daher bestimmt, welches der Elemente aus der Liste tatsächlich an ein Steuerelement gebunden wird. Verwenden Sie den BindingContext, um die entsprechende BindingManagerBase zurückzugeben.
Verwenden Sie die AddNew-Methode der BindingManagerBase-Klasse, um eine neue Zeile einer Reihe von Steuerelementen hinzuzufügen, die an dieselbe DataSource gebunden sind. Mit der Item-Eigenschaft der BindingContext-Klasse wird der entsprechende CurrencyManager zurückgegeben. Mit der CancelCurrentEdit-Methode brechen Sie das Hinzufügen der neuen Zeile ab.
Beispiel
Im folgenden Codebeispiel wird ein Windows Form mit einer Anzahl von Steuerelementen erstellt, die die einfache Bindung von Daten veranschaulichen. Im Beispiel werden ein DataSet mit den zwei Tabellen Customers
und Orders
sowie eine DataRelation mit dem Namen custToOrders
erstellt. Bei vier Steuerelementen (ein DateTimePicker-Steuerelement und drei TextBox-Steuerelemente) erfolgt eine Datenbindung an Spalten in der Tabelle. Für jedes Steuerelement wird im Beispiel über die DataBindings-Eigenschaft ein Binding an das Steuerelement erstellt und hinzugefügt. Für jede Tabelle wird im Beispiel eine BindingManagerBase über den BindingContext des Formulars zurückgegeben. Vier Button-Steuerelemente erhöhen oder verringern den Wert der Position-Eigenschaft für die BindingManagerBase-Objekte.
Imports System
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Globalization
Imports System.Windows.Forms
Public Class Form1
Inherits Form
Private components As Container
Private button1 As Button
Private button2 As Button
Private button3 As Button
Private button4 As Button
Private text1 As TextBox
Private text2 As TextBox
Private text3 As TextBox
Private bmCustomers As BindingManagerBase
Private bmOrders As BindingManagerBase
Private ds As DataSet
Private DateTimePicker1 As DateTimePicker
Public Sub New
' Required for Windows Form Designer support.
InitializeComponent
' Call SetUp to bind the controls.
SetUp
End Sub
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
Private Sub InitializeComponent
' Create the form and its controls.
With Me
.components = New Container
.button1 = New Button
.button2 = New Button
.button3 = New Button
.button4 = New Button
.text1 = New TextBox
.text2 = New TextBox
.text3 = New TextBox
.DateTimePicker1 = New DateTimePicker
.Text = "Binding Sample"
.ClientSize = New Size(450, 200)
With .button1
.Location = New Point(24, 16)
.Size = New Size(64, 24)
.Text = "<"
AddHandler button1.click, AddressOf button1_Click
End With
With .button2
.Location = New Point(90, 16)
.Size = New Size(64, 24)
.Text = ">"
AddHandler button2.click, AddressOf button2_Click
End With
With .button3
.Location = New Point(90, 100)
.Size = New Size(64, 24)
.Text = ">"
AddHandler button3.click, AddressOf button3_Click
End With
With .button4
.Location = New Point(150, 100)
.Size = New Size(64, 24)
.Text = ">"
AddHandler button4.click, AddressOf button4_Click
End With
With .text1
.Location = New Point(24, 50)
.Size = New Size(150, 24)
End With
With .text2
.Location = New Point(190, 50)
.Size = New Size(150, 24)
End With
With .text3
.Location = New Point(290, 150)
.Size = New Size(150, 24)
End With
With .DateTimePicker1
.Location = New Point(90, 150)
.Size = New Size(200, 800)
End With
With .Controls
.Add(button1)
.Add(button2)
.Add(button3)
.Add(button4)
.Add(text1)
.Add(text2)
.Add(text3)
.Add(DateTimePicker1)
End With
End With
End Sub
Public Shared Sub Main
Application.Run(new Form1)
End Sub
Private Sub SetUp
' Create a DataSet with two tables and one relation.
MakeDataSet
BindControls
End Sub
Private Sub BindControls
' Create two Binding objects for the first two TextBox
' controls. The data-bound property for both controls
' is the Text property. The data source is a DataSet
' (ds). The data member is the
' TableName.ColumnName" string.
text1.DataBindings.Add(New _
Binding("Text", ds, "customers.custName"))
text2.DataBindings.Add(New _
Binding("Text", ds, "customers.custID"))
' Bind the DateTimePicker control by adding a new Binding.
' The data member of the DateTimePicker is a
' TableName.RelationName.ColumnName string
DateTimePicker1.DataBindings.Add(New _
Binding("Value", ds, "customers.CustToOrders.OrderDate"))
' Add event delegates for the Parse and Format events to a
' new Binding object, and add the object to the third
' TextBox control's BindingsCollection. The delegates
' must be added before adding the Binding to the
' collection; otherwise, no formatting occurs until
' the Current object of the BindingManagerBase for
' the data source changes.
Dim b As Binding = New _
Binding("Text", ds, "customers.custToOrders.OrderAmount")
AddHandler b.Parse, AddressOf CurrencyStringToDecimal
AddHandler b.Format, AddressOf DecimalToCurrencyString
text3.DataBindings.Add(b)
' Get the BindingManagerBase for the Customers table.
bmCustomers = Me.BindingContext(ds, "Customers")
' Get the BindingManagerBase for the Orders table using the
' RelationName.
bmOrders = Me.BindingContext(ds, "customers.CustToOrders")
End Sub
Private Sub DecimalToCurrencyString(sender As Object, cevent As ConvertEventArgs)
' This method is the Format event handler. Whenever the
' control displays a new value, the value is converted from
' its native Decimal type to a string. The ToString method
' then formats the value as a Currency, by using the
' formatting character "c".
' The application can only convert to string type.
If Not cevent.DesiredType Is GetType(String) Then
Exit Sub
End If
cevent.Value = CType(cevent.Value, decimal).ToString("c")
End Sub
Private Sub CurrencyStringToDecimal(sender As Object, cevent As ConvertEventArgs)
' This method is the Parse event handler. The Parse event
' occurs whenever the displayed value changes. The static
' ToDecimal method of the Convert class converts the
' value back to its native Decimal type.
' Can only convert to decimal type.
If Not cevent.DesiredType Is GetType(decimal) Then
Exit Sub
End If
cevent.Value = Decimal.Parse(cevent.Value.ToString, _
NumberStyles.Currency, nothing)
' To see that no precision is lost, print the unformatted
' value. For example, changing a value to "10.0001"
' causes the control to display "10.00", but the
' unformatted value remains "10.0001".
Console.WriteLine(cevent.Value)
End Sub
Private Sub button1_Click(sender As Object, e As System.EventArgs)
' Go to the previous item in the Customer list.
bmCustomers.Position -= 1
End Sub
Private Sub button2_Click(sender As Object, e As System.EventArgs)
' Go to the next item in the Customer list.
bmCustomers.Position += 1
End Sub
Private Sub button3_Click(sender As Object, e As System.EventArgs)
' Go to the previous item in the Order list.
bmOrders.Position -= 1
End Sub
Private Sub button4_Click(sender As Object, e As System.EventArgs)
' Go to the next item in the Orders list.
bmOrders.Position += 1
End Sub
' Creates a DataSet with two tables and populates it.
Private Sub MakeDataSet
' Create a DataSet.
ds = New DataSet("myDataSet")
' Creates two DataTables.
Dim tCust As DataTable = New DataTable("Customers")
Dim tOrders As DataTable = New DataTable("Orders")
' Create two columns, and add them to the first table.
Dim cCustID As DataColumn = New DataColumn("CustID", _
System.Type.GetType("System.Int32"))
Dim cCustName As DataColumn = New DataColumn("CustName")
tCust.Columns.Add(cCustID)
tCust.Columns.Add(cCustName)
' Create three columns, and add them to the second table.
Dim cID As DataColumn = _
New DataColumn("CustID", System.Type.GetType("System.Int32"))
Dim cOrderDate As DataColumn = _
New DataColumn("orderDate", System.Type.GetType("System.DateTime"))
Dim cOrderAmount As DataColumn = _
New DataColumn("OrderAmount", System.Type.GetType("System.Decimal"))
tOrders.Columns.Add(cOrderAmount)
tOrders.Columns.Add(cID)
tOrders.Columns.Add(cOrderDate)
' Add the tables to the DataSet.
ds.Tables.Add(tCust)
ds.Tables.Add(tOrders)
' Create a DataRelation, and add it to the DataSet.
Dim dr As DataRelation = New _
DataRelation("custToOrders", cCustID, cID)
ds.Relations.Add(dr)
' Populate the tables. For each customer and orders,
' create two DataRow variables.
Dim newRow1 As DataRow
Dim newRow2 As DataRow
' Create three customers in the Customers Table.
Dim i As Integer
For i = 1 to 3
newRow1 = tCust.NewRow
newRow1("custID") = i
' Adds the row to the Customers table.
tCust.Rows.Add(newRow1)
Next
' Give each customer a distinct name.
tCust.Rows(0)("custName") = "Alpha"
tCust.Rows(1)("custName") = "Beta"
tCust.Rows(2)("custName") = "Omega"
' For each customer, create five rows in the Orders table.
Dim j As Integer
For i = 1 to 3
For j = 1 to 5
newRow2 = tOrders.NewRow
newRow2("CustID") = i
newRow2("orderDate") = New DateTime(2001, i, j * 2)
newRow2("OrderAmount") = i * 10 + j * .1
' Add the row to the Orders table.
tOrders.Rows.Add(newRow2)
Next
Next
End Sub
End Class
using System;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Windows.Forms;
public class Form1 : System.Windows.Forms.Form
{
private System.ComponentModel.Container components;
private Button button1;
private Button button2;
private Button button3;
private Button button4;
private TextBox text1;
private TextBox text2;
private TextBox text3;
private BindingManagerBase bmCustomers;
private BindingManagerBase bmOrders;
private DataSet ds;
private DateTimePicker DateTimePicker1;
public Form1()
{
// Required for Windows Form Designer support.
InitializeComponent();
// Call SetUp to bind the controls.
SetUp();
}
private void InitializeComponent()
{
// Create the form and its controls.
this.components = new System.ComponentModel.Container();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.text1= new System.Windows.Forms.TextBox();
this.text2= new System.Windows.Forms.TextBox();
this.text3= new System.Windows.Forms.TextBox();
this.DateTimePicker1 = new DateTimePicker();
this.Text = "Binding Sample";
this.ClientSize = new System.Drawing.Size(450, 200);
button1.Location = new System.Drawing.Point(24, 16);
button1.Size = new System.Drawing.Size(64, 24);
button1.Text = "<";
button1.Click+=new System.EventHandler(button1_Click);
button2.Location = new System.Drawing.Point(90, 16);
button2.Size = new System.Drawing.Size(64, 24);
button2.Text = ">";
button2.Click+=new System.EventHandler(button2_Click);
button3.Location = new System.Drawing.Point(90, 100);
button3.Size = new System.Drawing.Size(64, 24);
button3.Text = "<";
button3.Click+=new System.EventHandler(button3_Click);
button4.Location = new System.Drawing.Point(150, 100);
button4.Size = new System.Drawing.Size(64, 24);
button4.Text = ">";
button4.Click+=new System.EventHandler(button4_Click);
text1.Location = new System.Drawing.Point(24, 50);
text1.Size = new System.Drawing.Size(150, 24);
text2.Location = new System.Drawing.Point(190, 50);
text2.Size = new System.Drawing.Size(150, 24);
text3.Location = new System.Drawing.Point(290, 150);
text3.Size = new System.Drawing.Size(150, 24);
DateTimePicker1.Location = new System.Drawing.Point(90, 150);
DateTimePicker1.Size = new System.Drawing.Size(200, 800);
this.Controls.Add(button1);
this.Controls.Add(button2);
this.Controls.Add(button3);
this.Controls.Add(button4);
this.Controls.Add(text1);
this.Controls.Add(text2);
this.Controls.Add(text3);
this.Controls.Add(DateTimePicker1);
}
protected override void Dispose( bool disposing ){
if( disposing ){
if (components != null){
components.Dispose();}
}
base.Dispose( disposing );
}
public static void Main()
{
Application.Run(new Form1());
}
private void SetUp()
{
// Create a DataSet with two tables and one relation.
MakeDataSet();
BindControls();
}
protected void BindControls()
{
/* Create two Binding objects for the first two TextBox
controls. The data-bound property for both controls
is the Text property. The data source is a DataSet
(ds). The data member is the
"TableName.ColumnName" string. */
text1.DataBindings.Add(new Binding
("Text", ds, "customers.custName"));
text2.DataBindings.Add(new Binding
("Text", ds, "customers.custID"));
/* Bind the DateTimePicker control by adding a new Binding.
The data member of the DateTimePicker is a
TableName.RelationName.ColumnName string. */
DateTimePicker1.DataBindings.Add(new
Binding("Value", ds, "customers.CustToOrders.OrderDate"));
/* Add event delegates for the Parse and Format events to a
new Binding object, and add the object to the third
TextBox control's BindingsCollection. The delegates
must be added before adding the Binding to the
collection; otherwise, no formatting occurs until
the Current object of the BindingManagerBase for
the data source changes. */
Binding b = new Binding
("Text", ds, "customers.custToOrders.OrderAmount");
b.Parse+=new ConvertEventHandler(CurrencyStringToDecimal);
b.Format+=new ConvertEventHandler(DecimalToCurrencyString);
text3.DataBindings.Add(b);
// Get the BindingManagerBase for the Customers table.
bmCustomers = this.BindingContext [ds, "Customers"];
/* Get the BindingManagerBase for the Orders table using the
RelationName. */
bmOrders = this.BindingContext[ds, "customers.CustToOrders"];
}
private void DecimalToCurrencyString(object sender, ConvertEventArgs cevent)
{
/* This method is the Format event handler. Whenever the
control displays a new value, the value is converted from
its native Decimal type to a string. The ToString method
then formats the value as a Currency, by using the
formatting character "c". */
// The application can only convert to string type.
if(cevent.DesiredType != typeof(string)) return;
cevent.Value = ((decimal) cevent.Value).ToString("c");
}
private void CurrencyStringToDecimal(object sender, ConvertEventArgs cevent)
{
/* This method is the Parse event handler. The Parse event
occurs whenever the displayed value changes. The static
ToDecimal method of the Convert class converts the
value back to its native Decimal type. */
// Can only convert to decimal type.
if(cevent.DesiredType != typeof(decimal)) return;
cevent.Value = Decimal.Parse(cevent.Value.ToString(),
NumberStyles.Currency, null);
/* To see that no precision is lost, print the unformatted
value. For example, changing a value to "10.0001"
causes the control to display "10.00", but the
unformatted value remains "10.0001". */
Console.WriteLine(cevent.Value);
}
private void button1_Click(object sender, System.EventArgs e)
{
// Go to the previous item in the Customer list.
bmCustomers.Position -= 1;
}
private void button2_Click(object sender, System.EventArgs e)
{
// Go to the next item in the Customer list.
bmCustomers.Position += 1;
}
private void button3_Click(object sender, System.EventArgs e)
{
// Go to the previous item in the Orders list.
bmOrders.Position-=1;
}
private void button4_Click(object sender, System.EventArgs e)
{
// Go to the next item in the Orders list.
bmOrders.Position+=1;
}
// Create a DataSet with two tables and populate it.
private void MakeDataSet()
{
// Create a DataSet.
ds = new DataSet("myDataSet");
// Create two DataTables.
DataTable tCust = new DataTable("Customers");
DataTable tOrders = new DataTable("Orders");
// Create two columns, and add them to the first table.
DataColumn cCustID = new DataColumn("CustID", typeof(int));
DataColumn cCustName = new DataColumn("CustName");
tCust.Columns.Add(cCustID);
tCust.Columns.Add(cCustName);
// Create three columns, and add them to the second table.
DataColumn cID =
new DataColumn("CustID", typeof(int));
DataColumn cOrderDate =
new DataColumn("orderDate",typeof(DateTime));
DataColumn cOrderAmount =
new DataColumn("OrderAmount", typeof(decimal));
tOrders.Columns.Add(cOrderAmount);
tOrders.Columns.Add(cID);
tOrders.Columns.Add(cOrderDate);
// Add the tables to the DataSet.
ds.Tables.Add(tCust);
ds.Tables.Add(tOrders);
// Create a DataRelation, and add it to the DataSet.
DataRelation dr = new DataRelation
("custToOrders", cCustID , cID);
ds.Relations.Add(dr);
/* Populate the tables. For each customer and order,
create two DataRow variables. */
DataRow newRow1;
DataRow newRow2;
// Create three customers in the Customers Table.
for(int i = 1; i < 4; i++)
{
newRow1 = tCust.NewRow();
newRow1["custID"] = i;
// Add the row to the Customers table.
tCust.Rows.Add(newRow1);
}
// Give each customer a distinct name.
tCust.Rows[0]["custName"] = "Alpha";
tCust.Rows[1]["custName"] = "Beta";
tCust.Rows[2]["custName"] = "Omega";
// For each customer, create five rows in the Orders table.
for(int i = 1; i < 4; i++)
{
for(int j = 1; j < 6; j++)
{
newRow2 = tOrders.NewRow();
newRow2["CustID"]= i;
newRow2["orderDate"]= new DateTime(2001, i, j * 2);
newRow2["OrderAmount"] = i * 10 + j * .1;
// Add the row to the Orders table.
tOrders.Rows.Add(newRow2);
}
}
}
}
#using <system.dll>
#using <system.data.dll>
#using <system.drawing.dll>
#using <system.windows.forms.dll>
#using <system.xml.dll>
using namespace System;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Globalization;
using namespace System::Windows::Forms;
#define null 0L
public ref class Form1: public Form
{
private:
System::ComponentModel::Container^ components;
Button^ button1;
Button^ button2;
Button^ button3;
Button^ button4;
TextBox^ text1;
TextBox^ text2;
TextBox^ text3;
BindingManagerBase^ bmCustomers;
BindingManagerBase^ bmOrders;
DataSet^ ds;
DateTimePicker^ DateTimePicker1;
public:
Form1()
{
// Required for Windows Form Designer support.
InitializeComponent();
// Call SetUp to bind the controls.
SetUp();
}
private:
void InitializeComponent()
{
// Create the form and its controls.
this->components = gcnew System::ComponentModel::Container;
this->button1 = gcnew Button;
this->button2 = gcnew Button;
this->button3 = gcnew Button;
this->button4 = gcnew Button;
this->text1 = gcnew TextBox;
this->text2 = gcnew TextBox;
this->text3 = gcnew TextBox;
this->DateTimePicker1 = gcnew DateTimePicker;
this->Text = "Binding Sample";
this->ClientSize = System::Drawing::Size( 450, 200 );
button1->Location = System::Drawing::Point( 24, 16 );
button1->Size = System::Drawing::Size( 64, 24 );
button1->Text = "<";
button1->Click += gcnew System::EventHandler( this, &Form1::button1_Click );
button2->Location = System::Drawing::Point( 90, 16 );
button2->Size = System::Drawing::Size( 64, 24 );
button2->Text = ">";
button2->Click += gcnew System::EventHandler( this, &Form1::button2_Click );
button3->Location = System::Drawing::Point( 90, 100 );
button3->Size = System::Drawing::Size( 64, 24 );
button3->Text = "<";
button3->Click += gcnew System::EventHandler( this, &Form1::button3_Click );
button4->Location = System::Drawing::Point( 150, 100 );
button4->Size = System::Drawing::Size( 64, 24 );
button4->Text = ">";
button4->Click += gcnew System::EventHandler( this, &Form1::button4_Click );
text1->Location = System::Drawing::Point( 24, 50 );
text1->Size = System::Drawing::Size( 150, 24 );
text2->Location = System::Drawing::Point( 190, 50 );
text2->Size = System::Drawing::Size( 150, 24 );
text3->Location = System::Drawing::Point( 290, 150 );
text3->Size = System::Drawing::Size( 150, 24 );
DateTimePicker1->Location = System::Drawing::Point( 90, 150 );
DateTimePicker1->Size = System::Drawing::Size( 200, 800 );
this->Controls->Add( button1 );
this->Controls->Add( button2 );
this->Controls->Add( button3 );
this->Controls->Add( button4 );
this->Controls->Add( text1 );
this->Controls->Add( text2 );
this->Controls->Add( text3 );
this->Controls->Add( DateTimePicker1 );
}
public:
~Form1()
{
if ( components != nullptr )
{
delete components;
}
}
private:
void SetUp()
{
// Create a DataSet with two tables and one relation.
MakeDataSet();
BindControls();
}
protected:
void BindControls()
{
/* Create two Binding objects for the first two TextBox
controls. The data-bound property for both controls
is the Text property. The data source is a DataSet
(ds). The data member is the
"TableName.ColumnName" string. */
text1->DataBindings->Add( gcnew Binding( "Text",ds,"customers.custName" ) );
text2->DataBindings->Add( gcnew Binding( "Text",ds,"customers.custID" ) );
/* Bind the DateTimePicker control by adding a new Binding.
The data member of the DateTimePicker is a
TableName.RelationName.ColumnName string. */
DateTimePicker1->DataBindings->Add( gcnew Binding( "Value",ds,"customers.CustToOrders.OrderDate" ) );
/* Add event delegates for the Parse and Format events to a
new Binding object, and add the object to the third
TextBox control's BindingsCollection. The delegates
must be added before adding the Binding to the
collection; otherwise, no formatting occurs until
the Current object of the BindingManagerBase for
the data source changes. */
Binding^ b = gcnew Binding( "Text",ds,"customers.custToOrders.OrderAmount" );
b->Parse += gcnew ConvertEventHandler( this, &Form1::CurrencyStringToDecimal );
b->Format += gcnew ConvertEventHandler( this, &Form1::DecimalToCurrencyString );
text3->DataBindings->Add( b );
// Get the BindingManagerBase for the Customers table.
bmCustomers = this->BindingContext[ ds, "Customers" ];
/* Get the BindingManagerBase for the Orders table using the
RelationName. */
bmOrders = this->BindingContext[ ds, "customers.CustToOrders" ];
}
private:
void DecimalToCurrencyString( Object^ /*sender*/, ConvertEventArgs^ cevent )
{
/* This method is the Format event handler. Whenever the
control displays a new value, the value is converted from
its native Decimal type to a string. The ToString method
then formats the value as a Currency, by using the
formatting character "c". */
// The application can only convert to string type.
if ( cevent->DesiredType != String::typeid )
return;
cevent->Value = (dynamic_cast<Decimal^>(cevent->Value))->ToString( "c" );
}
void CurrencyStringToDecimal( Object^ /*sender*/, ConvertEventArgs^ cevent )
{
/* This method is the Parse event handler. The Parse event
occurs whenever the displayed value changes. The static
ToDecimal method of the Convert class converts the
value back to its native Decimal type. */
// Can only convert to Decimal type.
if ( cevent->DesiredType != Decimal::typeid )
return;
cevent->Value = Decimal::Parse( cevent->Value->ToString(), NumberStyles::Currency, nullptr );
/* To see that no precision is lost, print the unformatted
value. For example, changing a value to "10.0001"
causes the control to display "10.00", but the
unformatted value remains "10.0001". */
Console::WriteLine( cevent->Value );
}
private:
void button1_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
// Go to the previous item in the Customer list.
bmCustomers->Position -= 1;
}
void button2_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
// Go to the next item in the Customer list.
bmCustomers->Position += 1;
}
void button3_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
// Go to the previous item in the Orders list.
bmOrders->Position = bmOrders->Position - 1;
}
void button4_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
// Go to the next item in the Orders list.
bmOrders->Position = bmOrders->Position + 1;
}
private:
// Create a DataSet with two tables and populate it.
void MakeDataSet()
{
// Create a DataSet.
ds = gcnew DataSet( "myDataSet" );
// Create two DataTables.
DataTable^ tCust = gcnew DataTable( "Customers" );
DataTable^ tOrders = gcnew DataTable( "Orders" );
// Create two columns, and add them to the first table.
DataColumn^ cCustID = gcnew DataColumn( "CustID",Int32::typeid );
DataColumn^ cCustName = gcnew DataColumn( "CustName" );
tCust->Columns->Add( cCustID );
tCust->Columns->Add( cCustName );
// Create three columns, and add them to the second table.
DataColumn^ cID = gcnew DataColumn( "CustID",Int32::typeid );
DataColumn^ cOrderDate = gcnew DataColumn( "orderDate",DateTime::typeid );
DataColumn^ cOrderAmount = gcnew DataColumn( "OrderAmount",Decimal::typeid );
tOrders->Columns->Add( cOrderAmount );
tOrders->Columns->Add( cID );
tOrders->Columns->Add( cOrderDate );
// Add the tables to the DataSet.
ds->Tables->Add( tCust );
ds->Tables->Add( tOrders );
// Create a DataRelation, and add it to the DataSet.
DataRelation^ dr = gcnew DataRelation( "custToOrders",cCustID,cID );
ds->Relations->Add( dr );
/* Populate the tables. For each customer and order,
create two DataRow variables. */
DataRow^ newRow1; // = new DataRow();
DataRow^ newRow2; // = new DataRow();
// Create three customers in the Customers Table.
for ( int i = 1; i < 4; i++ )
{
newRow1 = tCust->NewRow();
newRow1[ "custID" ] = i;
// Add the row to the Customers table.
tCust->Rows->Add( newRow1 );
}
tCust->Rows[ 0 ][ "custName" ] = "Alpha";
tCust->Rows[ 1 ][ "custName" ] = "Beta";
tCust->Rows[ 2 ][ "custName" ] = "Omega";
// For each customer, create five rows in the Orders table.
for ( int i = 1; i < 4; i++ )
{
for ( int j = 1; j < 6; j++ )
{
newRow2 = tOrders->NewRow();
newRow2[ "CustID" ] = i;
newRow2[ "orderDate" ] = System::DateTime( 2001, i, j * 2 );
newRow2[ "OrderAmount" ] = i * 10 + j * .1;
// Add the row to the Orders table.
tOrders->Rows->Add( newRow2 );
}
}
}
};
int main()
{
Application::Run( gcnew Form1 );
}
import System.*;
import System.Data.*;
import System.Drawing.*;
import System.Globalization.*;
import System.Windows.Forms.*;
public class Form1 extends System.Windows.Forms.Form
{
private System.ComponentModel.Container components;
private Button button1;
private Button button2;
private Button button3;
private Button button4;
private TextBox text1;
private TextBox text2;
private TextBox text3;
private BindingManagerBase bmCustomers;
private BindingManagerBase bmOrders;
private DataSet ds;
private DateTimePicker dateTimePicker1;
public Form1()
{
// Required for Windows Form Designer support.
InitializeComponent();
// Call SetUp to bind the controls.
SetUp();
} //Form1
private void InitializeComponent()
{
// Create the form and its controls.
this.components = new System.ComponentModel.Container();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.text1 = new System.Windows.Forms.TextBox();
this.text2 = new System.Windows.Forms.TextBox();
this.text3 = new System.Windows.Forms.TextBox();
this.dateTimePicker1 = new DateTimePicker();
this.set_Text("Binding Sample");
this.set_ClientSize(new System.Drawing.Size(450, 200));
button1.set_Location(new System.Drawing.Point(24, 16));
button1.set_Size(new System.Drawing.Size(64, 24));
button1.set_Text("<");
button1.add_Click(new System.EventHandler(button1_Click));
button2.set_Location(new System.Drawing.Point(90, 16));
button2.set_Size(new System.Drawing.Size(64, 24));
button2.set_Text(">");
button2.add_Click(new System.EventHandler(button2_Click));
button3.set_Location(new System.Drawing.Point(90, 100));
button3.set_Size(new System.Drawing.Size(64, 24));
button3.set_Text("<");
button3.add_Click(new System.EventHandler(button3_Click));
button4.set_Location(new System.Drawing.Point(150, 100));
button4.set_Size(new System.Drawing.Size(64, 24));
button4.set_Text(">");
button4.add_Click(new System.EventHandler(button4_Click));
text1.set_Location(new System.Drawing.Point(24, 50));
text1.set_Size(new System.Drawing.Size(150, 24));
text2.set_Location(new System.Drawing.Point(190, 50));
text2.set_Size(new System.Drawing.Size(150, 24));
text3.set_Location(new System.Drawing.Point(290, 150));
text3.set_Size(new System.Drawing.Size(150, 24));
dateTimePicker1.set_Location(new System.Drawing.Point(90, 150));
dateTimePicker1.set_Size(new System.Drawing.Size(200, 800));
this.get_Controls().Add(button1);
this.get_Controls().Add(button2);
this.get_Controls().Add(button3);
this.get_Controls().Add(button4);
this.get_Controls().Add(text1);
this.get_Controls().Add(text2);
this.get_Controls().Add(text3);
this.get_Controls().Add(dateTimePicker1);
} //InitializeComponent
protected void Dispose(boolean disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
super.Dispose(disposing);
} //Dispose
public static void main(String[] args)
{
Application.Run(new Form1());
} //main
private void SetUp()
{
// Create a DataSet with two tables and one relation.
MakeDataSet();
BindControls();
} //SetUp
protected void BindControls()
{
/* Create two Binding objects for the first two TextBox
controls. The data-bound property for both controls
is the Text property. The data source is a DataSet
(ds). The data member is the
"TableName.ColumnName" string.
*/
text1.get_DataBindings().Add(new Binding("Text", ds,
"customers.custName"));
text2.get_DataBindings().Add(new Binding("Text", ds,
"customers.custID"));
/* Bind the DateTimePicker control by adding a new Binding.
The data member of the DateTimePicker is a
TableName.RelationName.ColumnName string.
*/
dateTimePicker1.get_DataBindings().Add(new Binding("Value", ds,
"customers.CustToOrders.OrderDate"));
/* Add event delegates for the Parse and Format events to a
new Binding object, and add the object to the third
TextBox control's BindingsCollection. The delegates
must be added before adding the Binding to the
collection; otherwise, no formatting occurs until
the Current object of the BindingManagerBase for
the data source changes.
*/
Binding b = new Binding("Text", ds,
"customers.custToOrders.OrderAmount");
b.add_Parse(new ConvertEventHandler(CurrencyStringToDecimal));
b.add_Format(new ConvertEventHandler(DecimalToCurrencyString));
text3.get_DataBindings().Add(b);
// Get the BindingManagerBase for the Customers table.
bmCustomers = this.get_BindingContext().get_Item(ds, "Customers");
/* Get the BindingManagerBase for the Orders table using the
RelationName.
*/
bmOrders = this.get_BindingContext().get_Item(ds,
"customers.CustToOrders");
} //BindControls
private void DecimalToCurrencyString(Object sender, ConvertEventArgs cevent)
{
/* This method is the Format event handler. Whenever the
control displays a new value, the value is converted from
its native Decimal type to a string. The ToString method
then formats the value as a Currency, by using the
formatting character "c".
*/
// The application can only convert to string type.
if (!cevent.get_DesiredType().Equals(String.class.ToType())) {
return;
}
cevent.set_Value(((System.Decimal)(cevent.get_Value())).ToString("c"));
} //DecimalToCurrencyString
private void CurrencyStringToDecimal(Object sender, ConvertEventArgs cevent)
{
/* This method is the Parse event handler. The Parse event
occurs whenever the displayed value changes. The static
ToDecimal method of the Convert class converts the
value back to its native Decimal type.
*/
// Can only convert to decimal type.
if (!cevent.get_DesiredType().Equals(System.Decimal.class.ToType())) {
return;
}
cevent.set_Value(Decimal.Parse(cevent.get_Value().ToString(),
NumberStyles.Currency, null));
/* To see that no precision is lost, print the unformatted
value. For example, changing a value to "10.0001"
causes the control to display "10.00", but the
unformatted value remains "10.0001".
*/
Console.WriteLine(cevent.get_Value());
} //CurrencyStringToDecimal
protected void button1_Click(Object sender, System.EventArgs e)
{
// Go to the previous item in the Customer list.
bmCustomers.set_Position(bmCustomers.get_Position() - 1);
} //button1_Click
protected void button2_Click(Object sender, System.EventArgs e)
{
// Go to the next item in the Customer list.
bmCustomers.set_Position(bmCustomers.get_Position() + 1);
} //button2_Click
protected void button3_Click(Object sender, System.EventArgs e)
{
// Go to the previous item in the Orders list.
bmOrders.set_Position(bmOrders.get_Position() - 1);
} //button3_Click
protected void button4_Click(Object sender, System.EventArgs e)
{
// Go to the next item in the Orders list.
bmOrders.set_Position(bmOrders.get_Position() + 1);
} //button4_Click
// Create a DataSet with two tables and populate it.
private void MakeDataSet()
{
// Create a DataSet.
ds = new DataSet("myDataSet");
// Create two DataTables.
DataTable tCust = new DataTable("Customers");
DataTable tOrders = new DataTable("Orders");
// Create two columns, and add them to the first table.
DataColumn cCustID = new DataColumn("CustID", int.class.ToType());
DataColumn cCustName = new DataColumn("CustName");
tCust.get_Columns().Add(cCustID);
tCust.get_Columns().Add(cCustName);
// Create three columns, and add them to the second table.
DataColumn cID = new DataColumn("CustID", int.class.ToType());
DataColumn cOrderDate = new DataColumn("orderDate",
DateTime.class.ToType());
DataColumn cOrderAmount = new DataColumn("OrderAmount",
System.Decimal.class.ToType());
tOrders.get_Columns().Add(cOrderAmount);
tOrders.get_Columns().Add(cID);
tOrders.get_Columns().Add(cOrderDate);
// Add the tables to the DataSet.
ds.get_Tables().Add(tCust);
ds.get_Tables().Add(tOrders);
// Create a DataRelation, and add it to the DataSet.
DataRelation dr = new DataRelation("custToOrders", cCustID, cID);
ds.get_Relations().Add(dr);
/* Populate the tables. For each customer and order,
create two DataRow variables.
*/
DataRow newRow1;
DataRow newRow2;
// Create three customers in the Customers Table.
for (int i = 1; i < 4; i++) {
newRow1 = tCust.NewRow();
newRow1.set_Item("custID", (Int32)i);
// Add the row to the Customers table.
tCust.get_Rows().Add(newRow1);
}
// Give each customer a distinct name.
tCust.get_Rows().get_Item(0).set_Item("custName", "Alpha");
tCust.get_Rows().get_Item(1).set_Item("custName", "Beta");
tCust.get_Rows().get_Item(2).set_Item("custName", "Omega");
// For each customer, create five rows in the Orders table.
for (int i = 1; i < 4; i++) {
for (int j = 1; j < 6; j++) {
newRow2 = tOrders.NewRow();
newRow2.set_Item("CustID", (Int32)i);
newRow2.set_Item("orderDate", new DateTime(2001, i, j * 2));
newRow2.set_Item("OrderAmount",
(System.Double)(i * 10 + j * 0.1));
// Add the row to the Orders table.
tOrders.get_Rows().Add(newRow2);
}
}
} //MakeDataSet
} //Form1
import System;
import System.Data;
import System.Drawing;
import System.Globalization;
import System.Windows.Forms;
public class Form1 extends System.Windows.Forms.Form
{
private var components : System.ComponentModel.Container;
private var button1 : Button;
private var button2 : Button;
private var button3 : Button;
private var button4 : Button;
private var text1 : TextBox;
private var text2 : TextBox;
private var text3 : TextBox;
private var bmCustomers : BindingManagerBase;
private var bmOrders : BindingManagerBase;
private var ds : DataSet;
private var DateTimePicker1 : DateTimePicker;
public function Form1()
{
// Required for Windows Form Designer support.
InitializeComponent();
// Call SetUp to bind the controls.
SetUp();
}
private function InitializeComponent()
{
// Create the form and its controls.
this.components = new System.ComponentModel.Container();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.text1= new System.Windows.Forms.TextBox();
this.text2= new System.Windows.Forms.TextBox();
this.text3= new System.Windows.Forms.TextBox();
this.DateTimePicker1 = new DateTimePicker();
this.Text = "Binding Sample";
this.ClientSize = new System.Drawing.Size(450, 200);
button1.Location = new System.Drawing.Point(24, 16);
button1.Size = new System.Drawing.Size(64, 24);
button1.Text = "<";
button1.add_Click(button1_Click);
button2.Location = new System.Drawing.Point(90, 16);
button2.Size = new System.Drawing.Size(64, 24);
button2.Text = ">";
button2.add_Click(button2_Click);
button3.Location = new System.Drawing.Point(90, 100);
button3.Size = new System.Drawing.Size(64, 24);
button3.Text = "<";
button3.add_Click(button3_Click);
button4.Location = new System.Drawing.Point(150, 100);
button4.Size = new System.Drawing.Size(64, 24);
button4.Text = ">";
button4.add_Click(button4_Click);
text1.Location = new System.Drawing.Point(24, 50);
text1.Size = new System.Drawing.Size(150, 24);
text2.Location = new System.Drawing.Point(190, 50);
text2.Size = new System.Drawing.Size(150, 24);
text3.Location = new System.Drawing.Point(290, 150);
text3.Size = new System.Drawing.Size(150, 24);
DateTimePicker1.Location = new System.Drawing.Point(90, 150);
DateTimePicker1.Size = new System.Drawing.Size(200, 800);
this.Controls.Add(button1);
this.Controls.Add(button2);
this.Controls.Add(button3);
this.Controls.Add(button4);
this.Controls.Add(text1);
this.Controls.Add(text2);
this.Controls.Add(text3);
this.Controls.Add(DateTimePicker1);
}
protected override function Dispose(disposing : boolean){
if( disposing ){
if (components != null){
components.Dispose();}
}
super.Dispose( disposing );
}
public static function Main()
{
Application.Run(new Form1());
}
private function SetUp()
{
// Create a DataSet with two tables and one relation.
MakeDataSet();
BindControls();
}
protected function BindControls()
{
/* Create two Binding objects for the first two TextBox
controls. The data-bound property for both controls
is the Text property. The data source is a DataSet
(ds). The data member is the
"TableName.ColumnName" string. */
text1.DataBindings.Add(new Binding
("Text", ds, "customers.custName"));
text2.DataBindings.Add(new Binding
("Text", ds, "customers.custID"));
/* Bind the DateTimePicker control by adding a new Binding.
The data member of the DateTimePicker is a
TableName.RelationName.ColumnName string. */
DateTimePicker1.DataBindings.Add(new
Binding("Value", ds, "customers.CustToOrders.OrderDate"));
/* Add event delegates for the Parse and Format events to a
new Binding object, and add the object to the third
TextBox control's BindingsCollection. The delegates
must be added before adding the Binding to the
collection; otherwise, no formatting occurs until
the Current object of the BindingManagerBase for
the data source changes. */
var b : Binding = new Binding
("Text", ds, "customers.custToOrders.OrderAmount");
b.add_Parse(CurrencyStringToDecimal);
b.add_Format(DecimalToCurrencyString);
text3.DataBindings.Add(b);
// Get the BindingManagerBase for the Customers table.
bmCustomers = this.BindingContext [ds, "Customers"];
/* Get the BindingManagerBase for the Orders table using the
RelationName. */
bmOrders = this.BindingContext[ds, "customers.CustToOrders"];
}
private function DecimalToCurrencyString(sender, cevent : ConvertEventArgs)
{
/* This method is the Format event handler. Whenever the
control displays a new value, the value is converted from
its native Decimal type to a string. The ToString method
then formats the value as a Currency, by using the
formatting character "c". */
// The application can only convert to string type.
if(cevent.DesiredType != String.GetType()) return;
cevent.Value = (Decimal(cevent.Value)).ToString("c");
}
private function CurrencyStringToDecimal(sender, cevent : ConvertEventArgs)
{
/* This method is the Parse event handler. The Parse event
occurs whenever the displayed value changes. The static
ToDecimal method of the Convert class converts the
value back to its native Decimal type. */
// Can only convert to Decimal type.
if(cevent.DesiredType != Decimal.GetType()) return;
cevent.Value = Decimal.Parse(cevent.Value.ToString(),
NumberStyles.Currency, null);
/* To see that no precision is lost, print the unformatted
value. For example, changing a value to "10.0001"
causes the control to display "10.00", but the
unformatted value remains "10.0001". */
Console.WriteLine(cevent.Value);
}
protected function button1_Click(sender, e : System.EventArgs)
{
// Go to the previous item in the Customer list.
bmCustomers.Position -= 1;
}
protected function button2_Click(sender, e : System.EventArgs)
{
// Go to the next item in the Customer list.
bmCustomers.Position += 1;
}
protected function button3_Click(sender, e : System.EventArgs)
{
// Go to the previous item in the Orders list.
bmOrders.Position-=1;
}
protected function button4_Click(sender, e : System.EventArgs)
{
// Go to the next item in the Orders list.
bmOrders.Position+=1;
}
// Create a DataSet with two tables and populate it.
private function MakeDataSet()
{
// Create a DataSet.
ds = new DataSet("myDataSet");
// Create two DataTables.
var tCust : DataTable = new DataTable("Customers");
var tOrders : DataTable= new DataTable("Orders");
// Create two columns, and add them to the first table.
var cCustID : DataColumn = new DataColumn("CustID", Int32);
var cCustName : DataColumn = new DataColumn("CustName");
tCust.Columns.Add(cCustID);
tCust.Columns.Add(cCustName);
// Create three columns, and add them to the second table.
var cID : DataColumn =
new DataColumn("CustID", Int32);
var cOrderDate : DataColumn =
new DataColumn("orderDate", DateTime);
var cOrderAmount : DataColumn =
new DataColumn("OrderAmount", Decimal);
tOrders.Columns.Add(cOrderAmount);
tOrders.Columns.Add(cID);
tOrders.Columns.Add(cOrderDate);
// Add the tables to the DataSet.
ds.Tables.Add(tCust);
ds.Tables.Add(tOrders);
// Create a DataRelation, and add it to the DataSet.
var dr : DataRelation = new DataRelation
("custToOrders", cCustID , cID);
ds.Relations.Add(dr);
/* Populate the tables. For each customer and order,
create two DataRow variables. */
var newRow1 : DataRow;
var newRow2 : DataRow;
// Create three customers in the Customers Table.
for(var i : int = 1; i < 4; i++)
{
newRow1 = tCust.NewRow();
newRow1["custID"] = i;
// Add the row to the Customers table.
tCust.Rows.Add(newRow1);
}
// Give each customer a distinct name.
tCust.Rows[0]["custName"] = "Alpha";
tCust.Rows[1]["custName"] = "Beta";
tCust.Rows[2]["custName"] = "Omega";
// For each customer, create five rows in the Orders table.
for(var j : int = 1; j < 4; j++)
{
for(var k : int = 1; k < 6; k++)
{
newRow2 = tOrders.NewRow();
newRow2["CustID"]= j;
newRow2["orderDate"]= new DateTime(2001, j, k * 2);
newRow2["OrderAmount"] = j * 10 + k * .1;
// Add the row to the Orders table.
tOrders.Rows.Add(newRow2);
}
}
}
}
Vererbungshierarchie
System.Object
System.Windows.Forms.Binding
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0, 1.0
Siehe auch
Referenz
Binding-Member
System.Windows.Forms-Namespace
BindingContext
BindingManagerBase
ComboBox
DataGrid