Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Guillito en 9 Abril 2015, 01:29 am



Título: "No se puede agregar o cambiar el registro porque se necesita un registro relaci
Publicado por: Guillito en 9 Abril 2015, 01:29 am
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
  1. protected void Page_Load(object sender, EventArgs e)
  2.        {
  3.            AccesoLogicaM b = new AccesoLogicaM();
  4.            GridCursos.DataSource = b.fillGridView("Select Id_Curso, Año, sección From Curso");
  5.            GridCursos.DataBind();
  6.  
  7.            GridAlumno.DataSource = b.fillListView("Select Id_Alumno, Nombre, Apellido From Alumno Order By Nombre Asc");
  8.            GridAlumno.DataBind();
  9.  
  10.        }
  11. protected void GridCursos_SelectedIndexChanged(object sender, EventArgs e)
  12.        {
  13.            // Se obtiene la fila seleccionada del gridview
  14.  
  15.            GridViewRow row = GridCursos.SelectedRow;
  16.  
  17.            // Obtengo el id de la entidad que se esta editando
  18.            // en este caso de la entidad Curso
  19.            ViewState["idCurso"] = Convert.ToInt32(GridCursos.DataKeys[row.RowIndex].Value);
  20.            CargarData();
  21.        }
  22.        private void CargarData()
  23.        {
  24.            string connection = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  25.            OleDbConnection cnn = new OleDbConnection(connection);
  26.            string SQL = string.Empty;
  27.            SQL = ("SELECT M.Id_Materia, M.Nombre FROM Materias M, CursosMaterias cm WHERE cm.id_Materia = M.Id_Materia AND cm.id_Curso = @View");
  28.            OleDbCommand comando = new OleDbCommand(SQL, cnn);
  29.            comando.CommandType = CommandType.Text;
  30.            cnn.Open();
  31.            comando.Parameters.Clear();
  32.            comando.Parameters.AddWithValue("@View", (ViewState["idCurso"]));
  33.            DataTable tabla = new DataTable();
  34.            OleDbDataAdapter Adaptador = new OleDbDataAdapter(comando);
  35.            Adaptador.Fill(tabla);
  36.            GridInscMaterias.DataSource = tabla;
  37.            GridInscMaterias.DataBind();
  38.            cnn.Close();
  39.        }
  40.  
  41.        protected void GridInscMaterias_SelectedIndexChanged(object sender, EventArgs e)
  42.        {
  43.  
  44.        }
  45.        protected void ButtonTodas_Click(object sender, EventArgs e)
  46.        {
  47.            foreach
  48.            (GridViewRow dgi in GridInscMaterias.Rows)
  49.            {
  50.                CheckBox myCheckBox = dgi.Cells[0].Controls[1] as CheckBox;
  51.  
  52.                if (myCheckBox != null)
  53.                {
  54.  
  55.                    if (myCheckBox.Checked == true)
  56.                    {
  57.                        ViewState["idMateria"] = GridInscMaterias.DataKeys[dgi.RowIndex][0].ToString();
  58.  
  59.                        {
  60.                            string cadenaConexion = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  61.                            OleDbConnection cnn = new OleDbConnection(cadenaConexion);
  62.                            cnn.Open();
  63.                            string SQL = string.Empty;
  64.                            SQL = ("SELECT id_cursoMateria From CursosMaterias cm Where cm.id_Curso = @idCurso AND cm.id_Materia = @idMateria");
  65.  
  66.                            ViewState["idCursoMateria"] = SQL;
  67.  
  68.                            string sql = string.Empty;
  69.                            sql = @"INSERT INTO AlumMatCursos (Id_Alumno, id_cursoMateria)
  70.                                VALUES (@idAlumno, @idcurMat)";
  71.                            OleDbCommand cmd = new OleDbCommand(sql, cnn);
  72.                            cmd.Parameters.AddWithValue("@idCurso", (ViewState["idCurso"]));
  73.                            cmd.Parameters.AddWithValue("@idMateria", (ViewState["idMateria"]));
  74.                            cmd.Parameters.AddWithValue("@idAlumno", (ViewState["idAlumno"]));
  75.                            cmd.Parameters.AddWithValue("@idcurMat", (ViewState["idCursoMateria"]));
  76.                            cmd.ExecuteNonQuery();
  77.                            cnn.Close();
  78.                            lblMensaje.Text = "Se registraron correctamente en BD!";
  79.                        }
  80.                    }
  81.                }
  82.            }
  83.        }
  84.  
  85.        protected void GridAlumno_SelectedIndexChanged(object sender, EventArgs e)
  86.        {
  87.            // Se obtiene la fila seleccionada del gridview
  88.  
  89.            GridViewRow row = GridAlumno.SelectedRow;
  90.  
  91.            // Obtengo el id de la entidad que se esta editando
  92.            // en este caso de la entidad Curso
  93.            ViewState["idAlumno"] = Convert.ToInt32(GridAlumno.DataKeys[row.RowIndex].Value);
  94.        }
  95.    }
  96. }
  97.  


Título: Re: "No se puede agregar o cambiar el registro porque se necesita un registro relaci
Publicado por: fran800m en 16 Abril 2015, 21:03 pm
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,