Пример #1
0
        /// <summary>
        /// Recupera la página del índice específicado.
        /// </summary>
        /// <param name="indicePagina">Indice de la página a añadir.</param>
        /// <param name="indiceGrupo">Cuando existen varía páginas
        /// del mimo número de página en el modelo, aquí se indica
        /// el indice en base 0 de la página que se quiere recuperar
        /// (si no se especifica se devuelve la primera coincidencia).</param>
        /// <param name="crear">Si es true y no se encuentra la página
        /// entre los empaquetables, la crea.</param>
        /// <param name="numeroPaginaHija">Indica si se tiene que resuperar una subpágina
        /// contenida en la página principal indicada por indice en base 1 de la subpágina</param>
        /// <returns>Página recuperada si existe, recién creada
        /// si no existe y crear=true o null si no existe e índiceGrupo no
        /// es igual a 0 o crear es false.</returns>
        public RegistroMod RecuperaPagina(int indicePagina, int indiceGrupo = 0,
                                          bool crear = false, int numeroPaginaHija = 0)
        {
            RegistroMod paginaPrincipal = null;

            if (indicePagina == -1)
            {
                paginaPrincipal = this;
            }

            if (paginaPrincipal == null && !PaginasMapa.ContainsKey(indicePagina))
            {
                throw new ArgumentException(Errores.MostrarMensaje("RegistroMod.000", $"{indicePagina}"));
            }

            if (paginaPrincipal == null)
            {
                int count = 0;

                string typeName = PaginasMapa[indicePagina];

                Type tipoObjetivo = Type.GetType(typeName);

                if (paginaPrincipal == null)
                {
                    foreach (var pagina in Paginas.Empaquetables)
                    {
                        if (pagina.GetType().IsAssignableFrom(tipoObjetivo) && indiceGrupo == count++)
                        {
                            paginaPrincipal = pagina as RegistroMod;
                        }
                    }
                }

                if (paginaPrincipal == null && crear) // Si la página no existe y se permite crear.
                {
                    paginaPrincipal = InsertaPagina(indicePagina);
                }
            }

            if (numeroPaginaHija == 0) // Si no busco una página hija, devuelvo la actual
            {
                return(paginaPrincipal);
            }

            // Si busco una página hija

            if (paginaPrincipal?.Registros?.Empaquetables != null && paginaPrincipal?.Registros?.Empaquetables.Count < numeroPaginaHija - 1)
            {
                throw new ArgumentException(Errores.MostrarMensaje("ConjuntoDeEmpaquetables.001", $"{numeroPaginaHija-1}"));
            }

            return(paginaPrincipal?.Registros?.Empaquetables[numeroPaginaHija - 1] as RegistroMod);
        }
Пример #2
0
        /// <summary>
        /// Añade una página del índice específicado.
        /// </summary>
        /// <param name="indicePagina">Indice de la página a añadir.</param>
        /// <returns>Página añadida.</returns>
        public RegistroMod InsertaPagina(int indicePagina)
        {
            if (!PaginasMapa.ContainsKey(indicePagina))
            {
                throw new ArgumentException(
                          Errores.MostrarMensaje("RegistroMod.000", $"{indicePagina}"));
            }

            string typeName = PaginasMapa[indicePagina];

            Type        tipoEmpaquetable = Type.GetType(typeName);
            RegistroMod pagina           = Activator.CreateInstance(tipoEmpaquetable, Ejercicio, Periodo) as RegistroMod;

            Paginas.Empaquetables.Add(pagina);

            return(pagina);
        }