- PR -

DataBindingsについて

1
投稿者投稿内容
ひつじ
会議室デビュー日: 2004/10/27
投稿数: 3
投稿日時: 2005-01-11 19:32
はじめまして。

VB.NETのDataBindingsについて質問です。

テキストコントロールにデータセットをBindさせたい場合、
textAAA.DataBindings.Add("Text", DataSet, "data")
と設定すると思うのですが、

DataSetが以下のようなXMLDocumentだった場合、
<data>
<aaa>
<bbb>123<bbb>
</aaa>
<aaa>
<bbb>456<bbb>
</aaa>
 ・・・
</data>
n番目の<bbb>をBindさせたい時はどのようにしたらよいでしょうか?

ご存知の方がいらっしゃいましたら宜しくお願い致します。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-01-11 22:28
はじめまして。

まず基礎の確認ですが、
<data>
<aaa>
<bbb>123</bbb>
</aaa>
<aaa>
<bbb>456</bbb>
</aaa>
 ……
</data>
というXMLをDataSetに読み込むと、
"data"と言う名前のDataSetに"aaa"と言うテーブル名のDataTableが一つ、"bbb"という一つのDataColumnをもって作られます。
そしてそれぞれの行に123, 456, ...と言う風に"bbb"列に値が割り振られていきます。

textBox1.Textにこの"bbb"列をバインドするには、dataSetに上記のXMLを読み込んだとして、
textBox1.DataBindings.Add("Text", dataSet.Tables["aaa"], "bbb");
と言う事になりますよね。
//Add("Text", dataSet, "aaa.bbb");ではこの場合後々不都合が出るようです。

このバインドは、このコントロールのコンテナコントロール(普通はForm)のBindingContextプロパティによって管理されます。一般的には
this.BindingContext[dataSet.Tables["aaa"]]
がこのバインドを管理するBindingManagerBaseオブジェクトですね。
このBindingManagerBaseオブジェクトの、
Countプロパティがバインドされているテーブルの行数を、
Positionプロパティが現在のバインドが指し示している行の位置を表します。

つまりこのPositionプロパティを操作する事で、任意の行にバインドする事が可能になると言うわけです。

ただし、列を複数含むテーブルを、0列目をtextBox1.Textに、1列目をtextBox2.Textにバインドする場合、
textBox1.Textのバインド行を0行目に、textBox2.Textのバインド行を1行目に、と言う事は無理のようです。
//それともなにかあるのかな?
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-01-12 08:45
同じ CurrencyManager を参照しているために同じ位置を指すので、
・別のデータソースを使用する(この場合、別の DataView を生成する)
・別の BindingContext を使用する(この場合、 theText.BindingContext = new BindingContext() ;
を行えば、それぞれ別の位置を指すことが可能です。
他にも方法はあるかもしれませんが。

[ メッセージ編集済み 編集者: にしざき 編集日時 2005-01-12 08:45 ]
ひつじ
会議室デビュー日: 2004/10/27
投稿数: 3
投稿日時: 2005-01-12 11:01
Hongliangさん、にしざきさんご返答ありがとうございます。

Hongliangさんの方法で途中までは理解できたのですが

BindingManagerBaseのあたりから分からなくなってしまいました。。
べたべたの初心者&勉強不足ですみません。

実際の設定方法はどのようにしたらよいでしょうか?
お手数おかけしますが宜しくお願いします。


Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2005-01-12 12:08
BindingManagerBase クラスについては以下の資料があります。
BindingManagerBase クラス

尚、BindingManagerBaseを取得するには、Hongliangさんの例でだと
myBindingManagerBase = textBox1.BindingContext(dataSet.Tables("aaa"))
で取得できます。
また要望のn番目のレコードにBindするには、
カレントレコードのPositionをn-1にする必要があるので
myBindingManagerBase.Position = n-1
とする。

ひつじ
会議室デビュー日: 2004/10/27
投稿数: 3
投稿日時: 2005-01-12 14:42
Os_さん、ありがとうございます。

参考になりました。
早速試してみますね。
1

スキルアップ/キャリアアップ(JOB@IT)