C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: dataGridViewの行をコンボボックスにする方法


(過去ログ 118 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■69183 / inTopicNo.1)  dataGridViewの行をコンボボックスにする方法
  
□投稿者/ Яアルビノフォックス (11回)-(2013/12/09(Mon) 10:46:37)

分類:[C#] 

開発環境 VisualStudio2010 言語C#での質問です。

以下のようなテーブルがあります。

ManageManTable
Id ManageManName Department ManageManId
1 田中一郎    1     215551
2 田中二郎    0     215550

DepartmentTable
DepartmentCode Department
0 営業部
1       制作部

ManageManTableをDataGridViewにバインドしているのですが、Department行がコード表記(0,1とか)されています。
これをリレーションで表示すると解消するのですが、後の編集のことを鑑みて、Department行のみコンボボックス表記を行いたいと思います。
つまり
Id ManageManName Department ManageManId
1 田中一郎    制作部▼     215551
2 田中二郎    営業部▼     215550

というような表記にしたいのです。(▼のところはコンボボックス)
コンボボックスを追加する方法は割と見つかるのですが、既存のデータに合わせたコンボボックス表記というのはちょっとわかりませんでした。

よろしくお願いします。
引用返信 編集キー/
■69186 / inTopicNo.2)  Re[1]: dataGridViewの行をコンボボックスにする方法
□投稿者/ 魔界の仮面弁士 (452回)-(2013/12/09(Mon) 11:08:39)
No69183 (Яアルビノフォックス さん) に返信
> 既存のデータに合わせたコンボボックス表記というのはちょっとわかりませんでした。
こちらが参考になるかと。
http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html


今回の場合、具体的には DataGridViewComboBoxColumn に対して、
ValueMember は DepartmentTableの主キー列の名前 (DepartmentCode) 、
DisplayMember は DepartmentTable の名称列の名前 (Department) で、
DataPropertyName は ManageManTable の外部キー列の名前 (Department) を
それぞれセットしてやればよさそうです。
引用返信 編集キー/
■69187 / inTopicNo.3)  Re[2]: dataGridViewの行をコンボボックスにする方法
□投稿者/ Яアルビノフォックス (12回)-(2013/12/09(Mon) 11:31:58)
No69186 (魔界の仮面弁士 さん) に返信
> ■No69183 (Яアルビノフォックス さん) に返信
> こちらが参考になるかと。
> http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html
>
ここは見ましたが、コンボボックス行を作る→追加する、の方式だとコンボボックス行を作ることはできますが、既存のコードに対応した文字列(DepartmentCode 0なので表示するのは営業部)を表示できなかったのです。
既存のTextBoxColumnをDataGridViewComboBoxColumnに置き換えたい、といったほうがいいかもしれません。


追加報告
一応の解決はみました。
デザイン画面でdatagridviewの【列の編集】項目でCellTypeをDataGridViewComboBoxColumnにしてDataSource、DisplayMenber、ValueMenberを弄ったらできました。
が、後のことを鑑みてできればコードの方で操作したいので、引き続きお願いします。
引用返信 編集キー/
■69189 / inTopicNo.4)  Re[3]: dataGridViewの行をコンボボックスにする方法
□投稿者/ Hongliang (136回)-(2013/12/09(Mon) 12:00:25)
> デザイン画面でdatagridviewの【列の編集】項目でCellTypeをDataGridViewComboBoxColumnにしてDataSource、DisplayMenber、ValueMenberを弄ったらできました。
> が、後のことを鑑みてできればコードの方で操作したいので、引き続きお願いします。

デザイナはコードでできることを可視化してるだけですよ。
.designer.csファイルを見れば、実際のコードを参照できます。
引用返信 編集キー/
■69190 / inTopicNo.5)  Re[3]: dataGridViewの行をコンボボックスにする方法
□投稿者/ 魔界の仮面弁士 (453回)-(2013/12/09(Mon) 12:57:37)
No69187 (Яアルビノフォックス さん) に返信
> 既存のコードに対応した文字列(DepartmentCode 0なので表示するのは営業部)を表示できなかったのです。
それが DisplayMember の役割ですよね。

TextBox タイプから ComboBox タイプに「置き換える」にせよ
ComboBox タイプを「追加」するにせよ、
フォームのデザイナで設定した列であろうと、
自前のコードで設置した列であろうと、
DisplayMember を使うと言う点では同じです。

デザイナから指定する場合には、型付DataSetをバインドすると設定しやすいかと。


なお、連結する列のデータ型は、両方の DataTable で同じデータ型にしておいてください。
一方が Decimal 型で、他方が String 型の列だった場合、
ValueMember が期待通りに連携しないことがあります。



> 既存のTextBoxColumnをDataGridViewComboBoxColumnに置き換えたい、といったほうがいいかもしれません。
列の動的な差し替え、という話なら、Columns から既存列をRemoveAtしてから新列をInsertしなおすとか。



> コンボボックス行を作る→追加する、
…コンボボックス列ではなく?

行単位でセルタイプを変更したい場合は、Columns でテンプレートを指定できないので、
 dataGridView1[a, b] = dataGridViewComboBoxCell1;
などとして、それぞれのセルごとに差し替えていかなくてはなりません。

しかしデータバインドでは、すべての列で同じ型のデータが渡されることを
想定しているので、もしも本当に行ごとに異なる型のデータを表示させたいのであれば、
DataSource を使わない方が良いかも知れません。
引用返信 編集キー/
■69221 / inTopicNo.6)  Re[4]: dataGridViewの行をコンボボックスにする方法
□投稿者/ Яアルビノフォックス (15回)-(2013/12/10(Tue) 10:13:37)
とりあえずデザイナーを使って作ったものを.designer.csで参照して、なんとか解決しました。

魔界の仮面弁士さんのご意見も参考にしたいと思います。
皆様ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -