
DataGridViewへのコンボボックス利用で躓いております。
DataGridViewのAutoGenerateColumnsをfalseにし、dataGridView.DataSourceにデータベースから読み込んだデータテーブルを指定しています。
次にdataGridViewにDataGridViewComboBoxColumnを追加し、DataPropertyNameにコンボボックスに対応させたい
データテーブルのCaptionを指定することで、データテーブルとコンボボックスを関連付けています。
実行後の表示は想定通りなのですが、コンボボックスでアイテムを選択するとdataGridView上では値が更新されて、データテーブルには変更が反映されていません。
ちなみにコンボボックスでは、ValueMemberとDisplayMemberを設定し、DataGridView上ではstring、
内部的にはlongでデータ管理を行いたいと思っています。
どうにも解決方法が見いだせないので、こちらに質問させていただきました。
ソースを貼りつけるのでご指摘をお願いします。
利用しているデータベース
|ID|ペットID|
|1 |1|
|2 |1|
|3 |3|
以下ソースでは上記データベースのデータテーブルをpdtとしています。
コンボボックスのデータテーブル作成
DataTable comboTable = new DataTable();
comboTable.Columns.Add("ID", typeof(long));
comboTable.Columns.Add("NAME", typeof(string));
string[,] rowDataArray =
{{"1", "犬"},
{"2", "猫"},
{"3", "魚"}};
for(i=0;i<rowDataArray.GetLength(0);i++)
{
DataRow row = comboTable.NewRow();
row["ID"] = rowDataArray[i, 0];
row["NAME"] = rowDataArray[i, 1];
comboTable.Rows.Add(row);
}
comboTable.AcceptChanges();
//コンボボックスを作成しコンボボックステーブルをバインド
DataGridViewComboBoxColumn cbc = new DataGridViewComboBoxColumn();
cbc.DataSource = comboTable;
cbc.DisplayMember = "NAME";
cbc.ValueMember = "ID";
cbc.DataPropertyName = pdt.ペットIDColumn.Caption;
cbc.DisplayStyleForCurrentCellOnly = true;
//dataGridViewにデータテーブルをバインド
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = pdt;
dataGridView1.Columns.Add(cbc);
これを実行すると
|犬|
|犬|
|魚|
とdataGridViewに表示され、コンボボックスでは、犬、猫、魚が選べます。
一行目において、コンボボックスから猫を選択するとdataGridViewは下記のようになるのですが
|猫|
|犬|
|魚|
この後ブレークよりデータテーブルとdataGridViewを見ると
pdt[0][0] = 1
dataGridView1.Rows[0].Cells[0].Value = 2
となっており、dataGridViewの値は更新されているのに、データテーブルでは更新されていませんでした。
今まで、dataGridView上でダブルクリックし、値を直接書き換えていたらデータテーブルの値も更新されていたのですが、
コンボボックスを使うようにしたら更新されなくなりました。
皆様、解決方法を教えていただけますでしょうか。
No.1ベストアンサー
- 回答日時:
comboTable.Columns.Add("ID");
comboTable.Columns.Add("NAME");
としてみるとどうですか?
どのタイミングで確認しているのかわかりませんが、画面上にもう一つDataGridViewを追加して、DataSourceにpdtをただ設定してみれば、どのようにpdtの値が変わっているか確認できます。
No.1様。回答ありがとうございました。
No1様のおかげで解決しました。
原因は私のミスでした。
DataGridViewを追加して見てみたところ、コンボボックスで値を変更した後、フォーカスを他のセルに写したときデータテーブルの値が変更されていたので、再度確認したところ無事コンボボックスの値がデータテーブルに反映されました。ソースを多少いじっているので原因はわかりませんが、再度同じ方法でやり直したらうまくいったので、私のデバッグ方法が悪かったのだと思います。早とちりで皆様にご迷惑をおかけしてしまい申し訳ありませんでした。
また、comboTable.Columns.Add("NAME");で型を指定しない場合、コンボボックスの値をstringで与えているためエラー表示されました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Excel(エクセル) Excel ドロップダウンリスト(入力規則)に関してです データの入力規則で元データ79000行のド 3 2023/07/17 10:06
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】大変な警告
【大喜利】「今このパソコンは大変危険な状態です」という警告メッセージを無視してパソコンを開いたら、こんなことが起こった
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
【お題】斜め上を行くスキー場にありがちなこと
運営も客も一流を通り越して斜め上を行くスキー場にありがちなことを教えて下さい。
-
データバインドされたDatagridviewの列をコンボボックスにするには
Visual Basic(VBA)
-
DataGridViewでyyyy/MM/dd
Visual Basic(VBA)
-
DataGridViewのチェックボックスのON、OFFの判定方法
C言語・C++・C#
-
-
4
【C#】DataGridViewの最大列数について
システム
-
5
DataGridViewのセルのItem設定につい
C言語・C++・C#
-
6
C# DataGridViewで複数選択したセルに同じ値を一括で入力するには
C言語・C++・C#
-
7
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
8
コンボボックスでドロップダウンリストにしたときに・・・・
Visual Basic(VBA)
-
9
VB.NETでコンボボックスの1行目を空白にしたい
Visual Basic(VBA)
-
10
DataGridViewのフォーカス遷移について
Visual Basic(VBA)
-
11
C# DataTableに最後に追加した行をDataGridView上で選択状態にする方法は?
C言語・C++・C#
-
12
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
13
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
-
14
コンボボックスで選択した項目を保存する方法
C言語・C++・C#
-
15
DataGridView 列ごとの入力制限
Visual Basic(VBA)
-
16
DataTableから条件を満たした行を別のDatatableへコピーしたい
その他(プログラミング・Web制作)
-
17
DataGridViewに空白がある場合はエラーにしたい
Visual Basic(VBA)
-
18
DataGridViewで列、行、セルの選択
Visual Basic(VBA)
-
19
C# dataGridViewの値だけクリア
C言語・C++・C#
-
20
C#でラジオボタンとコンボボックスの値を連動させる
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
SQLを発行とは?クエリの作成と...
-
他のMDBのテーブルに追加したい
-
VBとアクセスでSQL文に変...
-
エクセルのテーブルを解除する...
-
ExcelVBAからAccessMDB内のテー...
-
AccessからExcelへエクスポート...
-
[C#] DataGridViewでコンボボッ...
-
CSVファイルのエクスポートでソ...
-
AccessVBAコミットとロールバッ...
-
【ADO】「Execute」を使うと...
-
ACCESS2010 実行時エラー 2766
-
Accessで別mdbのテーブルをコピー
-
オラクルデータベースへの更新方法
-
ワークテーブルの作成について
-
アークタンジェントテーブルの...
-
.net 複数の主キーを設定する方法
-
HTMLのテーブルの行数が多くな...
-
Access2003VBA リンクテーブル...
-
種類別のテーブル作成方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
SQLを発行とは?クエリの作成と...
-
ExcelVBAからAccessMDB内のテー...
-
AccessからExcelへエクスポート...
-
他のMDBのテーブルに追加したい
-
Accessで別mdbのテーブルをコピー
-
ワークテーブルの作成について
-
アクセステーブル、リンクとロ...
-
手動または分散トランザクショ...
-
[C#] DataGridViewでコンボボッ...
-
CSVファイルのエクスポートでソ...
-
ACCESS2010 実行時エラー 2766
-
VBとアクセスでSQL文に変...
-
COBOLのINVALID KEYが理解でき...
-
HTMLのテーブルの行数が多くな...
-
エクセルのテーブルを解除する...
-
DataGridViewに複数テーブルの...
-
Accessのフォームでリス...
-
DataGridの中身をDataSetにテー...
-
ACCESSのテーブル名をリストに...
おすすめ情報