private void validar()
        {
            string errores = "";

            if (cmbMaterias.SelectedItem == null)
            {
                errores += "Debe seleccionar una materia" + Environment.NewLine;
            }

            if (cmbEstado.SelectedItem == null)
            {
                errores += "Debe seleccionar un estado" + Environment.NewLine;
            }

            if (errores != "")
            {
                throw new WarningException(errores);
            }

            Materia        correlativa = (Materia)cmbMaterias.SelectedItem;
            MateriaService s           = new MateriaService();

            if (correlativa.Id == this.materia.Id)
            {
                throw new WarningException("La materia no puede tenerse a sí misma como correlativa.");
            }

            if (s.GetCorrelativasById(materia.Id).Any(x => x.Correlativa.Id == correlativa.Id && x.Deshabilitado == false))
            {
                throw new WarningException("La materia ya tiene asociada esa correlativa.");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["Usuario"] == null)
            {
                Response.Redirect("~/Default.aspx");
                return;
            }

            Usuario usuario = (Usuario)Session["Usuario"];

            if (usuario.TipoUsuario != TipoUsuario.Estudiante)
            {
                Response.Redirect("~/Docente.aspx");
                return;
            }

            if (Session["MateriaEstudiante"] != null)
            {
                Session.Remove("MateriaEstudiante");
            }

            if (IsPostBack)
            {
                return;
            }

            #region Creacion de listado de materias a las que se puede inscribir

            AlumnoService  alumnoService  = new AlumnoService();
            MateriaService materiaService = new MateriaService();

            Alumno alumno = alumnoService.GetAlumnoByUserName(usuario.Nombre);

            List <AlumnoComision> alumnoComisiones = alumnoService.GetAlumnosComision()
                                                     .FindAll(x => x.Alumno.Id == alumno.Id && x.Deshabilitado == false);

            List <Materia> materiasAExcluir = alumnoComisiones
                                              .Where(x => x.Estado <= EstadoMateria.Cursando)
                                              .Select(x => x.Comision.Materia).ToList();

            List <Carrera> carreras = new CarreraService().GetByAlumnoId(alumno.Id);
            List <Materia> lista    = new List <Materia>();

            foreach (var carrera in carreras)
            {
                lista.AddRange(materiaService.GetByCarreraId(carrera.Id));
            }

            List <Materia> aux = new List <Materia>(lista);

            foreach (var materia in aux)
            {
                List <MateriaCorrelativa> materiasCorrelativas = materiaService.GetCorrelativasById(materia.Id)
                                                                 .FindAll(x => x.Deshabilitado == false);

                foreach (var correlativa in materiasCorrelativas)
                {
                    bool puedeCursar = false;

                    foreach (var alumnoComision in alumnoComisiones)
                    {
                        if (alumnoComision.Comision.Materia.Id == correlativa.Correlativa.Id &&
                            (alumnoComision.Estado == correlativa.EstadoRequerido || alumnoComision.Estado == EstadoMateria.Aprobada))
                        {
                            puedeCursar = true;
                        }
                    }

                    if (!puedeCursar)
                    {
                        lista.Remove(materia);
                        break;
                    }
                }
            }

            foreach (var materia in materiasAExcluir)
            {
                lista.RemoveAll(x => x.Id == materia.Id);
            }

            #endregion

            dgvMaterias.DataSource = lista
                                     .OrderBy(x => x.Carrera.Id)
                                     .ThenBy(x => x.Año)
                                     .ThenBy(x => x.Cuatrimestre).ToList();

            dgvMaterias.DataBind();

            divSinRegistros.Visible = lista.Count == 0;
        }