Introduction
We can add DataGridViewComboBoxColumn control to a specified column of a Standard DataGridView control that comes with .NET. There are some limitations with that Control such as when enter to a cell it is not popup that displaying content of it. Another thing is there are limited numbers of component support with DataGridView. Such as DataGridViewButtonColumn, DataGridViewCheckBoxColumn, DataGridViewComboBoxColumn, etc. It is difficult to add additional component to DaraGridView control.
In this article I have discussed how to develop a control that inheriting standard features of DataGridView and add additional features to that control. By locking this NewDataGridView control you will be able to develop a DataGridView control adding many more features as you wish.
Using the code
How to add this control to your project?
Add AdvDataGridView and AdvListBox projects or it’s DLL to your solution.

How to add this control in to your Form?
Drag and drop NewDataGridView control from ToolBox into your form.

How to add ListBox to DataGridView control?
After adding NewGridView control to your form, You should add ListBox according to your requirements. Note: before add ListBox, Columns should be added to the NewDataGridView. Listbox can be added through of property window of NewDataGridView control. Use ListBox Details section.

After adding a ListBox you should bind it with particular Column of NewDataGridView. To do that you have to use Binding Column section of property window of ListBox.
Now you have to define EventHandler for each ListBox that have added to the NewDataGridView component for assign selected item to cell and hide that ListBox when double clicked on the listbox. Here is the code for that.
Collapse
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Test_Application
{
public partial class Form1 : Form
{
int rowIndex, columnIndex;
public Form1()
{
InitializeComponent();
this.newDataGridView1.ListBoxCollection[0].DoubleClick +=
new EventHandler(ListBox1_DoubleClick);
}
void ListBox1_DoubleClick(object sender, EventArgs e)
{
this.newDataGridView1[columnIndex, rowIndex].Value =
this.newDataGridView1.ListBoxCollection[0].SelectedItem.ToString();
this.newDataGridView1.ListBoxCollection[0].Visible = false;
}
private void newDataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
rowIndex = e.RowIndex;
columnIndex = e.ColumnIndex;
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnAddRow_Click(object sender, EventArgs e)
{
this.newDataGridView1.Rows.Add();
}
}
}