[C#]データバインディングについて
[C#]データバインディングについて
現在、C#でデータバインディングを実装したくて以下のサイトを見てその通りに書いて、コンパイルはできたのですが、インスタンスへのアクセス方法が分かりません。
http://kitunechan.hatenablog.jp/entry/2015/04/16/123314
最後の行で
this.バインドするクラスBindingSource.DataSource = new バインドするクラス();
として、バインドするインスタンスを作成していますが、このインスタンスへどうやってアクセスしたらいいんでしょうか?this.バインドするクラスBindingSource.DataSource.としても何もメンバーとかが出てきません。
http://kitunechan.hatenablog.jp/entry/2015/04/16/123314
最後の行で
this.バインドするクラスBindingSource.DataSource = new バインドするクラス();
として、バインドするインスタンスを作成していますが、このインスタンスへどうやってアクセスしたらいいんでしょうか?this.バインドするクラスBindingSource.DataSource.としても何もメンバーとかが出てきません。
Re: [C#]データバインディングについて
http://dixq.net/forum/viewtopic.php?f=3&t=18676
に書いたようにWPFアプリでは xaml で簡単に記述できますがFormアプリの場合は見られたサイトのように説明が複雑になっています。(^^;
使われているVisualStudioのVersion と作られたコードを提示頂ければわかりやすく説明が出来ると思いますので詳しい説明を送ってください。
に書いたようにWPFアプリでは xaml で簡単に記述できますがFormアプリの場合は見られたサイトのように説明が複雑になっています。(^^;
使われているVisualStudioのVersion と作られたコードを提示頂ければわかりやすく説明が出来ると思いますので詳しい説明を送ってください。
Re: [C#]データバインディングについて
上記のコードでは、単純にバインドするだけです。プログラミング勉強中 さんが書きました:this.バインドするクラスBindingSource.DataSource = new バインドするクラス();
として、バインドするインスタンスを作成していますが、このインスタンスへどうやってアクセスしたらいいんでしょうか?this.バインドするクラスBindingSource.DataSource.としても何もメンバーとかが出てきません。
DataSourceプロパティはobject型なので,object型にないメンバーへはキャスト無しにアクセスすることは出来ません。
バインドするクラスのインスタンスを別途newし,それをprivateなフィールドなりに保持してしまえば,DataSourceに設定してもフィールド経由でアクセスできます。
オフトピック
個人的には,Formでnewするのではなく,コンストラクタ等でModel (or ViewModel, Presenter, etc.) を渡す構造にします。
そうすることで,Viewとそれ以外の分離がしやすくなるためです。
WinFormのデザイナの都合上,引数無しのコンストラクタは必須ですが。
そうすることで,Viewとそれ以外の分離がしやすくなるためです。
WinFormのデザイナの都合上,引数無しのコンストラクタは必須ですが。
この方向の変更を通知したい場合は,
- INotifyPropertyChangedを実装する
- (プロパティ名)Changedというイベント(プロパティ名がTextならTextChanged)を用意する
Re: [C#]データバインディングについて
私のホームページ
http://powershell-vb-memo.nisinippon.com/form.html
をご覧下さい。
http://powershell-vb-memo.nisinippon.co ... m0201.html
のようにすればいいはずです。
大分以前にかいたので質問していただけばと思います。
http://powershell-vb-memo.nisinippon.com/form.html
をご覧下さい。
http://powershell-vb-memo.nisinippon.co ... m0201.html
のようにすればいいはずです。
大分以前にかいたので質問していただけばと思います。
Re: [C#]データバインディングについて
何の設定もしてないtextBox2で試してみました。
http://powershell-vb-memo.nisinippon.co ... 1.htmlを参考に
this.textBox2.DataBindings.Add(new Binding("Text", d, "data1"));
d.data1="abc";
と書きましたが、それでもtextBox2は空のままでした。
このコードを書けばプロパティで何操作する必要はないのでしょうか?それが足りないのかもしれません。
http://powershell-vb-memo.nisinippon.co ... 1.htmlを参考に
this.textBox2.DataBindings.Add(new Binding("Text", d, "data1"));
d.data1="abc";
と書きましたが、それでもtextBox2は空のままでした。
このコードを書けばプロパティで何操作する必要はないのでしょうか?それが足りないのかもしれません。
Re: [C#]データバインディングについて
VisualStudioのVersionはVS2017Communityでしょうか?。
全体のコードを送れますか。
http://powershell-vb-memo.nisinippon.co ... 1.html
はエラーでわかりませんが。(^^;
全体のコードを送れますか。
http://powershell-vb-memo.nisinippon.co ... 1.html
はエラーでわかりませんが。(^^;
Re: [C#]データバインディングについて
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
DataSrc d;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.d = new DataSrc(); // データソースのインスタンス化
d.Name = "abc"; // データソースの値を設定する
this.textBox1.DataBindings.Add(new Binding("Text", d, "Name")); // データバインディング
}
}
}
// データソースとなるクラスを作る //////////////////////////////////////////////
public class DataSrc
{
public string Name { get; set; } // プロパティを設定すること
}
////////////////////////////////////////////////////////////////////////////////
Re: [C#]データバインディングについて
通常実務ではデータソースとしてSQLサーバー、ACCESSデータベース、xmlデータ等が想定されているのでそれを用意しておきますね。
Re: [C#]データバインディングについて
以下は解説動画。
C# WinForm Property Bindings
現段階ですべてを理解するのは無理かと思いますが、この動画の内容程度なら見て真似をすれば理解するための最初の1歩を踏み出すくらいの経験は積めます。
C# WinForm Property Bindings
現段階ですべてを理解するのは無理かと思いますが、この動画の内容程度なら見て真似をすれば理解するための最初の1歩を踏み出すくらいの経験は積めます。
Re: [C#]データバインディングについて
ボタンを追加します。OneWayだからこの様になります。
TwoWayにするにはインターフェイスINotifyPropertyChangedを実装します。
http://powershell-vb-memo.nisinippon.co ... m0202.html
TwoWayにするにはインターフェイスINotifyPropertyChangedを実装します。
http://powershell-vb-memo.nisinippon.co ... m0202.html
Re: [C#]データバインディングについて
VS2017:TwoWay実装
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
DataSrc d;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.d = new DataSrc(); // データソースのインスタンス化
d.Name = "abc"; // データソースの値を設定する
this.textBox1.DataBindings.Add(new Binding("Text", d, "Name")); // データバインディング
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(d.Name);
}
private void button2_Click(object sender, EventArgs e)
{
d.Name = textBox2.ToString();
}
}
}
// データソースとなるクラスを作る //////////////////////////////////////////////
public class NofityPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String prop)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
public class DataSrc : NofityPropertyChanged
{
private string privName;
public string Name // プロパティNameにNotifyPropertyChanged付加
{
get { return privName; }
set // セッター側に
{
if (value != privName)
{
privName = value;
NotifyPropertyChanged("Name");
}
}
}
}
////////////////////////////////////////////////////////////////////////////////
Re: [C#]データバインディングについて
Mathさんご返信ありがとうございます。
this.d = new bindclass();
d.data1 = 1;
this.textBox2.DataBindings.Add(new Binding("Text", d, "data1"));
これだと表示されました。
this.d = new bindclass();
this.textBox2.DataBindings.Add(new Binding("Text", d, "data1"));
d.data1 = 1;
これだと表示されません。
さすがに意味が分かりませんでした。
this.d = new bindclass();
d.data1 = 1;
this.textBox2.DataBindings.Add(new Binding("Text", d, "data1"));
これだと表示されました。
this.d = new bindclass();
this.textBox2.DataBindings.Add(new Binding("Text", d, "data1"));
d.data1 = 1;
これだと表示されません。
さすがに意味が分かりませんでした。
Re: [C#]データバインディングについて
C# Form アプリケーションではあまり利点が見当たらないですものね。
WPFでは普通に使われる技術で便利なのですが Formアプリケーションではあまり利点はなく逆に応用しようとするといきづまります。
XAMLを使わないのであればあまり深入りしないでいいと思います。
VS2013でも動くはずなので (TwoWayの動作のことを言ってると思うので)コードをコピーして動かすと分かると思いますけど。
WPFでは普通に使われる技術で便利なのですが Formアプリケーションではあまり利点はなく逆に応用しようとするといきづまります。
XAMLを使わないのであればあまり深入りしないでいいと思います。
VS2013でも動くはずなので (TwoWayの動作のことを言ってると思うので)コードをコピーして動かすと分かると思いますけど。
Re: [C#]データバインディングについて
私のホームページにあるようにDataGridViewにデータベースを表示させたり 入力・出力画面を作ったりするときは便利です。
(使わないでも出来る)
INotifyPropertyChangedインターフェースについてググって見れば情報は沢山あると思います。
(使わないでも出来る)
INotifyPropertyChangedインターフェースについてググって見れば情報は沢山あると思います。
Re: [C#]データバインディングについて
Formのデータバインディングについて
https://msdn.microsoft.com/ja-jp/librar ... .110).aspx
WPFのデータバインディングについて
https://msdn.microsoft.com/ja-jp/librar ... .110).aspx
https://msdn.microsoft.com/ja-jp/librar ... .110).aspx
WPFのデータバインディングについて
https://msdn.microsoft.com/ja-jp/librar ... .110).aspx