DataRepeaterで表示させたデータの再検索に関して

解決


misamisa  2012-11-07 16:17:39  No: 147956  IP: [192.*.*.*]

開発環境:Visual Basic 2008

教えて下さい。

DataRepeaterを使って画面ロード時にOracleから読み込んだデータをBindingSourceに連結
して表示させていますが、表示後画面上部の検索条件よりその内容を変更させたいと考えて
います。

その際に、条件のテキスト入力があったらという事で、TextChangedイベントを利用し、そこへ
ロード時と同じ記述をしましたが、下記のようなエラーとなってしまいます。

  これにより、コレクション内の2つのバインドが同じプロパティにバインドされます。
  パラメータ名:binding

同じ記述だから当たり前かもしれませんが、、、

このように、一旦表示させたデータを再検索させるような事はどのような記述をすればよいでしょうか?

よろしくお願いします。

編集 削除
shu  2012-11-07 16:53:58  No: 147957  IP: [192.*.*.*]

前スレで魔界の仮面弁士さんが書かれているBindingSource1.Filterの事ですか?

> ロード時と同じ記述をしましたが
Filterの指定のみ行えばよくコントロールへのバインドは再処理する必要はないです。

魔界の仮面弁士さん、前スレではフォローありがとうございました。

編集 削除
misamisa  2012-11-07 17:14:40  No: 147958  IP: [192.*.*.*]

shu様、何度もご回答ありがとうございます。

BindingSource1.Filterではなく、SQLで検索したものを連結したいと考えて
いますが、そのような事はできないのでしょうか、、、

初歩的な質問ばかりで申し訳ありません。

教えて下さい。

編集 削除
魔界の仮面弁士  2012-11-07 17:32:04  No: 147959  IP: [192.*.*.*]

> これにより、コレクション内の2つのバインドが同じプロパティにバインドされます。
> パラメータ名:binding

多分、「TextBox1.DataBindings.Add」を二回行ったのでしょうね。


同じプロパティに対して、複数のデータをバインドすることはできません。

TextBox1.Text プロパティに Table1.Column1 をマッピングし、
TextBox1.BackColor の方にはTable1.Column2 をマッピングする
といった形であれば、問題なく行えます。


  oDataTable = New DataTable()
  oDataTable.Columns.Add("Column1", GetType(String))
  oDataTable.Columns.Add("Column2", GetType(Color))
  oDataTable.Rows.Add("あいう", Color.White)
  oDataTable.Rows.Add("かきく", Color.Cyan)
  oDataTable.Rows.Add("さしす", Color.Yellow)

  DataGridView1.DataSource = oDataTable

  '同じコントロールだが、別のプロパティなので問題ない
  TextBox1.DataBindings.Add("Text", oDataTable, "Column1")
  TextBox1.DataBindings.Add("BackColor", oDataTable, "Column2")

  '同じ Text プロパティだが、別のコントロールなので問題ない
  TextBox2.DataBindings.Add("Text", oDataTable, "Column1")

  'Text2.Text に二回バインドしているのでエラーになる
  'TextBox2.DataBindings.Add("Text", oDataTable, "Column1")

  DataRepeater1.DataSource = oDataTable


そもそも、同じプロパティを再バインドするような事態になることが
不自然なので、元のコーディングを見直すようにしてみてください。

それでも、どうしても再バインドする必要が生じている場合には、
   TextBox2.DataBindings.Remove(TextBox2.DataBindings("Text"))
   TextBox2.DataBindings.Add("Text", oDataTable, "AnotherColumn")
のように、以前のバインド情報を一度削除してから再設定するか、
もしくは、.DataBindings.Clear を使って設定をすべて抹消した後、
改めて、必要なバインド項目を Add しなおす形となります。

編集 削除
shu  2012-11-08 07:48:34  No: 147960  IP: [192.*.*.*]

> BindingSource1.Filterではなく、SQLで検索したものを連結したいと考えて
FilterではなくDBからの再取得であればDBからdsへのデータ取得までの処理でよいです。dsをFormのコード内で参照出来る様、Private変数にしておくと処理しやすいかと思います。

編集 削除
misamisa  2012-11-08 09:33:39  No: 147961  IP: [192.*.*.*]

shu様、魔界の仮面弁士様、何度もありがとうございます。

教えて頂いた内容で思い通りの動きを実現させる事ができました!

本当にありがとうございました!

編集 削除