Hola de nuevo a todos, os escribo por que me he encontrado en un callejon sin salida, estoy haciendo una aplicación un poco extensa y ya casi la he terminado estoy con retoques de ullima hora para hacerla mas facil de usar, bueno voy al grano. El tema es que tendo un datagrid que se alimenta de otro al que con el evento doble clik paso las filas, este al darle a guardar me lo almacena en una bd, ahora me veo en la necesidad de poder meter datos a mano directamente en este segundo grid pero al darle a guardar me dice que el parametro "dni" no tiene un valor predeterminado. tambien necesitaria que los datos que paso de un grid a este no se puedan manipular, por que al activar la propiedad edit en el grid, puedo editar todo el contenido, alguien puede orientarme?
gracias de antemano
este es el codigo con el que paso los datos de un grid a otro asi como rellenar varios textbox

Código:
Dim contador As Integer
    Private Sub dgv_cursos_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgv_cursos.CellMouseDoubleClick
        pasar_datos()

        Dim coleccion As DataGridViewSelectedRowCollection = dgv_cursos.SelectedRows
        Dim dni, apellidos, nombre, grados, federa, club_aiki As String
        Dim Agregar As String = "SI"
        'Buscamos en todas las FILAS del DataGrid2
        For Each FILA As DataGridViewRow In dgv_asisten.Rows

            If FILA.Cells(0).Value = dgv_cursos.CurrentCell.Value Then
                Agregar = "NO"
                MsgBox("Este dato ya fue agregado.")
                Exit For
            End If

        Next
        If Agregar = "SI" Then


            For Each fila As DataGridViewRow In coleccion
                dni = dgv_cursos(0, fila.Index).Value.ToString
                apellidos = dgv_cursos(1, fila.Index).Value.ToString
                nombre = dgv_cursos(2, fila.Index).Value.ToString
                grados = dgv_cursos(3, fila.Index).Value.ToString
                federa = dgv_cursos(8, fila.Index).Value.ToString


                club_aiki = dgv_cursos(9, fila.Index).Value.ToString
                ' Me.dgv_cursos.Rows(fila.Index).DefaultCellStyle.BackColor = Color.Red
                dgv_asisten.Rows.Add(dni, apellidos, nombre, grados, federa, club_aiki)
                contador = contador + 1
                Label5.Text = contador
            Next
        End If






    End Sub
y este con el que guardo en la BD

Código:
 Function GuardarDataGrid() As Boolean
        
        Dim cb_tipo = cb_tipo_c.Text
        Dim cb_fede = cb_fede_cola.Text

        Try

            For X As Integer = 0 To dgv_asisten.Rows.Count - 1
                Using cmdInsert As New OleDbCommand
                    With cmdInsert
                        .CommandText = " INSERT INTO cursos (dni_cur,tipo_cur,profesor,lugar,federacion,fecha_curso,n_horas) VALUES (dni,'" & cb_tipo & "','" & profe.Text & "','" & lugar_eve.Text & "','" & cb_fede & "','" & fecha_eve.Text & "','" & horas_lec.Text & "')"
                        .CommandType = CommandType.Text
                        .Connection = conex
                        .Parameters.Add("dni", OleDbType.VarChar).Value = dgv_asisten.Rows(X).Cells(0).Value 'lee las celdas del dni
                    End With
                    Dim Correcto As Integer = cmdInsert.ExecuteNonQuery
                    If Correcto = 0 Then
                        MessageBox.Show("Error no se pudo agregar la fila", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    End If
                End Using
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
        End Try

        limpiar_cursos()


        Return True

    End Function