訪問して頂きありがとうございます。まさふくろーです。
この記事では、DataGridViewコントロールにコンボボックスを表示する方法をご紹介します。
DataGridViewコントロールにコンボボックスを表示する

プロパティウィンドウでの設定
列ごとに設定するプロパティウィンドウの表示
フォームの「DataGridView」コントロールを選択します。

「DataGridView」コントロールの「▶」部分をクリックします。

「列の編集」を選択します。

「追加」ボタンをクリックします。

①型「DataGridViewComboBoxColumn」を選択⇒②ヘッダーテキスト「種類」と入力⇒③「追加」ボタンをクリックします。

すると、「選択された列」項目に表示されます。

コンボボックスのリストに表示する項目を設定
「プロパティウィンドウ」にて、Items右端の「…」の部分をクリックします。

①コンボボックスのリストに表示する項目を入力⇒②「OK」ボタンをクリックします。

表示列の移動
上矢印ボタンをクリックし、コンボボックスの表示列を先頭に移動します。

「OK」ボタンをクリックすると、「DataGridView」コントロールにコンボボックスが追加されます。

プログラムでの設定
DataGridViewComboBoxColumn.Items.Add(リストに追加する文字列)
DataGridView.Columns.Insert(挿入する場所を列インデックスで指定 , 挿入するDataGridViewColumn)
サンプルプログラム

| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83  | 
						Public Class Form1     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click         Dim serverName As String = "TEST-PC\SQLEXPRESS"         Dim dataBase As String = "AdventureWorksLT2017"         Dim userid As String = "test"         Dim pwd As String = "test"         Dim dread As SqlClient.SqlDataReader         Dim column As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn         Try             column.Items.Add(String.Empty)             column.Items.Add("りんご")             column.Items.Add("みかん")             column.Items.Add("いちご")             DataGridView1.Columns.Insert(0, column)             DataGridView1.Columns(0).HeaderText = "種類"             Using conn As New SqlClient.SqlConnection()                 conn.ConnectionString =                     " Data Source = " & serverName &                     ";Initial Catalog = " & dataBase &                     ";User ID = " & userid &                     ";Password =" & pwd                 conn.Open()                 Using cmd As New SqlClient.SqlCommand()                     cmd.Connection = conn                     cmd.CommandText =                             "SELECT *                                                           " & ControlChars.NewLine &                             "FROM  SalesLT.SalesOrderHeader                                     " & ControlChars.NewLine &                             "WHERE SalesOrderID BETWEEN @SalesOrderID_St AND @SalesOrderID_End  " & ControlChars.NewLine &                             "ORDER BY  SalesOrderID                                             " & ControlChars.NewLine                     cmd.Parameters.Add("@SalesOrderID_St", SqlDbType.Int).Value = 71774                     cmd.Parameters.Add("@SalesOrderID_End", SqlDbType.Int).Value = 71816                     dread = cmd.ExecuteReader()                     Do While dread.Read()                         Dim iIdx As Integer                         Dim SalesOrder_ID As String, Order_Date As String, Due_Date As String, SalesOrder_Number As String                         iIdx = dread.GetOrdinal("SalesOrderID")                         SalesOrder_ID = dread.GetInt32(iIdx)                         iIdx = dread.GetOrdinal("OrderDate")                         Order_Date = dread.GetDateTime(iIdx)                         iIdx = dread.GetOrdinal("DueDate")                         Due_Date = dread.GetDateTime(iIdx)                         iIdx = dread.GetOrdinal("SalesOrderNumber")                         SalesOrder_Number = dread.GetString(iIdx)                         DataGridView1.Rows.Add(String.Empty, SalesOrder_ID, Order_Date, Due_Date, SalesOrder_Number)                     Loop                 End Using                 DataGridView1.Columns(0).Width = 70                 Label1.Text = "表示が完了しました。"             End Using         Catch ex As Exception             Label1.Text = Err.Description         End Try     End Sub End Class  | 
					
| 2 | 「注文データを表示」ボタンクリック時に以下処理を行う。 | 
| 4~7 | 接続先データベースの情報を、変数に代入。 | 
| 9 | DataGridViewComboBoxColumn型の変数「column」を宣言、インスタンス化。 | 
| 13~16 | 「DataGridView」コントロールのコンボボックスに設定する項目を追加。 | 
| 18 | 「DataGridView」コントロールの1列目に列を挿入する。 | 
| 20 | 「DataGridView」コントロールの列ヘッダーに「種類」を表示する。 | 
| 22 | SqlConnectionクラスのインスタンス化。(Usingステートメントでリソース開放を自動化) | 
| 24~28 | ConnectionStringプロパティにデータベース情報を設定。 | 
| 30 | データベースに接続。 | 
| 32 | SqlCommandクラスのインスタンス化。(Usingステートメントでリソース開放を自動化) | 
| 34 | SQL文を実行するために、24~28行目で設定したデータベース情報と同じ情報をConnection プロパティに設定。 | 
| 36~40 | 
レコードを抽出するSQL文をCommandTextプロパティに設定。 | 
| 39行目の「@」マークは、以下42~43行目で設定するパラメータを使用する際に記述します。 | |
| 42 | 「SalesOrderHeader」テーブルの「SalesOrderID」列の開始番号に、値「71774」を設定する。 | 
| 43 | 「SalesOrderHeader」テーブルの「SalesOrderID」列の終了番号に、値「71816」を設定する。 | 
| 45 | SQL文(SalesOrderID列の値が71774~71816までのレコードを抽出する)を実行し、実行結果をSqlDataReader型の変数「dread」に代入。 | 
| 47 | 変数「dread」の値が「True」の間(抽出したレコード件数分)、以下処理を繰り返す。 | 
| 52 | 「SalesOrderID」列の列番号を取得し、Integer型の変数「iIdx」に代入。 | 
| 53 | 「SalesOrderID」列の値を取得し、String型の変数「SalesOrder_ID」に代入。 | 
| 55 | 「OrderDate」列の列番号を取得し、Integer型の変数「iIdx」に代入。 | 
| 56 | 「OrderDate」列の値を取得し、String型の変数「Order_Date」に代入。 | 
| 58 | 「DueDate」列の列番号を取得し、Integer型の変数「iIdx」に代入。 | 
| 59 | 「DueDate」列の値を取得し、String型の変数「Due_Date」に代入。 | 
| 61 | 「SalesOrderNumber」列の列番号を取得し、Integer型の変数「iIdx」に代入。 | 
| 62 | 「SalesOrderNumber」列の値を取得し、String型の変数「SalesOrder_Number」に代入。 | 
| 64 | DataGridViewコントロールにデータを表示する。(コンボボックスにはデータを表示しないので「Empty値」を設定) | 
| 70 | DataGridViewコントロールの1列目(コンボボックス)の幅を70ピクセルにする。 | 
| 72 | 処理が正常に終了したら、正常終了のメッセージをラベルに表示する。 | 
| 76 | 処理の実行中にエラーが発生した場合、 | 
| 78 | エラー内容を取得し、ラベルに表示する。 | 
関連記事
DataGridViewコントロールのコンボボックスで選択した値を取得する
  
  【VB.NET】DataGridViewコントロールのコンボボックスで選択した値を取得するには?
DataGridViewコントロールにチェックボックスを表示する
  
  【VB.NET】DataGridViewコントロールにチェックボックスを表示するには?
DataGridViewコントロールにボタンを表示する
  
  【VB.NET】DataGridViewコントロールにボタンを表示するには?
DataGridViewコントロールの列の幅を変更する
  
  【VB.NET】DataGridViewコントロールの列の幅を変更するには?
DataGridViewコントロールにデータを表示する
  
  【VB.NET】DataGridViewコントロールにデータを表示するには?
テーブルのデータを抽出する
データベースに接続
Usingステートメント
  
  【VB.NET】UsingステートメントでDisposeメソッドの呼び出しを自動化する
構造化例外処理
最後まで読んでいただき、ありがとうございました!
  

