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