"No se puede agregar o cambiar el registro porque se necesita un registro relaci

Iniciado por Guillito, 9 Abril 2015, 01:29 AM

0 Miembros y 1 Visitante están viendo este tema.

Guillito

Tengo un GridView con Nombres y Apellidos de Alumnos de un Institución, obtenidos de la Tabla Alumno (El Grid View toma el Id de lo seleccionado con DataKeyNames al igual que los otros GridsView, asi, luego de seleccionar Alumno del GridAlumno, se debe seleccionar el Curso del GridCurso, aquí, luego de la anterior acción, se despliega el GridMaterias con CheckBoxs en el Template, con lo cual yo puedo elegir la Materia o Materias de manera individual, a las cuales me quiero inscribir)..................Asi, con lo seleccionado con este nuevo GridView, mas lo seleccionado con los otros GridsView, me da el mismo error:

"No se puede agregar o cambiar el registro porque se necesita un registro relacionado en la tabla 'Alumno'."

Aquí dejo código a los fines de si Uds. pueden determinar el error, o la forma correcta de sintaxis para que funcione, lo acrediten por este medio, etc.......

Disculpen las molestias, estare siempre agradecido, nos vemos....


Código (csharp) [Seleccionar]

protected void Page_Load(object sender, EventArgs e)
       {
           AccesoLogicaM b = new AccesoLogicaM();
           GridCursos.DataSource = b.fillGridView("Select Id_Curso, Año, sección From Curso");
           GridCursos.DataBind();

           GridAlumno.DataSource = b.fillListView("Select Id_Alumno, Nombre, Apellido From Alumno Order By Nombre Asc");
           GridAlumno.DataBind();

       }
protected void GridCursos_SelectedIndexChanged(object sender, EventArgs e)
       {
           // Se obtiene la fila seleccionada del gridview

           GridViewRow row = GridCursos.SelectedRow;

           // Obtengo el id de la entidad que se esta editando
           // en este caso de la entidad Curso
           ViewState["idCurso"] = Convert.ToInt32(GridCursos.DataKeys[row.RowIndex].Value);
           CargarData();
       }
       private void CargarData()
       {
           string connection = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
           OleDbConnection cnn = new OleDbConnection(connection);
           string SQL = string.Empty;
           SQL = ("SELECT M.Id_Materia, M.Nombre FROM Materias M, CursosMaterias cm WHERE cm.id_Materia = M.Id_Materia AND cm.id_Curso = @View");
           OleDbCommand comando = new OleDbCommand(SQL, cnn);
           comando.CommandType = CommandType.Text;
           cnn.Open();
           comando.Parameters.Clear();
           comando.Parameters.AddWithValue("@View", (ViewState["idCurso"]));
           DataTable tabla = new DataTable();
           OleDbDataAdapter Adaptador = new OleDbDataAdapter(comando);
           Adaptador.Fill(tabla);
           GridInscMaterias.DataSource = tabla;
           GridInscMaterias.DataBind();
           cnn.Close();
       }

       protected void GridInscMaterias_SelectedIndexChanged(object sender, EventArgs e)
       {

       }
       protected void ButtonTodas_Click(object sender, EventArgs e)
       {
           foreach
           (GridViewRow dgi in GridInscMaterias.Rows)
           {
               CheckBox myCheckBox = dgi.Cells[0].Controls[1] as CheckBox;

               if (myCheckBox != null)
               {

                   if (myCheckBox.Checked == true)
                   {
                       ViewState["idMateria"] = GridInscMaterias.DataKeys[dgi.RowIndex][0].ToString();

                       {
                           string cadenaConexion = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                           OleDbConnection cnn = new OleDbConnection(cadenaConexion);
                           cnn.Open();
                           string SQL = string.Empty;
                           SQL = ("SELECT id_cursoMateria From CursosMaterias cm Where cm.id_Curso = @idCurso AND cm.id_Materia = @idMateria");

                           ViewState["idCursoMateria"] = SQL;

                           string sql = string.Empty;
                           sql = @"INSERT INTO AlumMatCursos (Id_Alumno, id_cursoMateria)
                               VALUES (@idAlumno, @idcurMat)";
                           OleDbCommand cmd = new OleDbCommand(sql, cnn);
                           cmd.Parameters.AddWithValue("@idCurso", (ViewState["idCurso"]));
                           cmd.Parameters.AddWithValue("@idMateria", (ViewState["idMateria"]));
                           cmd.Parameters.AddWithValue("@idAlumno", (ViewState["idAlumno"]));
                           cmd.Parameters.AddWithValue("@idcurMat", (ViewState["idCursoMateria"]));
                           cmd.ExecuteNonQuery();
                           cnn.Close();
                           lblMensaje.Text = "Se registraron correctamente en BD!";
                       }
                   }
               }
           }
       }

       protected void GridAlumno_SelectedIndexChanged(object sender, EventArgs e)
       {
           // Se obtiene la fila seleccionada del gridview

           GridViewRow row = GridAlumno.SelectedRow;

           // Obtengo el id de la entidad que se esta editando
           // en este caso de la entidad Curso
           ViewState["idAlumno"] = Convert.ToInt32(GridAlumno.DataKeys[row.RowIndex].Value);
       }
   }
}


fran800m

La relación materias - alumno es N a N, no entiendo lo que estás haciendo.

En cualquier caso ten en cuenta que cuando 2 tablas están relacionadas tienes que crear los DataRelation.

Un saludo,