DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewのコンボボックス列の値を取得

環境/言語:[WinXP、VisualiStudio2005、C#]
分類:[.NET]

C#で勉強中&開発中のものです。
VisualStudio2005で開発しています。
質問がありまして投稿させていただきました。

内容は、DataGridViewの列にコンボボックスを表示する
http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html
の「DataSourceプロパティを使用した例」を参考に、
コンボボックスに値を設定しました。

このコンボボックスから現在の値を取り出したいのですが、
どうすればよいのでしょうか??

DataGridView1["Week", i].Value
ですと、「○曜日」が入っており。
値(0〜6)のほうの取り出し方が分かりません。
(※iは現在の行番号です)


初歩的質問だと思いますが、
ご教授いただければと思っておます。
よろしくお願いします。
■No28767に返信(あるさんの記事)

VB.NETですが

Combo用クラス
Private Class ComboItem
Public Property Value As String
Public Property Display As String

Public Overrides Function ToString() As String
Return Display
End Function
End Class


Comboのリスト設定
Dim lst As New List(Of ComboItem)
lst.Add(New ComboItem() With {.Value = "1", .Display = "Sun"})
lst.Add(New ComboItem() With {.Value = "2", .Display = "Mon"})
lst.Add(New ComboItem() With {.Value = "3", .Display = "Tue"})
lst.Add(New ComboItem() With {.Value = "4", .Display = "Wed"})
Column2.DataSource = lst
Column2.DisplayMember = "Display"
Column2.ValueMember = "Value"

値と表示内容の取得
Dim col = DataGridView1.Item(e.ColumnIndex, e.RowIndex)
Console.WriteLine(col.Value)
Console.WriteLine(col.FormattedValue)
ありがとうございます。

コンボボックスを変更しないと「Value」のほうにも
「FormattedValue」と同じ値「○曜日」が入っているのですが、
これは何故でしょうか??

コンボボックスを変更したら、「Value」に数値が入っています。


HPを元に作っているのですが、
何か設定がおかしいのでしょうか?




■No28768に返信(shuさんの記事)
> ■No28767に返信(あるさんの記事)
>
> VB.NETですが
>
> Combo用クラス
> Private Class ComboItem
> Public Property Value As String
> Public Property Display As String
>
> Public Overrides Function ToString() As String
> Return Display
> End Function
> End Class
>
>
> Comboのリスト設定
> Dim lst As New List(Of ComboItem)
> lst.Add(New ComboItem() With {.Value = "1", .Display = "Sun"})
> lst.Add(New ComboItem() With {.Value = "2", .Display = "Mon"})
> lst.Add(New ComboItem() With {.Value = "3", .Display = "Tue"})
> lst.Add(New ComboItem() With {.Value = "4", .Display = "Wed"})
> Column2.DataSource = lst
> Column2.DisplayMember = "Display"
> Column2.ValueMember = "Value"
>
> 値と表示内容の取得
> Dim col = DataGridView1.Item(e.ColumnIndex, e.RowIndex)
> Console.WriteLine(col.Value)
> Console.WriteLine(col.FormattedValue)
■No28770に返信(あるさんの記事)

> コンボボックスを変更しないと「Value」のほうにも
> 「FormattedValue」と同じ値「○曜日」が入っているのですが、
> これは何故でしょうか??
>
> コンボボックスを変更したら、「Value」に数値が入っています。
>
>
> HPを元に作っているのですが、
> 何か設定がおかしいのでしょうか?
DisplayMember,ValueMemberの設定は大丈夫でしょうか?
■No28771に返信(shuさんの記事)
> DisplayMember,ValueMemberの設定は大丈夫でしょうか?

以下のように作っています。
何か分かりましたらご連絡下さい。

よろしお願い致します。

-------------------------------------------------------
DataTable Tbl曜日 = new DataTable("Tbl曜日");
Tbl曜日.Columns.Add("Display", typeof(string));
Tbl曜日.Columns.Add("Value", typeof(int));
Tbl曜日.Rows.Add("日曜日", 0);
Tbl曜日.Rows.Add("月曜日", 1);
Tbl曜日.Rows.Add("火曜日", 2);
Tbl曜日.Rows.Add("水曜日", 3);
Tbl曜日.Rows.Add("木曜日", 4);
Tbl曜日.Rows.Add("金曜日", 5);
Tbl曜日.Rows.Add("土曜日", 6);

DataGridViewComboBoxColumn 曜日 = new DataGridViewComboBoxColumn();
曜日.Name = "曜日";
曜日.ReadOnly = false;
曜日.DataSource = Tbl曜日;
曜日.ValueMember = "Value";
曜日.DisplayMember = "Display";
曜日.DisplayStyleForCurrentCellOnly = true;
dataGridView2.Columns.Add(曜日);

DOBON.NET | プログラミング道 | プログラミング掲示板