none
DataGridViewComboBoxColumnのデータバインドについて RRS feed

  • 質問

  • http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=42667&forum=7&0

    こちらでも同じ質問をしていますが、回答がつきにくい(?)ためこちらでも質問させて頂きます。

     

    DataGridViewComboBoxColumnでリスト表示とデータ連結をするために
    リスト用とデータ連結用の2つのデータテーブルを定義しています。

    データ連結用のテーブルには、リスト用テーブルに入っていないデータも含まれています。
    (例えば、リスト用のテーブルデータには (1)山田・(2)田中・(3)池田 しか入っていないが
    データ連結用のテーブルデータには (1)山田・(2)田中・(3)池田 以外に (4)川田・(5)西田 が入っている、様な感じです)

    フォームには

      DataGridView1
      ComboBox1
      データ連結BindingSource(データ連結用)
      リスト表示BindingSource(リスト表示用)


    があります。(当然ですがBindingSourceとデータセットは連結しています)

    ここでは"DisplayList"がリスト表示用テーブルのリスト名、
    "ListName"がデータ連結用テーブルに表示されるリスト名とします。
    "DisplayList"でのリストから選んだものが "ListName"にデータが格納されていきます。

    ComboBoxのデータ連結なら

    コード:
            ComboBox1.DataBindings.Add("Text", データ連結BindingSource, "ListName")
    
            ComboBox1.DataSource = リスト表示BindingSource
            ComboBox1.DisplayMember = "DisplayList"
            ComboBox1.ValueMember = "Value"
    
            ComboBox1.Name = "ComboBoxName"
    


    ComboBoxだけなら、リスト表示テーブルにデータが入っていなくても、表示する分には問題ありません。リストもリスト表示用からの分が正常に表示されます。

    しかしDataGridViewComboBoxColumnだと、リスト表示テーブルにデータが入っていないと、表示する時にエラーになってしまいます。
    コード:
            Dim col As New DataGridViewComboBoxColumn
    
            col.DataSource = リスト表示BindingSource
            col.DisplayMember = "DisplayList"
            col.ValueMember = "Value"
    
            col.Name = "Name"
            col.HeaderText = "HeaderText"
    
            DataGridView1.Columns.Add(col)
    


    データソースの指定をデータ連結BindingSourceにすれば表示はできるのですが、今度はリスト表示がおかしくなります。
    DataGridViewComboBoxColumnで、リスト表示テーブルにデータが入っていなくても
    表示できるように(リストはリスト表示テーブルの内容に)したいのですが、どうすればよいのでしょうか?
    要はComboBoxでいうところの
    コード:
    ComboBox1.DataBindings.Add("Text", データ連結BindingSource, "ListName")
    


    上記の一文(データバインド)にあたるものがあればそれでできるとは思うのですが・・・

    2007年12月12日 7:57

回答

すべての返信

  • 次が参考になるんじゃないでしょうか?

     

    Problem with combobox and databound datagridview

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=13855&SiteID=1

    2007年12月13日 11:44
    モデレータ
  • >ComboBox1.DataBindings.Add("Text", データ連結BindingSource, "ListName")
    

    >上記の一文(データバインド)にあたるものがあればそれでできるとは思うのですが・・・

    col.DataPropertyName を使ってください。

    対応するDataSourceはDataGridViewのDataSourceです。

    2008年1月10日 11:40
  • こんにちは。中川俊輔 です。

     

    trapemiyaさん、えムナウさん、大変参考になる回答ありがとうございます。

     

    jorujuさんへ

    その後いかがでしょうか?

    問題解決に大変有効な回答のようでしたので、勝手ながらtrapemiyaさん、えムナウさんの

    回答へ回答済みチェックをつけさせていただきました。

    追加の質問等ある場合、遠慮なく投稿してください!

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    問題解決につながる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    jorujuさんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

     

    2008年1月17日 8:44