none
TextBoxへのバインドについて RRS feed

  • 質問

  • VB2005 SQLServer2005

    でデータ入力フォームをつくっているのですが、複数行をバインドする

    方法がわかりません。

    知っている方いましたら教えてください。

     

    ↓は動く

    DTはDataTable

    TextBox1.DataBindings.Add(New Binding("Text", DT, DT.Columns(0).ColumnName))

     

     

    ↓はエラー

    DTはDataTable

    TextBox1.DataBindings.Add(New Binding("Text", DT.Row(0), DT.Columns(0).ColumnName))

    TextBox2.DataBindings.Add(New Binding("Text", DT.Row(1), DT.Columns(0).ColumnName))

     

     

     

     

     

     

    2007年3月30日 6:12

すべての返信

  • エラーの内容ぐらい書きませう
    2007年3月30日 6:26
  • すみませんでした。

    以下エラーメッセージです。

     

    DataSource のプロパティまたは列 システムコード にバインドできません。
    パラメータ名: dataMember

     

    2007年3月30日 6:54
  • よく見るとDataRowがDataSourceに設定されていますが、そんなのできましたっけ?

    あと、どういう表がもともとあって、それをどういう風にしたいのかがわかりません。
    最初の投稿から予想するに、DataGridView(というか、タダの表)にバインドすれば
    解決するように思うのですが、そうはいかないわけでもあるのでしょうか。
    それとも予想自体が間違っているでしょうか。
    もう少しきちんと情報出さないとみなさん回答しづらいと思います。
    2007年3月30日 8:34
  •  mars12 さんからの引用
    よく見るとDataRowがDataSourceに設定されていますが、そんなのできましたっけ?


    あと、どういう表がもともとあって、それをどういう風にしたいのかがわかりません。
    最初の投稿から予想するに、DataGridView(というか、タダの表)にバインドすれば
    解決するように思うのですが、そうはいかないわけでもあるのでしょうか。
    それとも予想自体が間違っているでしょうか。
    もう少しきちんと情報出さないとみなさん回答しづらいと思います。

     

     

    1レコードの内容を自由にレイアウトして表示したいのです(Accessの詳細みたいに)。

    そこでTextBoxをレコード分作って、DataSetの内容をバインドしたいのですがうまくいきません。

     

    DataRowはDataSourceに設定できませんでした。

     

    2007年3月30日 8:51
  • C#のコードですみませんが、CurrencyManager を使うとご希望のものができますか?
    下のコードの場合、TextBox2つとButtonがFormに貼ってあって、Buttonを押すと順繰りにデータを表示します。

    private CurrencyManager currencyManager = null;

     

    public Form1()
            {
                InitializeComponent();

                DataTable dt = new DataTable();
                dt.Columns.Add("Col1");
                dt.Columns.Add("Col2");

                dt.Rows.Add("1", "新潟");
                dt.Rows.Add("2", "川崎");
                dt.Rows.Add("3", "大分");

                currencyManager = (CurrencyManager)this.BindingContext[dt];

                textBox1.DataBindings.Add(new Binding("Text", dt, dt.Columns[0].ColumnName));
                textBox2.DataBindings.Add(new Binding("Text", dt, dt.Columns[1].ColumnName));
            }

    private void button1_Click(object sender, EventArgs e)
            {
                if (currencyManager.Position < currencyManager.Count-1)
                {
                    currencyManager.Position ++;
                }
                else
                {
                    currencyManager.Position = 0;
                }
            }

    2007年3月30日 9:09
  • 複数行と書かれていますので、イメージとしては以下のようなものかと思います。
    (フォームに TextBox と Button をそれぞれ2つずつ配置)

    ただ、Button2 を何度かクリックするとわかりますが、ちゃんとした処理にするのは大変そうに思います。
    主要な値をグリッドに一覧表示しておき、選択した行について詳細情報を表示するスタイルにするなど、仕様の変更を検討された方が良いかもしれません。



    Public Class Form1
        Private _BS1 As New BindingSource
        Private _BS2 As New BindingSource

        Private Sub Button1_Click( _
                ByVal sender As System.Object, _
                ByVal e As System.EventArgs) _
                Handles Button1.Click
            Dim table1 As New DataTable
            table1.Columns.Add("項目1", GetType(String))
            table1.Rows.Add("1行目")
            table1.Rows.Add("2行目")
            table1.Rows.Add("3行目")
            table1.Rows.Add("4行目")
            table1.Rows.Add("5行目")

            _BS1.DataSource = table1
            _BS2.DataSource = table1
            Rem 2行目用にポジションをずらしておく...
            _BS2.Position = _BS2.Position + 1

            TextBox1.DataBindings.Add("Text", _BS1, "項目1")
            TextBox2.DataBindings.Add("Text", _BS2, "項目1")
        End Sub

        Private Sub Button2_Click( _
                ByVal sender As System.Object, _
                ByVal e As System.EventArgs) _
                Handles Button2.Click
            _BS1.Position = _BS1.Position + 1
            _BS2.Position = _BS2.Position + 1
        End Sub
    End Class

     


    ダウンロードしただけでまだ試せていないのですが、Orcas にそのようなコントロールがあればいいな...

    2007年3月30日 11:21
  • すみません。うまく伝わっていなくて。

    mars12 さんのコードではあくまで1画面1レコード表示になってしまいます。

     

    textbox3,textbox4 を画面に追加して、

    textbox1 は1、

    textbox2 は新潟、

    textbox3 は2、

    textbox4 は川崎、

     

    としたいのです。

     

    2007年3月31日 0:31
  • ずばり、したいのはこのコードのようなことです。

    ただ、すべての行のBindingSourceを作らないといけないのと

    処理が複雑になってしまいそうなので、もう少し調べてみます。

     

    BindingSourceをいままで使ってなかったので、サンプルありがとうございます。

     

     

     

     

    2007年3月31日 0:38
  • 現状では不可能ですね。残念ですが。もし、やるとすれば、DataGridViewの各行を、自分で描くなどすれば良いと思います。幸い、DataGridViewは、各行を自分で描くのが、以前のDataGridに比べてかなり容易になっていますので、比較的楽にできるかもしれません。

     

    そういえばこういう話題がありましたね・・・。

     

    Accessからのマイグレーション
     http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-24417.htm

    2007年3月31日 5:04
    モデレータ
  •  

    http://www.microsoft.com/japan/msdn/office/access/vbtips/form_table/

     

    ↑のサイト見つけましたので、

    参考にしながらもう少しやってみようと思います。

    皆さんありがとうございます。

     

    2007年4月1日 23:59