C # Reemplace el cuadro de texto predeterminado en DataGridView con un Combobox

Todavía soy bastante nuevo en C #, pero estoy trabajando en una aplicación WinForms que extrae datos de una base de datos de Access. Actualmente estoy trabajando en un formulario que carga los contenidos de una tabla en un DataGridView dinámicamente usando un DataAdapter y DataSet.

Hasta ahora, la forma está funcionando como se esperaba. Actualmente, para agregar un nuevo registro, debe escribir datos en cada celda en una fila. Lo que quiero hacer es reemplazar un par de columnas (cuadro de texto) con un cuadro combinado. En otras palabras, en lugar de ingresar manualmente los datos, tenga un cuadro desplegable desplegable y seleccione la entrada de una lista. También quiero generar los miembros de datos de combobox desde SQL, pero si eso es demasiado, puedo codificar manualmente cada elemento.

Puedo agregar un cuadro combinado a la vista de datos en tiempo de ejecución, pero eso no es lo que estoy tratando de hacer. Y dado que las columnas se crean en tiempo de ejecución a través del código, no estoy seguro de cómo modificar una columna siguiendo ese método.

Entonces, por ejemplo, quiero reemplazar las celdas del cuadro de texto por "Clasificación" con un cuadro combinado como "R", "PG-13", "PG", etc.

public partial class frmBulkInsert : Form
{
    OleDbConnection conn;
    OleDbDataAdapter da;
    DataSet ds;
    OleDbCommandBuilder cmdbl;


    public frmBulkInsert()
    {
        InitializeComponent();
    }

    private void frmBulkInsert_Load_1(object sender, EventArgs e)
    {
        // Load all records from the table into the datagridview.
        try
        {
            dataConnectionSettings();              
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error\n" + ex.Message, "Error", MessageBoxButtons.OK,   MessageBoxIcon.Error);
        }
    }


    private void button1_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void ConnectToDatabase()
    {
        conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data  Source=C:\Users\ronniejones.JONES\Documents\Access Projects\Movie_2013.mdb";
    }

    private void btnUpdateRecords_Click(object sender, EventArgs e)
    {
        try
        {
            //DataSet changes = (ds).GetChanges();

            cmdbl = new OleDbCommandBuilder(da);
            //da.Update(ds, "Movie_2013");
            int numRows = da.Update(ds, "Movie_2013");
            MessageBox.Show(numRows + " Record(s) Updated", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK,  MessageBoxIcon.Error);
        }
    }

private void dataConnectionSettings()
    {
        //DataGridViewComboBoxColumn cboColumn;
        conn = new OleDbConnection();
        ConnectToDatabase();
        conn.Open();
        da = new OleDbDataAdapter("SELECT ID, Title, [Minutes], Rating, Category,     Format, Actor1, Actor2, Actor3, Actor4, [Status] FROM [Movies] ORDER BY ID", conn);
        ds = new DataSet();
        da.Fill(ds, "Movie_2013");
        dataGridView1.DataSource = ds.Tables[0];

Respuestas a la pregunta(2)

Su respuesta a la pregunta