DataBindings プロパティ

Last Updated 2011/09/21


System.Windows.Forms.Control クラスの中に DataBindings プロパティがあります。名前から想像するとデータベースに関係しているらしいことは分かりますが、使い方がよく分かりません。そこで、テストしてみました。


DataBindings プロパティを持つ System.Windows.Forms 名前空間内のクラス

Control クラスから多くのコントロールが派生していますので、Windows フォームコントロールのすべてが DataBindings プロパティを持つと考えていいでしょう。以下に、主なコントロールのデータバインドに関係するプロパティをリストアップしますが、Tag プロパティはすべてのコントロールでデータバインドの対象となります。

DataBindings プロパティに関係するフォームコントロールのプロパティ

Button コントロールTag プロパティ
Text プロパティ
CheckBox コントロールCheckAlign プロパティ
Checked プロパティ
CheckState プロパティ
Tag プロパティ
Text プロパティ
CheckedListBox、ListBox コントロールSelectedIndex プロパティ
SelectedItem プロパティ
SelectedValue プロパティ
Tag プロパティ
CombotBox コントロールSelectedItem プロパティ
SelectedValue プロパティ
Tag プロパティ
Text プロパティ
DateTimePicker コントロールChecked プロパティ
Tag プロパティ
Text プロパティ
Value プロパティ
Label、LinkLabel コントロールTag プロパティ
Text プロパティ
MonthCalendar コントロールSelectionRange プロパティ
Tag プロパティ
RadioButton コントロールChecked プロパティ
Tag プロパティ
Text プロパティ
RichTextBox、TextBox コントロールTag プロパティ
Text プロパティ

TextBox コントロールの ListBox コントロールにデータバインドする

フォームに textBox1、textBox2、button1、listBox1、dataGridVieww1 を配置します。 button1 をクリックすると、textBox1 に 2 番目の行の顧客 ID を、textBox2 に顧客名を表示します。下図は、button1 をクリックしたあとの状態をあらわします。button2 をクリックすると listBox1 にリストアップした項目の指定のインデックスの項目にフォーカスを移動します。ここでは、顧客 ID をインデックスとして利用しました。

.Net Framework SDK のサンプルコードより実践的に作りましたので、参考になると思います。

DataBindingsTest

このサンプルコードでは、DataSet オブジェクトは 2 つのテーブルを持ちます。

namespace DataBindingsTest
{
  public partial class Form1 : Form
  {
    private DataSet FDataSet;

    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      // DataSet オブジェクトを作成する
      this.MakeDataSet();

      // dataGridView1 にデータセットを表示する
      dataGridView1.DataSource = FDataSet;
      dataGridView1.DataMember = "顧客";

      // listBox1 にデータを追加する
      listBox1.Items.Add("あいうえお");
      listBox1.Items.Add("かきくけこ");
      listBox1.Items.Add("さしすせそ");
    }

    private void button1_Click(object sender, EventArgs e)
    {
      // Text プロパティに最初のテーブルの 2 番目のデータを設定する

      textBox1.DataBindings.Add(new Binding("Text", FDataSet.Tables[0].DefaultView[1], "顧客 ID"));
      textBox2.DataBindings.Add(new Binding("Text", FDataSet.Tables[0].DefaultView[1], "顧客名"));
    }

    private void button2_Click(object sender, EventArgs e)
    {
      // SelectedIndex プロパティに最初のテーブルの 1 番目の顧客 ID (= 1)を設定する
      listBox1.DataBindings.Add("SelectedIndex", FDataSet.Tables[0].DefaultView[0], "顧客 ID");
    }

    //-------------------------------------------------------------------------------------
    // 2 つのテーブルを持つ DataSet オブジェクトを作成する
    private void MakeDataSet()
    {
      FDataSet = new DataSet("MyDataSet");

      // 2 つの DataTable オブジェクトを作成する
      DataTable tableCustomers = new DataTable("顧客");
      DataTable tableOrders = new DataTable("注文");

      // 2 つの DataColumn オブジェクトを作成し、最初のテーブルに追加する
      DataColumn columnCustomerID = new DataColumn("顧客 ID", typeof(int));
      DataColumn columnCustomerName = new DataColumn("顧客名");

      tableCustomers.Columns.Add(columnCustomerID);
      tableCustomers.Columns.Add(columnCustomerName);

      // 2 つの DataColumn オブジェクトを作成し、2 番目のテーブルに追加する
      DataColumn columnID = new DataColumn("顧客 ID", typeof(int));
      DataColumn columnOrderDate = new DataColumn("注文日時", typeof(DateTime));
      DataColumn columnOrderAmount = new DataColumn("注文数量", typeof(decimal));

      tableOrders.Columns.Add(columnOrderAmount);
      tableOrders.Columns.Add(columnID);
      tableOrders.Columns.Add(columnOrderDate);

      // DataSet オブジェクトにテーブルを追加する
      FDataSet.Tables.Add(tableCustomers);
      FDataSet.Tables.Add(tableOrders);

      // DataRelation オブジェクトを作成し、DataSet オブジェクトに追加する
      // ここでは columnCustomerID を親カラムに columnID を子カラムとする
      DataRelation dataRelation = new DataRelation("CustomersToOrders", columnCustomerID, columnID);
      FDataSet.Relations.Add(dataRelation);

      DataRow newRow1;
      DataRow newRow2;

      for (int i = 1; i < 4; i++)
      {
        newRow1 = tableCustomers.NewRow();
        newRow1["顧客 ID"] = i;

        tableCustomers.Rows.Add(newRow1);
      }

      tableCustomers.Rows[0]["顧客名"] = "豊臣秀吉";
      tableCustomers.Rows[1]["顧客名"] = "織田信長";
      tableCustomers.Rows[2]["顧客名"] = "徳川家康";

      for (int i = 1; i < 4; i++)
      {
        for (int j = 1; j < 6; j++)
        {
          newRow2 = tableOrders.NewRow();
          newRow2["顧客 ID"] = i;
          newRow2["注文日時"] = new DateTime(2001, i, j * 2);
          newRow2["注文数量"] = i * 10 + j * .1;

          tableOrders.Rows.Add(newRow2);
        }
      }
    }
  } // end of Form1 class
} // end of namespace

−以上−