質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

VB.NET

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

Q&A

解決済

2回答

898閲覧

visual basicにてマスター管理画面を作成しております.

input

総合スコア3

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

VB.NET

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

0グッド

0クリップ

投稿2021/08/04 22:18

お疲れ様です.プログラミング初心者の者です.
vb.net(visualstudio2017)にて開発を行っております.
データベース(postgres)とdatagridviewの接続はうまくいったのですが,それ以上進めない状況です.
なんとか自力で解決したいのですが,ヒントだけでもいただけないかと思い初投稿させていただきました.

2点質問がございます.
1,datagridviewのレコード内容(カラム数分)を同じフォーム内の複数のcomboobxやtextboxに反映させたい
datagridview内の情報をクリックしたときに,その情報(UserIdやName,性別など)を下に設置したcomboboxやtextboxに自動で反映されるようにしたいです.

調べたこと
・hittestメソッドを使い座標情報を取得する
・clickイベントを使う

これらを調べたのですが,サンプルコードを変えてもうまく走りません.
以下サンプルコードの一部です.
Private Sub DataGrid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles DataGrid1.MouseDown
Dim htinfo As HitTestInfo = datagriwview1rid1.HitTest(e.X, e.Y)
Dim row As Integer = htinfo.Row
Dim col As Integer = htinfo.Column

'クリックされた場所の情報を取得 Select Case HT.Type Case System.Windows.Forms.DataGrid.HitTestType.None    Label1.Text = "バックグランドがクリックされました。" End Select

End Sub

「hittestinfは定義されていません」や「宣言されていません」,「'y' に対して引数が指定されていません。」などのエラーコードを解決できないでおります.
また,select caseの部分でlabel1の部分をcomboboxやtextboxの名前に変えればdatagridviewの内容をcomboboxやtextboxに反映できるのでしょうか?
ご教授いただければ幸いです。

2,datagridviewの内容を複数のcomboboxを選択することで絞りこみたい
"検索"ボタンを押すと,データベースが全件検索されるが,性別comboboxや年齢comboboxを変えると
データを絞り込ませたいです.

調べたこと
・filterやlikeを使って絞り込ませる
・sqlでif文を使う
このようなことが出てきたのでうすが,文字などで絞り込みたいのではなく,
coomboboxで選択し,"検索"を押すことで,その性別や年齢のみの該当userだけ表示させたいです.

sqlでif文を使ってチェックボタンがチェックされていれば...
のようなコードを書いている参考サイトはあったのですが,comboboxでのやり方がわかりません.
そもそもsqlの時点でif文などを使い,複雑化させるしか方法はないのでしょうか?

以上です.
初投稿でもし失礼があれば申し訳ございません.
納期が迫っており,プログラマーってこんなに大変な職業なんだなと痛感しております.

お忙しいところ恐縮ですが,ご助言ご指導いただければ幸いです.

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

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

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

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

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

gentaro

2021/08/04 22:31 編集

なんか内容がとっ散らかっててどこから突っ込むべきなのか、という感じだけども…。 最低限コードの箇所はMarkdownで書かないと読みにくいから回答されにくいし、 > 「hittestinfは定義されていません」や「宣言されていません」 というのもメッセージが出てるなら削らず全文載せるべきだし、そもそも提示のコードに「hittestinf」なんて単語が一度も出てこないからどこで出てるエラーなのかすら不明だし、「sqlでif文」というのも何を意味してるのか理解不能だし(SQLスクリプト内でIFが使えるRDBMSはあるがこれはスクリプトじゃなくて単体クエリの話をしてるんじゃないの?)、使ってるフレームワークのバージョンも書かれてないし、最後に「納期が迫って」いてこのレベルの問題すら解決できないようなら恐らく完成に漕ぎ着けないだろうから、もう今回はごめんなさいして基礎から学び直した方が良いんじゃない?
退会済みユーザー

退会済みユーザー

2021/08/04 23:06

> なんとか自力で解決したいのですが ここで聞く時点で自力ではないのでは。 納期来る前にさっさと上司と相談しなさい。
input

2021/08/04 23:36

gentaro様 radian様 返信いただきありがとうございます. 情報足らずで申し訳ありませんでした. 自身のレベルを知る上でも大変参考になりました. お時間をとっていただいてありがとうございました.
gentaro

2021/08/04 23:56

謝罪はいらないんで https://teratail.com/help/question-tips#questionTips4-2 これを読んで、ご自身の抱えている問題点を整理して質問文を修正し、ベストアンサーに選択した回答のどの部分を参考にして解決したのかを記載してください。 上司に相談できる環境でこのサイトで上司代わりをさせるのはナンセンスです。 サイトルールに則って対応してください。
input

2021/08/05 03:25

承知いたしました. 参考URLまで張っていただき大変参考になりました. ご教授いただきありがとうございました.
退会済みユーザー

退会済みユーザー

2021/08/06 00:15 編集

ほぼ何も分からない状態で実業務に投入し、進捗確認すらしない上司にも問題あるけど、判らないのに納期直前まで全く何も報告しようとしないあなたにも問題がある。早めに報告すれば、上司は代わりに他の人に作業割り振ったり、教えながら進めるなりできるので。 上司があなたが出来ないの想定内で勉強目的でやらせてるならそこまで影響はないでしょうが、状況を報告しなかった理由は当然聞かれるでしょうね。新人が判らない事だらけなのは当たり前の事ですが、報告は誰にでも出来ます。報連相はきちんとしましょう。 今のスキルで明日納期なら、もう素直に諦めましょう。 YAmaGNZさんは、調べ方のヒント等を回答してくれているので、これを機に本などを買ってしっかり基礎を身に付けた上で、自分で調べる方法を身に付けてください。新人でもベテランでも、判らなかったら調べるのは基本ですが、調べた結果を見てそれを理解するためには基礎が重要です。
guest

回答2

0

質問2については、今後のあなたのため課題を残しておきます。

質問1は、DataGridViewをクリックした時ですよね?
CellClickというイベントがあります。
セルをクリックした時、DataGridView1の現在の行の対象のカラムに対応する値をテキストボックスのTextプロパティに代入という事をすれば良いです。

Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick TextBox1.Text = DataGridView1.CurrentRow.Cells("カラム名1").Value Combobox1.Text = DataGridView1.CurrentRow.Cells("カラム名2").Value End Sub

クリックした時行選択したい場合は、フォームをロードする時などのタイミングで以下を追加してやれば良いです。

DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect

投稿2021/08/05 02:38

shinami

総合スコア334

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

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

input

2021/08/05 03:23

shinami様 回答いただきありがとうございます. 親身になっていただき感謝いたします. >クリックした時行選択したい場合は、フォームをロードする時などのタイミングで以下を追加してやれば良いです 自身で調べてもこのような解説がなかったので大変参考になります. 早速試してみます. お時間をとっていただきありがとうございました.
shinami

2021/08/06 08:12 編集

明日納期でまわりに専門的な知識を持っている人もいないって・・・。あなたの上司は専門的な知識がなく仕事をとってきたと言う事ですか?あなたが仕事を取ってきたのですか? まぁ、そんな事はこちらがタッチする事ではないのでそれについてはどうでも良い事ですが。 それはさておき、もうこの時間ですが、いずれにしても厳しすぎるのでもう少しコメントを残しておきます。 > 文字などで絞り込みたいのではなく,coomboboxで選択し,"検索"を押すことで,その性別や年齢のみの該当userだけ表示させたいです. それも文字だと思いますよ。テキストボックスがコンボボックスに変わっただけです。 入力した文字なのか選択で選んだ文字なのかの違いなだけで。 > sqlでif文を使ってチェックボタンがチェックされていれば...のようなコードを書いている参考サイトはあったのですが, あなたの言うsqlでif文と言うのは以下の様な感じで、 if CheckBox1.Checked = True then cmd.CommandText = "SELECT * FROM employee" else cmd.CommandText = "SELECT * FROM employee where nenrei = " + Combobox1.Text End If 多分こんな感じで書いてあるのをsqlでifと行っているんと思うんですが違いますか? そうであるならほぼこれで目的に近い所までいけそうです。 > coomboboxで選択し,"検索"を押すことで, 検索ボタンをクリックしたらというイベント内で上記のif文で分けると解決ですね?
guest

0

ベストアンサー

自力で解決したいとのことですので、アドバイスするとすれば
書籍を購入(もしくは図書館等で借りる)して勉強されるのがいいかと思います。
書籍ですと、1つのソフトを作る流れで解説しているものが多い印象ですので
インターネット上の情報よりは理解しやすいのではないかと思います。
書店や図書館で中身を確認してみれば自分にとって分かりやすいのか判断できます。

現在の質問内容へのアドバイスですが

  • 質問1

「DataGridViewの選択された行を取得する」
「DataGridViewの指定の行のデータを取得する」
とでも検索すれば参考になる情報が出てくるかと思います。
処理の流れとしては
選択されたものを取得する→そのデータを取得する→取得したデータを表示する
というのが基本だと思います。

  • 質問2

「ComboBox データベース 検索」などと検索すれば情報は得られるかと思います。
質問にある年齢のComboBoxであれば、選択された年齢を数値として得て
SQLの条件にすればいいかと思います。
基本的にComboBoxで選択した物をデータベースのデータに合うように変更し
SQLで検索(もしくはDataTable等にフィルターをかけるという手順になるかと思います。

投稿2021/08/04 22:50

YAmaGNZ

総合スコア10242

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

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

input

2021/08/04 23:42

YAmaGNZ様 回答いただきありがとうございました. 早速今日書籍購入させていただきます. また,アドバイスいただきありがとうございます. 今後はもっと自身で深く調べてから,投稿いたします.YAmaGNZ様を含め多くの方に不愉快な思いを させてしまったと反省しております. 今回は上司に相談し,次の作業依頼までに書籍を参考にソフトを作ることを目標にいたします. お時間をとっていただいてありがとうございました.
input

2021/08/05 05:47 編集

再度返信失礼いたします. 初心者の私に,検索方法からご教授いたたき大変参考になりました. 知りたい情報を検索でひっかける能力ももっと必要だと再認しました. ありがとうございました.
input

2021/08/05 12:52

YAmaGNZ様 再度恥を承知で再度質問させてください. 上司に聞ける環境ではなくなり,完全に行き詰ってしまいました. 解決済みにしたのにも関わらず再度質問してしまい,申し訳ありません. 質問1については解決いたしました.大変感謝しております.ありがとうございました. 質問2についてなのですが,「ComboBox データベース 検索」で調べさせていただきました. https://www.oborodukiyo.info/Forms/VS2008/F-ShowViewBasedOnValueOfCombobox を参考にコードをかいたのですが,うまく走りません. 14行目cmd.CommandText = の後に自身のSQLを書けばいいのでしょうか? 31行目cmd.CommandText = ここでcomboboxの内容のカラム名を入力すればよいのでしょうか?  現時点では2つのcomboboxを選択すると絞られたデータがdatagridviewにでてくるのですが, 初めに"検索”ボタンを押すと全件抽出,次にcomboboxを選択すると絞られて出てくる. また,comboboxを空欄にすると全件抽出する. このような動きにしたいです. 他に頼る方がおらずどうしようもなくなり,再度ご連絡させていただきました. マナー違反であることは重々承知しているのですが, どうかお助け願えませんでしょうか? お願い申し上げます.
YAmaGNZ

2021/08/05 13:40

サンプルですとDataGridViewに表示するデータもフォームのLoadイベントにて取得しています。 それを取得したいタイミングで行うようにすればよろしいかと思います。 また無条件はComboBoxに空白のアイテムを追加し、それが選択されたときにフィルタを消すといった処理にすればよろしいかと思います。 ComboBoxのTextが空の時といった動作とすると無条件にするタイミングがTextChangedイベントになります。 そうなると、例えば"50"と入力されていてバックスペースで消していくと"5"でイベントが発生し検索処理が走り""でイベントが発生し検索処理が走るという状態になります。 ComboBoxで自由な入力を許可する必要があるのかなど要求仕様がどうなのかという部分がありますが 1.自由入力はなしで空白のアイテムを追加して、それが選択されたときに無条件とする。 2.自由入力はありで選択した瞬間、テキスト入力した瞬間の選択はなしにして、検索ボタンが押されたときにその条件とする など方法があるかと思いますので、要求された仕様を満たすような選択をすることになるかと思います。
input

2021/08/05 20:39

YAmaGNZ様 ご助言いただきありがとうございます.感謝いたします. しかしvb.netの基礎から勉強できていないせいか,実際どうコードを書いていいのかわかりません. 私の場合,datagridviewに表示する内容とcombobox用のデータはすでにデータベースから取得済みです. つまり,サンプルの7から21行目までのコードは不要という理解でよろしいでしょうか? また >例えば"50"と入力されていてバックスペースで消していくと"5"でイベントが発生し検索処理が走り""でイベントが発生し検索処理が走るという状態になります. ここを調べてもどうしても理解できませんでした. またサンプルでは32行目以降にTextChangedイベントコードを書けばよろしいでしょうか? その場合TextChangedイベントを「TextChanged datagridview 更新」などで検索したのですが, 参考になりそうな結果が得られませんでした. 納期が明日に迫り,どうしようもなくなってしまいました. どうかど素人の私にもう少しだけお力添えいただけませんでしょうか? ご迷惑をおかけして大変申し訳ありません. お願い申し上げます.
Zuishin

2021/08/05 21:14

> しかしvb.netの基礎から勉強できていないせいか,実際どうコードを書いていいのかわかりません. だから勉強しろという回答ですよね。 何もできてない状態で納期が明日って泥縄すぎるので、今回はあなたに無理な仕事をさせた上司に報告し、責任をとってもらうのが良いと思います。 報告が遅れれば遅れるほど対応が難しくなるので、今日出社したら一番に報告して今後の方針を相談してください。
YAmaGNZ

2021/08/05 22:38

TextChangedイベントは https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.textchanged?view=netframework-4.8 こちらにある通りTextプロパティが変化した時に発生します。 なので、"50"とあった時に1文字消した瞬間にTextプロパティが変化して"5"になります。その時にTextChangedイベントが発生します。 その後、"5”の状態から1文字消すのでTextプロパティは""となり変化するのでもう一度TextChangedイベントが発生します。 どこにどのようなコードを書くかですが、私は貴方の作りたい仕様を知りませんので明確にお答えできません。 (TextChangedイベントを利用することが要求仕様を満たす実装として正しいのかすら分かりません) 実際に手を動かしていろいろ試してみてください。 また、社内の過去の制作物に同様の機能の物があるようでしたらそれを参考にするのも方法のひとつでしょう。
input

2021/08/06 00:21

Zuishin様 ご助言いただきありがとうございます. 本作業が終わり次第基礎から勉強し直します. アドバイスいただきありがとうございます. YAmaGNZ様 何度も助けていただいてありがとうございました. 今ある情報でとりあえず試しまくってみます. 至らない私に親身にご助言いただきありがとうございました. 感謝いたします.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問