using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DataBindingTest7
{
    /// <summary>
    /// 単票形式:オブジェクト と データーセット&データテーブル をバインディングした例
    /// 利便性とコードの簡潔さを考えるとオブジェクトで作業した方がよさそう?
    /// デザイナーではテキストボックス×2とボタン×2を配置
    /// </summary>
    public partial class Form1 : Form
    {
        MyClass my = new MyClass();
        DataSet ds;

        public Form1()
        {
            InitializeComponent();
            
            //こちらはオブジェクト
            my.Name = "test";
            my.ID = 12;
            textBox1.DataBindings.Add(new Binding("Text", my, "ID"));   //Bindingオブジェクトのインスタンスが中継に使われている

            //こちらはデータセット
            ds = GetDataSet();
            textBox2.DataBindings.Add(new Binding("Text",ds,"Table.ID"));

            button1.Click += new EventHandler(button1_Click);
            button2.Click += new EventHandler(button2_Click);
        }

        //データセットの作成
        private DataSet GetDataSet()
        {
            DataSet ds = new DataSet("Set");
            DataTable dt = new DataTable("Table");
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("ID", typeof(int));
            dt.Rows.Add(new object[] { "test2", 24 });
            ds.Tables.Add(dt);

            return ds;
        }

        void button1_Click(object sender, EventArgs e)
        {
            //どちらもテキストボックスの入力でバインディングによって
            //オブジェクトの値が、データセットのテーブルの値が、書き換えられている点に注目
            MessageBox.Show(my.ID.ToString() + " / " + ds.Tables["Table"].Rows[0]["ID"]);
        }
        void button2_Click(object sender, EventArgs e)
        {
            my.ID=100;                              //オブジェクト側の書き換えはリレーションが効かない
            ds.Tables["Table"].Rows[0]["ID"] = 200; //データテーブルはリレーションが効く
        }
    }

    //オブジェクト
    class MyClass
    {
        public string Name { get; set; }
        public int ID { get; set; }
    }
}
最終更新:2012年09月07日 18:07