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

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

新規登録して質問してみよう
ただいま回答率
85.37%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

Q&A

解決済

1回答

23391閲覧

DataGridView上のコンボボックスのイベントを設定したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

0グッド

0クリップ

投稿2017/08/25 06:09

編集2017/08/28 06:17

いつもお世話になっております。
今回はC#のDataGridViewについて質問させていただきます。

  1. コンボボックスのイベントを設定したい

要は以下の通りに動くプログラムを組みたいと思っています。
イメージ説明

イメージ説明

  1. ソースコード

C#

1 private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e) 2 { 3 switch (e.RowIndex) 4 { 5 case 0: 6 DataRow[] b; 7 b = データベース.Select("CategolyName = '" + a + "'"); 8 CategolyInfo.DataSource = データベース.Select("CategolyType = " + b[0][0] + " And CategolyIdx <> 0"); 9 CategolyInfo.DisplayMember = "CategolyName"; 10 CategolyInfo.ValueMember = "CategolyIdx"; 11 break; 12 } 13 } 14 15 private void dataGridView2_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 16 { 17 switch (e.RowIndex) 18 { 19 case 0: 20 a = e.FormattedValue.ToString(); 21 break; 22 } 23 }

3.なぜこれではダメなのか
このイベントを使った方法だと、他のセルを選択しないとイベントが発生しません。
理想としては、「属性カテゴリーのチェックボックスを確定した瞬間に属性詳細が更新される」ようにしたいと思っています。

もしよろしければ解決案、代替案、諦めたほうが良い理由などをお伺いしたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

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

退会済みユーザー

退会済みユーザー

2017/08/25 07:00

403 Forbiddenでサイトが見れませんでした
YAmaGNZ

2017/08/25 07:05

すみません。URLを修正しました。 もし見れないようであれば、 「DataGridViewでセルの編集に使われているコンボボックスのSelectedIndexChangedイベントを捕捉する」をそのまま検索してみてください
退会済みユーザー

退会済みユーザー

2017/08/28 04:23

返答遅れて申し訳ありません。 普段使っている端末からは見れませんでしたが、スマホから見ることができたので報告いたします。 紹介いただいた方法を試しましたが、属性カテゴリーを変更する度全ての列を変更してしまうので、期待していた動作を実装できませんでした。
YAmaGNZ

2017/08/28 11:17

どのようなコードを書かれているのか分かりませんが、すべての列を変更する記述をしているから そのように動くのだと思います。 変更すべきセルだけ変更するように記述できると思いますよ
退会済みユーザー

退会済みユーザー

2017/08/29 05:07 編集

勘違いしておりました。すみません。 現在以下のソースで止まっています。 あとちょっとでできそうな気がするのですが、ヒントがあればお願いいたします。 DataGridViewComboBoxEditingControl dataGridViewComboBox = null; private void DataGridView2_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (e.Control is DataGridViewComboBoxEditingControl) { DataGridView dgv = (DataGridView)sender; if (dgv.CurrentCell.OwningColumn.Name == "CategolyType") { this.dataGridViewComboBox = (DataGridViewComboBoxEditingControl)e.Control; this.dataGridViewComboBox.SelectedIndexChanged += new EventHandler(dataGridViewComboBox_SelectedIndexChanged); } } } private void DataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e) { if (this.dataGridViewComboBox != null) { this.dataGridViewComboBox.SelectedIndexChanged -= new EventHandler(dataGridViewComboBox_SelectedIndexChanged); this.dataGridViewComboBox = null; } } private void dataGridViewComboBox_SelectedIndexChanged(object sender, EventArgs e) { DataGridViewComboBoxEditingControl cb = (DataGridViewComboBoxEditingControl)sender; DataRow[] b; b = データベース.Select("CategolyName = '" + cb.Text + "'"); cb.DataSource = データベース.Select("CategolyName = " + b[0][0].ToString() + " And CategolyIdx <> 0"); cb.DisplayMember = "CategolyName"; cb.ValueMember = "CategolyIdx"; }
退会済みユーザー

退会済みユーザー

2017/08/29 05:44

具体的にはdataGridViewComboBox_SelectedIndexChangedの部分でどうにかなりそうです。 senderから現在のセルの位置を取得できれば、隣のセルを対象にとれるのですが上手くいきません。
YAmaGNZ

2017/08/29 14:06

DataGridViewのCurrentCellで現在編集中のセルを取得できるかと思います。 ここでは隣の列(DataGridViewComboBoxColumn)ではなくセル(DataGridViewComboBoxCell)のDataSourceプロパティやDisplayMemberプロパティ等を変更することになるかと思います。
退会済みユーザー

退会済みユーザー

2017/08/29 23:45

ありがとうございます。 無事、想定していた動作になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問