BindingContext.Item Property (Object, String)

 
System_CAPS_noteNote

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Gets a BindingManagerBase that is associated with the specified data source and data member.

Namespace:   System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

public BindingManagerBase this[
	object dataSource,
	string dataMember
] { get; }

Parameters

dataSource
Type: System.Object

The data source associated with a particular BindingManagerBase.

dataMember
Type: System.String

A navigation path containing the information that resolves to a specific BindingManagerBase.

Property Value

Type: System.Windows.Forms.BindingManagerBase

The BindingManagerBase for the specified data source and data member.

Exception Condition
Exception

The specified dataMember does not exist within the data source.

Use this overload when the BindingManagerBase manages a set of Binding objects for which the data source contains multiple objects. For example, a DataSet can contain several DataTable objects linked by DataRelation objects. In such a case, the navigation path is required to enable the BindingContext to return the correct BindingManagerBase.

System_CAPS_noteNote

The Item property will always return a BindingManagerBase, when the dataMember parameter is valid. It will never return null.

See the Binding class for a list of possible data sources and for information about creating bindings between controls and data sources.

If the desired BindingManagerBase manages a list, the navigation path must also end with a list. For example, the following C# code binds a TextBox control to the order date in a table of orders. The navigation path includes the TableName, the RelationName, and the ColumnName. However, the BindingManagerBase must be retrieved using only the TableName and RelationName (which resolves to a list).

// The navigation path for a Binding ends with a property.
textBox1.DataBindings.Add
("Text", dataSet1, "Customers.custToOrders.OrderDate");
// The navigation path for the BindingManagerBase ends with a list.
BindingManagerBase bmOrders = this.BindingContext
[dataSet1, "Customers.custToOrders"];

When returning a BindingManagerBase, you should use the same data source as the Binding and modify only the navigation path.

Use the Contains method to determine if the desired BindingManagerBase already exists.

The following code example demonstrates how to use the Item to retrieve the BindingManagerBase for a particular binding. It also shows how to handle the BindingComplete event for the BindingManagerBase to ensure multiple controls bound to the same data source remain synchronized when one of the control values is changed. To run this example, paste the code into a Windows Form and call the InitializeControlsAndData method from the form's constructor or Load event-handling method.

private void InitializeControlsAndData()
{
    // Initialize the controls and set location, size and 
    // other basic properties.
    this.dataGridView1 = new DataGridView();

    this.textBox1 = new TextBox();
    this.textBox2 = new TextBox();
    this.dataGridView1.ColumnHeadersHeightSizeMode =
        DataGridViewColumnHeadersHeightSizeMode.AutoSize;
    this.dataGridView1.Dock = DockStyle.Top;
    this.dataGridView1.Location = new Point(0, 0);
    this.dataGridView1.Size = new Size(292, 150);
    this.textBox1.Location = new Point(132, 156);
    this.textBox1.Size = new Size(100, 20);
    this.textBox2.Location = new Point(12, 156);
    this.textBox2.Size = new Size(100, 20);
    this.ClientSize = new Size(292, 266);
    this.Controls.Add(this.textBox2);
    this.Controls.Add(this.textBox1);
    this.Controls.Add(this.dataGridView1);

    // Declare the DataSet and add a table and column.
    DataSet set1 = new DataSet();
    set1.Tables.Add("Menu");
    set1.Tables[0].Columns.Add("Beverages");

    // Add some rows to the table.
    set1.Tables[0].Rows.Add("coffee");
    set1.Tables[0].Rows.Add("tea");
    set1.Tables[0].Rows.Add("hot chocolate");
    set1.Tables[0].Rows.Add("milk");
    set1.Tables[0].Rows.Add("orange juice");


    // Add the control data bindings.
    dataGridView1.DataSource = set1;
    dataGridView1.DataMember = "Menu";
    textBox1.DataBindings.Add("Text", set1,
        "Menu.Beverages", true, DataSourceUpdateMode.OnPropertyChanged);
    textBox2.DataBindings.Add("Text", set1,
        "Menu.Beverages", true, DataSourceUpdateMode.OnPropertyChanged);

    BindingManagerBase bmb = this.BindingContext[set1, "Menu"];
    bmb.BindingComplete += new BindingCompleteEventHandler(bmb_BindingComplete);

}

private void bmb_BindingComplete(object sender, BindingCompleteEventArgs e)
{
    // Check if the data source has been updated, and that no error has occured.
    if (e.BindingCompleteContext ==
        BindingCompleteContext.DataSourceUpdate && e.Exception == null)

        // If not, end the current edit.
        e.Binding.BindingManagerBase.EndCurrentEdit(); ;
}

.NET Framework
Available since 1.1
Return to top
Show: