🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

2308閲覧

TextBoxのみを利用したデータバインド

YanValCyn

総合スコア12

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/02/08 08:31

編集2021/02/09 06:28

#実現したい事

以下のようにTextBoxを2つ用意し、左側でコードを入力し(図だと「001」)フォーカスが外れたタイミングで、データバインドによって自動的に名称を取得するようにしたい。
(※図では、GrapeCity製のTextboxが表示されていますが、標準のTextBoxと同じ動きをすると考えてください)

イメージ説明

#既知の知識
例えば、以下のようにComboBoxとTextBoxを用意し、ComboBoxの値に応じてTextBoxにデータバインディングする事は実現出来ています。

イメージ説明

上記を実現するための具体的な手順は以下の通りです。

  1. データソースを追加
  2. データソースをインスタンス
  3. 各コントロールにデータバインドの設定を行う

#開発環境
Visual Studio 2019
.NET Framework 4.7.2
SQL Server v18.8

#その他お伝えしたい事
おそらくは、フォーカスを外れるタイミングで何かしらの処理(データソースへ入力値を渡す…等)を行う必要があると推測していますが、具体的にどう書いてよいのやら分からず…といった状態です。
どうぞ宜しくお願い致します。

#追記 2021-02-09
◆作成しているもの
Windows Forms

◆書いたコードについて
デザイナ上で実装しているため、コードはありません

#追記 2021-02-09_②
◆関連付けは出来ていると判断した理由

【下図の説明】
下図において、
発行者2はComboboxとtextBoxで構成されており、データバインドできています。
発行者3ではTextBoxのみで構成されており、現状、バインドがうまくいっていません。

【判断した理由】
発行者2、3に同じデータソース(DBのテーブル)を使用し、ComboBoxで選択肢を変更すると、
図のように、発行者2、3のいずれのコントロールでも値が変更されるためです。

ComboBoxを使用すれば、きちんと値が変更されるにも関わらず、発行者3のTextbox(001と入力している所)の値を変えても、他のコントロールの値は変更されないので困っています。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/02/08 08:38

> データソースへ入力値を渡す これが書けないという意味ですか?
YanValCyn

2021/02/08 23:36

コメントいただきありがとうございます。 これが書けない、という意味も勿論あります。 一方で、「フォーカスを外れるタイミングで何かしらの処理を行う必要がある」というのはあくまでも私の推測でしかないので、その推測が外れている可能性もあるな、といった認識です。
退会済みユーザー

退会済みユーザー

2021/02/08 23:48 編集

何を作っているかと開発環境を書いてください。 自分ではどこまで実装できていて、どこで躓いていて、何が分かれば解決できるか、書いたコードを質問欄にアップして説明してください。
Zuishin

2021/02/08 23:50 編集

Validated イベントのタイミングで BindingSource の DataSource プロパティにデータを入れるのが良いと思います。標準外のテキストボックスを使用している場合、ComboBox などにはある DisplayMember のようなプロパティが実装されている可能性もあるので、あった場合はそちらを使うのが簡単かもしれません。
YanValCyn

2021/02/09 01:28

SurferOnWww様 コメントありがとうございます。 >何を作っているかと開発環境を書いてください。 →申し訳ありません、以下がわかっておりません…。 ①本質問に何を作っているかをお伝えする必要はあるのでしょうか?ピンと来ていません… ②開発環境はvs2019と記載しておりますが、その他にも必要、という事でよろしいでしょうか? その場合、他にはどのような環境を記載すればよろしいでしょうか? >自分ではどこまで実装できていて、どこで躓いていて →ここは記載している認識なのですが…何か漏れていますでしょうか。ご教示いただきたいです。 >何が分かれば解決できるか、 →おそらくはデータバインドにおける、ComboBoxとTextBoxの機能差異がわかれば解決できると考えています。 >書いたコードを質問欄にアップして説明してください。 お伝えし損ねていました。申し訳ありません。 ほぼ全てデザイナで実装しているため、コードはございません。 ※以上について、不足していた情報を質問に追記させていただきます
退会済みユーザー

退会済みユーザー

2021/02/09 01:37 編集

> ①本質問に何を作っているかをお伝えする必要はあるのでしょうか?ピンと来ていません… VB.NET で作れるアプリは Windows Forms, WPF, ASP.NET Web その他いろいろありますが何ですかという質問です。TextBox というだけでは分かりません。 > ②開発環境はvs2019と記載しておりますが、その他にも必要、という事でよろしいでしょうか? .NET なのか Core なのかとそのバージョン、DB を使っているのであればそれが何かとそのバージョンぐらいは書きましょう。
YanValCyn

2021/02/09 01:38

SurferOnWww様 コメントありがとうございます。 どちらも理解しました。不勉強で申し訳ないです。 追記させていただきます。
Zuishin

2021/02/09 01:56

で、Validated イベントのタイミングで DataSource にデータを入れることの意味はまだわかりませんか?
YanValCyn

2021/02/09 02:01

Zuishin様 返信できておらず申し訳ありません。 はい、現在色々と触っているのですが、わからない所を質問できる段階まで落とし込めていない状態です。 もうしばらくお待ちいただけますでしょうか。申し訳ありません。
YanValCyn

2021/02/09 02:47

Zuishin様 おまたせしました。 おそらくは以下のように記述するのだと認識していますが、DataSourceにTextBoxで入力した値を指定する方法がわかりません。 Private Sub TextBox1_Validated(sender As Object, e As EventArgs) Handles TextBox1.Validated DataTableBindingSource.DataSource(~~~) End Sub
Zuishin

2021/02/09 02:56

プロパティなので、等号で代入できます。
YanValCyn

2021/02/09 04:06

失礼しました。 KHMHAKKOBindingSource.DataSource = ~~~ という事ですね。 がしかし、相変わらずTextBoxで入力した値を指定する方法がわかりません…。
Zuishin

2021/02/09 04:10

二つのデータに関連性が無い、あるいは関連性を消しているのでは? そうでなければ、片方からもう片方が得られるはずです。
YanValCyn

2021/02/09 04:31

関連づけは出来ているのですが、上記の「~~~」をどう書いて良いのかわかりません。
Zuishin

2021/02/09 04:35

どう関連してるのかわかる人に聞いてみたらどうでしょうか。
YanValCyn

2021/02/09 06:02

聞き方が悪いのだと思いますが、全く会話についていけてないようです。 >どう関連してるのかわかる人に聞いてみたらどうでしょうか →分かる人がいないため、こちらで質問させて頂いている次第です…。
Zuishin

2021/02/09 06:07 編集

「こちらに開示されていない二つのデータがどう関連しているのか」をこちらでいくら質問しても答えられる人はいないと思いますが。自分の昨日の夕食のメニューが何だったかネットで他人に聞くようなものです。
Zuishin

2021/02/09 06:13

> 関連づけは出来ているのですが この「出来ている」と判断した材料は何でしょうか?
YanValCyn

2021/02/09 06:18

大変失礼しました。おっしゃっていることがやっとわかりました。 今回使用しているデータソースは、DBのテーブルです。 (データソース=DBと完全に思い込んでいましたが、よくよく考えてみれば配列を始めとして色々ありえるのでした) 関連付けが出来ていると判断している理由ですが、質問内容に図をつけて説明させていただきます。
Zuishin

2021/02/09 06:55

ComboBox は複数のデータをバインドでき、そのうちどれがカレントなのかを選択できます。一方 TextBox は一つのデータしかバインドできず、テキストの変更は選択ではなく編集です。TextBox から元の行を復元するには、すべての行から TextBox に書かれたテキストを検索し、その行を特定した後、もう一つの TextBox にデータを入れる作業が必要になります。これはコードを書かなければいけません。 001 の書かれた TextBox を ComboBox にすることにより、コードを書かなくても「A社」をもう一つの TextBox に入れることができるようになりますが、それをしないのであればコードが必要になるでしょう。
Zuishin

2021/02/09 07:02

コードの書き方としては、既に書きましたが、001 の書かれた TextBox の Validated イベントハンドラを作成し、その中でデータを検索し、得られたデータをもう一つの TextBox にバインドされた BindingSource の DataSource に入れることになります。 なお、TextBox とデータをバインドしてしまうと、TextBox のテキストの変更がデータを書き換えてしまうので、バインドしない方が良いと思います。
YanValCyn

2021/02/09 07:14

>ComboBox は複数のデータをバインドでき、そのうちどれがカレントなのかを選択できます。一方 TextBox は一つのデータしかバインドできず、テキストの変更は選択ではなく編集です。 →全て氷解しました。そういう事なのですね。わかりにくい質問に辛抱強くご回答頂き、本当にありがとうございます。 そもそもとして、TextBoxにおけるデータバインドの用途を思い違いしていたという事のようです。 もしご面倒でなければ、「回答」していただけますでしょうか。 ベストアンサーにさせていただきます。 もし不要という事であれば、自己解決という事で私の方で整理して投稿したいと思っています。 本当にありがとうございましたm(_ _)m
Zuishin

2021/02/09 07:16

自己解決お願いします。
YanValCyn

2021/02/09 07:20

承知しました。 この度は大変助かりました。ありがとうございました。
guest

回答1

0

自己解決

#質問に対する結論
「実現したい事」のためにTextBoxのデータバインドを使用するのは適切ではない。

#抜け落ちていた観点
データバインドにおいて、ComboBoxとTextBoxでは機能差異がある(後述)。
TextBoxでも、ComboBoxと同じようにバインド出来ると認識していた事が誤り。

#ComboBoxとTextBoxの機能差異
ComboBox は複数のデータをバインドでき、そのうちどれがカレントなのかを選択できる。
一方、TextBox は一つのデータしかバインドできず、テキストの変更は選択ではなく編集。
(Zuishin様より教えて頂きました。大変ありがとうございました。)

#もしどうしてもタイトルのような実装がしたい場合
コードを入力する方のTextBox の Validated イベントハンドラを作成し、その中でデータを検索し、得られたデータをもう一つの TextBox にバインドされた BindingSource の DataSource に入れることになる。
(Zuishin様より教えて頂きました。大変ありがとうございました。)

投稿2021/02/09 07:33

YanValCyn

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問