BindingContext クラスとは? わかりやすく解説

BindingContext クラス

Control クラスから継承されるすべてのオブジェクトについて、BindingManagerBase オブジェクトコレクション管理します

名前空間: System.Windows.Forms
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)
構文構文

Public Class BindingContext
    Implements ICollection, IEnumerable
Dim instance As BindingContext
public class BindingContext : ICollection,
 IEnumerable
public ref class BindingContext : ICollection,
 IEnumerable
public class BindingContext implements ICollection,
 IEnumerable
public class BindingContext implements ICollection,
 IEnumerable
解説解説

Windows フォームには、そのフォームBindingManagerBase オブジェクト管理する BindingContext オブジェクト少なくとも 1 つ存在しますBindingManagerBase クラス抽象クラスであるため、Item プロパティ戻り値の型は、CurrencyManager と PropertyManager のどちらかなりますデータ ソースが、オブジェクトリストではなく単一プロパティだけを返すことのできるオブジェクト場合は、TypePropertyManager です。たとえば、データ ソースとして TextBox指定すると、PropertyManager返されます。一方データ ソースが IList または IBindingList を実装するオブジェクト場合は、CurrencyManager返されます。

Windows フォーム上のデータ ソースには、それぞれCurrencyManager または PropertyManager1 つ存在します1 つWindows フォーム複数データ ソース関連付けられていることも考えられます。その場合は、BindingContext使用することで、データ ソース関連付けられた特定の CurrencyManager取得できます

メモメモ

Item プロパティ使用すると、まだ存在しない場合は、BindingContext によって新しBindingManagerBase作成されます。この処理によって、リターン オブジェクト目的リスト (またはすべてのリスト) を管理できなくなるなどの混乱生じ場合あります無効な BindingManagerBase返されないようにするには、Contains メソッド使用して目的BindingManagerBase が既に存在するかどうか確認します

GroupBox、Panel、TabControl などのコンテナ コントロール使用してデータ連結コントロール格納する場合は、コンテナ コントロールおよびコンテナ内にあるコントロールだけで構成されBindingContext作成できます。これにより、フォーム各部分をフォーム自体BindingManagerBase オブジェクト管理できます。同じデータ ソースに対して複数BindingManagerBase オブジェクト作成する場合詳細については、BindingContext コンストラクタトピック参照してください

TextBox コントロールフォーム追加しデータセット内のテーブルの列にバインドした場合バインドされたコントロールは、そのフォームBindingContext通信します。次にBindingContext が、データ関連付け追跡する特定の CurrencyManager通信します。CurrencyManagerPosition プロパティ照会すると、対応する TextBox コントロールバインディングについて、現在のレコード報告されます。次のコード例では、TextBox コントロールが、フォームBindingContext によって、dataSet1 データセット格納されCustomers テーブルFirstName 列とバインドされます

TextBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName")

textBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName");

textBox1->DataBindings->Add("Text", dataSet1, "Customers.FirstName");

2 つ目の TextBox コントロール (TextBox2) をフォーム追加して、それを同じデータセット格納されCustomers テーブルLastName 列とバインドできますBindingContext によって 1 つ目のバインディング (TextBox1Customers.FirstName) が追跡されるため、両方テキスト ボックスが同じデータセット (DataSet1) にバインドされていても、同じ CurrencyManager使用されます。

TextBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName")

textBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName");

textBox2->DataBindings->Add("Text", dataSet1, "Customers.LastName");

TextBox2異なデータセットバインドする場合は、BindingContextCurrencyManager をもう 1 つ作成して管理します

DataSource プロパティと DisplayMember プロパティ設定方法には一貫性持たせることが大切です。そうしないと、BindingContext によって、同じデータセットに対して複数の CurrencyManager が作成されエラー発生します。これらのプロパティおよび関連付けられた BindingContext オブジェクト設定する方法を、次のコード例いくつか示します。これらのプロパティは、コード全体通じて一貫性保たれている限り次のいずれの方法使用して設定できます

ComboBox1.DataSource = DataSet1
ComboBox1.DisplayMember = "Customers.FirstName"
Me.BindingContext(dataSet1, "Customers").Position
 = 1

comboBox1.DataSource = DataSet1;
comboBox1.DisplayMember = "Customers.FirstName";
this.BindingContext[dataSet1, "Customers"].Position
 = 1;

comboBox1->DataSource = dataSet1;
comboBox1->DisplayMember = "Customers.FirstName";
this->BindingContext->get_Item(dataSet1, "Customers")->Position
 = 1;

ComboBox1.DataSource = DataSet1.Customers
ComboBox1.DisplayMember = "FirstName"
Me.BindingContext(dataSet1.Customers).Position = 1

comboBox1.DataSource = DataSet1.Customers;
comboBox1.DisplayMember = "FirstName";
this.BindingContext[dataSet1.Customers].Position = 1;

comboBox1->DataSource = dataSet1->Customers;
comboBox1->DisplayMember = "FirstName";
this->BindingContext->get_Item(dataSet1->Customers)->Position
 = 1;
メモメモ

Windows フォーム アプリケーションにおけるバインディングは、ほとんどの場合、BindingSource を通じて行われますBindingSource コンポーネントは、CurrencyManagerカプセル化し、CurrencyManagerプログラミング インターフェイス公開しますバインディングBindingSource使用する場合、"現在性" (つまり、Position) を操作するときにはBindingContext ではなくBindingSource によって公開されメンバ使用する必要があります

使用例使用例

4 つBinding オブジェクト作成して5 つコントロール (1 つの DateTimePicker コントロール4 つTextBox コントロール) を複数データ ソースバインドするコード例次に示します。さらに、BindingContext使用して、各データ ソースBindingManagerBase取得します

Protected 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 string 
   '   "TableName.ColumnName".
   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,  New ConvertEventHandler(AddressOf
 CurrencyStringToDecimal)      
   AddHandler b.Format, New ConvertEventHandler(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")

   ' Bind the fourth TextBox control's Text property to the
   ' third control's Text property.
   text4.DataBindings.Add("Text", text3, "Text")

End Sub

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 a navigation path in the form:
 
      "TableName.ColumnName". */
   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 navigation path:
      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"];

   /* Bind the fourth TextBox control's Text property to the
   third control's Text property. */
   text4.DataBindings.Add("Text", text3, "Text");
}

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 a navigation path in the form:
 
         "TableName.ColumnName". */
   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 navigation path:
         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"];

   /* Bind the fourth TextBox control's Text property to the
      third control's Text property. */
   text4->DataBindings->Add( "Text", text3, "Text" );
}
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 a navigation path in the form:
 
       "TableName.ColumnName". 
     */
    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 navigation path:
       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");

    /* Bind the fourth TextBox control's Text property to the
       third control's Text property. 
     */
    text4.get_DataBindings().Add("Text", text3, "Text");
} //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 string 
        "TableName.ColumnName". */
     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". */

     // We 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 need 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);
        }
     }
  }
}

継承階層継承階層
System.Object
  System.Windows.Forms.BindingContext
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
BindingContext メンバ
System.Windows.Forms 名前空間
BindingManagerBase
Binding クラス
BindingsCollection



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「BindingContext クラス」の関連用語

BindingContext クラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



BindingContext クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS