DOBON.NET DOBON.NETプログラミング掲示板過去ログ

「DataGridでComboBoxを使う」で手入力

環境/言語:[環境:Windows2k 使用言語:vb.net]
分類:[.NET]

こんにちは。

こちらのサイトで紹介されている「DataGridComboBoxColumn.vb」を使用し
DataGridでComboboxを使用したプログラムをvb.netで作成中です。
データベースはSQLServer2000です。

やりたいことは
1.comboboxでの項目は「済」のみ
 "DisplayMember"はもちろん「済」ですが
 "ValueMember"も「済」を登録したい。
2.「済」以外のデータを手入力することも可能
 例えば文字列で「20060301」とか

なのですが、それが可能なのかどうかも分かりません。
DataGridComboBoxColumn.vbのソースを見る限りでは
できないのかな、とちょっと思っています。

1.に関してはValueMemberをStringに変えれば可能なのでしょうか?
以前、試してみたのですができなかった覚えがあります。

もし、こうやったらできるよというものがあれば
ご教授いただきたいと思います。

よろしくお願い致します。
> 1.comboboxでの項目は「済」のみ
>  "DisplayMember"はもちろん「済」ですが
>  "ValueMember"も「済」を登録したい。

これは、簡単にできました。すみません。

2の方はまだ分かりませんのでよろしくお願いします。
> 2の方はまだ分かりませんのでよろしくお願いします。

例えば、手入力で「20060301」と入れた場合に
DisplayMemberはもちろんValueMemberも「20060301」に変更したいのです。

「保存」ボタンで
adp.Update(dt)とし、データベースを更新しているのですが
変更した値を反映させることができません

どんなイベントとして発生させればよいか分からないのです。
■No15467に返信(Taitoさんの記事)
>>2の方はまだ分かりませんのでよろしくお願いします。
>
> 例えば、手入力で「20060301」と入れた場合に
> DisplayMemberはもちろんValueMemberも「20060301」に変更したいのです。

手入力された値はドロップダウンで表示されるリスト内に表示される必要はないため、DisplayMemberやValueMemberを変更する必要はないと思います。
どぼんさんの例では、FindValueMemberによって、コンボボックスに表示されている値(Textプロパティ)からValueMemberを探して、それをDataGridのセルにセットするようになっていますが、FindValueMember内で、ValueMemberが見つからなければ、そのままTextプロパティの値を返してあげるようにすれば良いのではないでしょうか?

参考にされているソースの中で、Commitをオーバーライドしている部分があると思いますので、そこを見て下さい。そこで、DataGridのセルに、コンボボックスのTextプロパティの値をセットしているはずです。なので、そのまま動きそうな気がしますが、どう動かないのでしょうか?
■No15475に返信(trapemiyaさんの記事)
> 手入力された値はドロップダウンで表示されるリスト内に表示される必要はないため、DisplayMemberやValueMemberを変更する必要はないと思います。
> どぼんさんの例では、FindValueMemberによって、コンボボックスに表示されている値(Textプロパティ)からValueMemberを探して、それをDataGridのセルにセットするようになっていますが、FindValueMember内で、ValueMemberが見つからなければ、そのままTextプロパティの値を返してあげるようにすれば良いのではないでしょうか?
>
> 参考にされているソースの中で、Commitをオーバーライドしている部分があると思いますので、そこを見て下さい。そこで、DataGridのセルに、コンボボックスのTextプロパティの値をセットしているはずです。なので、そのまま動きそうな気がしますが、どう動かないのでしょうか?

trapemiyaさん返信ありがとうございます。
DataGridには、データベースから取ってきたデータをデータテーブルに格納し、それを表示しています。
その中の一つの項目だけ編集可で、今まで手入力だったのですがそこに「済」を簡単に入力できるようにしたいとのことでしたので、コンボボックスにしようと考えました。もちろん、手入力もあります。

trapemiyaさんのおっしゃる通り、データベースに「済」以外のものが入っている場合は、ちゃんと表示できるように変更済みです。

しかし、保存ボタンでデータベース書込みに行くときに反映されないのです。

だから、実際のデータテーブルにはデータが更新されていないのだろうと思います。
画面上に表示されているだけでは駄目みたいなので…。

なので、ValueMemberを更新する必要があるのかな?と思った訳ですが
その必要がないのでしょうか?更新するタイミングと手法が分かりません。
手入力の時は、イベントをどう発生させればよいかが分かりません。
コンボボックスを触ったときはイベント発生するのですが…。

DOBON.NET | プログラミング道 | プログラミング掲示板