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

  • Pregunta

  • Hola, como les va? con anterioridad, consulte con referencia a un error que me daba cuando apretaba un botón Aceptar(guardar)con lo seleccionado en DropDownList mas lo seleccionado en 2 GridsView...............El error era:

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

    Hoy, los DropsDownList fueron reemplazados por 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....

     protected void Page_Load(object sender, EventArgs e)
            {
                AccesoLogicaM b = new AccesoLogicaM();
                GridCursos.DataSource = b.fillGridView("Select Id_Curso, Año, Seccion 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);
            }
        }
    }


    miércoles, 1 de abril de 2015 23:51

Todas las respuestas

  • hola

    un primer problema que noto es que en el page_load estas recargando los grid en cada evento, deberias poner el codigo dentro del

    if(!IsPostBack){

      //aqui cargar los grid

    }

    -----

    en el evento ButtonTodas_Click, que significa cuando haces

    string SQL = string.Empty;
    SQL = ("SELECT id_cursoMateria From CursosMaterias cm Where cm.id_Curso = @idCurso AND cm.id_Materia = @idMateria");

    ViewState["idCursoMateria"] = SQL;

    donde ejecutas ese SELECT que asignas el viewstate? tienes que asignarlo a un SqlCommand y usar el ExecuteScalar() para tomar el valor del id

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 12 de abril de 2015 22:43