英語で読む

次の方法で共有


方法: BindingSource ResetItem メソッドを使用して変更通知を生成する

コントロールの一部のデータ ソースでは、項目が変更、追加、または削除されたときに変更通知が生成されません。 BindingSource コンポーネントを使用すると、このようなデータ ソースにバインドし、コードから変更通知を生成できます。

このフォームでは、BindingSource コンポーネントを使用してリストを DataGridView コントロールにバインドする方法を示します。 リストは変更通知を生成しないため、リスト内の項目が変更されると、BindingSourceResetItem メソッドが呼び出されます。 .

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Diagnostics;
using System.Drawing;
using System.Data.SqlClient;
using System.Windows.Forms;

// This form demonstrates using a BindingSource to bind
// a list to a DataGridView control. The list does not
// raise change notifications, so the ResetItem method
// on the BindingSource is used.
public class Form1 : System.Windows.Forms.Form
{
    // This button causes the value of a list element to be changed.
    private Button changeItemBtn = new Button();

    // This is the DataGridView control that displays the contents
    // of the list.
    private DataGridView customersDataGridView = new DataGridView();

    // This is the BindingSource used to bind the list to the
    // DataGridView control.
    private BindingSource customersBindingSource = new BindingSource();

    public Form1()
    {
        // Set up the "Change Item" button.
        this.changeItemBtn.Text = "Change Item";
        this.changeItemBtn.Dock = DockStyle.Bottom;
        this.changeItemBtn.Click +=
            new EventHandler(changeItemBtn_Click);
        this.Controls.Add(this.changeItemBtn);

        // Set up the DataGridView.
        customersDataGridView.Dock = DockStyle.Top;
        this.Controls.Add(customersDataGridView);
        this.Size = new Size(800, 200);
        this.Load += new EventHandler(Form1_Load);
    }

    private void Form1_Load(System.Object sender, System.EventArgs e)
    {
        // Create and populate the list of DemoCustomer objects
        // which will supply data to the DataGridView.
        List<DemoCustomer> customerList = new List<DemoCustomer>();
        customerList.Add(DemoCustomer.CreateNewCustomer());
        customerList.Add(DemoCustomer.CreateNewCustomer());
        customerList.Add(DemoCustomer.CreateNewCustomer());

        // Bind the list to the BindingSource.
        this.customersBindingSource.DataSource = customerList;

        // Attach the BindingSource to the DataGridView.
        this.customersDataGridView.DataSource =
            this.customersBindingSource;
    }

    // This event handler changes the value of the CompanyName
    // property for the first item in the list.
    void changeItemBtn_Click(object sender, EventArgs e)
    {
        // Get a reference to the list from the BindingSource.
        List<DemoCustomer> customerList =
            this.customersBindingSource.DataSource as List<DemoCustomer>;

        // Change the value of the CompanyName property for the
        // first item in the list.
        customerList[0].CompanyName = "Tailspin Toys";

        // Call ResetItem to alert the BindingSource that the
        // list has changed.
        this.customersBindingSource.ResetItem(0);
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.Run(new Form1());
    }
}

// This class implements a simple customer type.
public class DemoCustomer
{
    // These fields hold the values for the public properties.
    private Guid idValue = Guid.NewGuid();
    private string customerName = String.Empty;
    private string companyNameValue = String.Empty;
    private string phoneNumberValue = String.Empty;

    // The constructor is private to enforce the factory pattern.
    private DemoCustomer()
    {
        customerName = "no data";
        companyNameValue = "no data";
        phoneNumberValue = "no data";
    }

    // This is the public factory method.
    public static DemoCustomer CreateNewCustomer()
    {
        return new DemoCustomer();
    }

    // This property represents an ID, suitable
    // for use as a primary key in a database.
    public Guid ID
    {
        get
        {
            return this.idValue;
        }
    }

    public string CompanyName
    {
        get
        {
            return this.companyNameValue;
        }

        set
        {
            this.companyNameValue = value;
        }
    }

    public string PhoneNumber
    {
        get
        {
            return this.phoneNumberValue;
        }

        set
        {
            this.phoneNumberValue = value;
        }
    }
}

コードのコンパイル

この例では、次のものが必要です。

  • System、System.Data、System.Drawing、System.Windows.Forms アセンブリへの参照。

関連項目