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

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

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

DataGridView内のコンボボックスについて

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

■87967 / inTopicNo.1)  DataGridView内のコンボボックスについて
  
□投稿者/ 太麺 (3回)-(2018/07/21(Sat) 12:16:51)

分類:[.NET 全般] 

開発環境:Windows7 32bit Visual Studio2010 .NET Frame work4.7

お世話になっております。初歩的な質問かもしれませんが調べても分からなかったため質問します。
DataGridViewの特定のセルのみコンボボックスにするように次のようにコードを書きました。

Public Sub MakeComboCell(ByVal GridView As DataGridView, ByVal intX As Integer, ByVal intY As Integer, ByVal Dtable As DataTable)

     Dim cbb As New DataGridViewComboBoxCell()

     cbb.FlatStyle = FlatStyle.Flat

     For Each row As DataRow In Dtable.Rows
        cbb.Items.Add(chkNull(row("COMMENT")))
     Next

     GridView(intX, intY) = cbb
End Sub

セルにコンボボックスが挿入され追加した項目がマウス操作で選べるところまでは再現出来ました。
ここからが質問なのですがコード上でコンボボックスで2つ目の項目などの特定の項目が選択された状態にすることは可能でしょうか。
インデックスを指定するとその位置の項目が選択された状態になるというのが理想なのですがコードが分かりませんでした。

引用返信 編集キー/
■87968 / inTopicNo.2)  Re[1]: DataGridView内のコンボボックスについて
□投稿者/ WebSurfer (1560回)-(2018/07/21(Sat) 12:33:07)
No87967 (太麺 さん) に返信

> コード上でコンボボックスで2つ目の項目などの特定の項目が選択された状態にすることは可能でしょうか。

以下の記事の画像のようなことで良いのでしょうか?

DataGridView に ComboBox を表示
http://surferonwww.info/BlogEngine/post/2014/01/23/how-to-show-combobox-column-in-datagridview.aspx

上の記事の画像は、Microsoft が提供しているサンプルデータベース Northwind の Products テーブルの
レコード一覧を表示でしてます。

Products テーブルの中の CategoryID, SupplierID は数字なので、そのままではユーザーにとっては分か
りにくいということで、Categories, Suppliers テーブルから名前を取得して、名前一覧を ComboBox に
表示し、Products テーブルの ID に該当する名前が選択・表示された状態にしています。

それで良ければ、紹介した記事にアプリの作り方が書いてありますので読んでください。


引用返信 編集キー/
■87980 / inTopicNo.3)  Re[2]: DataGridView内のコンボボックスについて
□投稿者/ 太麺 (4回)-(2018/07/23(Mon) 10:52:24)
No87968 (WebSurfer さん) に返信
> ■No87967 (太麺 さん) に返信
>
>>コード上でコンボボックスで2つ目の項目などの特定の項目が選択された状態にすることは可能でしょうか。
>
> 以下の記事の画像のようなことで良いのでしょうか?
>
> DataGridView に ComboBox を表示
> http://surferonwww.info/BlogEngine/post/2014/01/23/how-to-show-combobox-column-in-datagridview.aspx
>
> 上の記事の画像は、Microsoft が提供しているサンプルデータベース Northwind の Products テーブルの
> レコード一覧を表示でしてます。
>
> Products テーブルの中の CategoryID, SupplierID は数字なので、そのままではユーザーにとっては分か
> りにくいということで、Categories, Suppliers テーブルから名前を取得して、名前一覧を ComboBox に
> 表示し、Products テーブルの ID に該当する名前が選択・表示された状態にしています。
>
> それで良ければ、紹介した記事にアプリの作り方が書いてありますので読んでください。
>
>

返信ありがとうございます。
現状はコード上で列の追加・設定をしていますがこの方法を用いる場合はDataGridView自体で設定が必要みたいですね。
まずはDataGridView自体の設定を変更して今の動作が再現できるか試してみたいと思います。
また記事を見る限り列全体をコンボボックスにしているようですがColumnTypeをセルごとに変えることは可能でしょうか?

引用返信 編集キー/
■87981 / inTopicNo.4)  Re[3]: DataGridView内のコンボボックスについて
□投稿者/ WebSurfer (1563回)-(2018/07/23(Mon) 11:30:49)
No87980 (太麺 さん) に返信

> また記事を見る限り列全体をコンボボックスにしているようですがColumnTypeをセルごとに変えることは可能でしょうか?

任意のセルにということですか? であれば、紹介した記事の延長線上ではできないと思います。
そもそもそういうことは全く考えてませんし。

質問者さんがやりたいことの全体のシナリオ・ストーリーはどういうことでしょう?

それが不明でしたので、DataGridView の使用方法としてごく一般的な形(と自分的に思っている)の
アプリの例を紹介したのですが、質問者さんのやりたいことはそれとは違うのですか?

紹介した例がどういうものかと言うと、SQL Server などのテーブルに型付 DataSet + DataAdapter を
用いて非接続型アクセスし、DataGridView に一覧を表示し、ユーザーがそれを操作して編集、更新を
行うアプリ、即ち以下の記事の図の構成のアプリです。

Windows フォーム アプリケーションでのデータへの接続
https://msdn.microsoft.com/ja-jp/library/wxt2cwcc(v=vs.120).aspx

それとはまるで違うということであれば紹介した記事は質問者さんの役には立たないかもしれません。
どうなんですか?
引用返信 編集キー/
■87983 / inTopicNo.5)  Re[3]: DataGridView内のコンボボックスについて
□投稿者/ 魔界の仮面弁士 (1746回)-(2018/07/23(Mon) 12:03:09)
No87980 (太麺 さん) に返信
> また記事を見る限り列全体をコンボボックスにしているようですがColumnTypeをセルごとに変えることは可能でしょうか?

可能です。最初にご自身で書かれていたように、
列ごとに DataGridiViewComboBoxColumn を割り当てる代わりに、
セルごとに DataGridiViewComboBoxCell を割り当てるだけで OK です。
データバインドはしてもしなくても OK。


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  DataGridView1.DataSource = Nothing
  DataGridView1.AllowUserToAddRows = False
  DataGridView1.RowCount = 10
  DataGridView1.ColumnCount = 4

  Dim cbb As DataGridViewComboBoxCell
  cbb = New DataGridViewComboBoxCell()
  cbb.FlatStyle = FlatStyle.Flat
  cbb.Items.Add("R4-P17")
  cbb.Items.Add("R2-D2")
  cbb.Items.Add("BB-8")
  cbb.Items.Add("C-3PO")
  cbb.Value = "R2-D2"
  DataGridView1(2, 1) = cbb


  Dim dict As New Dictionary(Of Decimal, String)
  dict.Add(8D, "Oreo")
  dict.Add(7D, "Nougat")
  dict.Add(6D, "Marshmallow")
  dict.Add(5D, "Lollipop")
  dict.Add(4.4D, "KitKat")
  dict.Add(4.1D, "Jelly Bean")
  dict.Add(4D, "Ice Cream Sandwich")
  dict.Add(3D, "Honeycomb")

  cbb = New DataGridViewComboBoxCell()
  cbb.FlatStyle = FlatStyle.Flat
  cbb.DataSource = dict.ToArray()
  cbb.ValueMember = "Key"
  cbb.DisplayMember = "Value"
  cbb.Value = 5D
  DataGridView1(1, 3) = cbb
End Sub


ただし列テンプレートを使わない場合、共有行とはならず、
行ごとに個別の DataGridViewRow インスタンスが生成されます。

行数があまりに多くなる場合には、パフォーマンス面にもご注意ください。
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ