/// <summary>
        /// Implementa Save_button_Click
        /// </summary>
        protected override void SubmitAction()
        {
            if (((ComboBoxSource)Promocion_O_CB.SelectedItem).Oid == 0 ||
                ((ComboBoxSource)Promocion_D_CB.SelectedItem).Oid == 0)
            {
                MessageBox.Show("Debe seleccionar promociones de origen y destino válidas");
                return;
            }

            if (((ComboBoxSource)Promocion_O_CB.SelectedItem).Oid ==
                ((ComboBoxSource)Promocion_D_CB.SelectedItem).Oid)
            {
                MessageBox.Show("Debe seleccionar promociones de origen y destino diferentes");
                return;
            }

            Submodulos_Instructores_Promociones capacidad_origen = Entity.Promociones.GetByOidPromocion(((ComboBoxSource)Promocion_O_CB.SelectedItem).Oid).Submodulos;
            long oid_promocion = ((ComboBoxSource)Promocion_D_CB.SelectedItem).Oid;

            Instructor_Promocion promo = null;

            foreach (Instructor_Promocion item in Entity.Promociones)
            {
                if (item.OidPromocion == oid_promocion)
                {
                    promo = item;
                    break;
                }
            }

            if (promo == null)
            {
                promo = Instructor_Promocion.NewChild(Entity);
                promo.MarkItemNew();

                promo.OidPromocion = oid_promocion;
                Entity.Promociones.AddItem(promo);
            }

            foreach (Submodulo_Instructor_Promocion item in capacidad_origen)
            {
                Submodulo_Instructor_Promocion elem = Submodulo_Instructor_Promocion.NewChild(promo);
                elem.MarkItemNew();

                elem.OidPromocion  = oid_promocion;
                elem.OidSubmodulo  = item.OidSubmodulo;
                elem.OidModulo     = item.OidModulo;
                elem.OidInstructor = item.OidInstructor;
                elem.Prioridad     = item.Prioridad;

                if (!promo.Submodulos.IsDuplicated(elem))
                {
                    promo.Submodulos.Add(elem);
                }
            }

            _action_result = DialogResult.OK;
            Close();
        }
        private void Submodulo_Instructor_Grid_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (this is InstructorUIForm)
            {
                switch (Submodulo_Instructor_Grid.Columns[e.ColumnIndex].Name)
                {
                case ("Modulo_CBC"):
                {
                    if (Submodulo_Instructor_Grid["Modulo_CBC", e.RowIndex].Value != null)
                    {
                        if (Datos_Promociones.Current != null && ((Instructor_Promocion)Datos_Promociones.Current).OidPromocion > 0)
                        {
                            //se está modificando una línea ya existente
                            if (lista_sources.Count > e.RowIndex)
                            {
                                lista_sources[e.RowIndex] = _combo_modulos.GetFilteredChilds((long)Submodulo_Instructor_Grid["Modulo_CBC", e.RowIndex].Value);
                            }
                            else         //hay que añadir un nuevo datasource a la lista
                            {
                                lista_sources.Add(_combo_modulos.GetFilteredChilds((long)Submodulo_Instructor_Grid["Modulo_CBC", e.RowIndex].Value));
                            }
                            ((DataGridViewComboBoxCell)(Submodulo_Instructor_Grid["Submodulo_CBC", e.RowIndex])).DataSource         = lista_sources[e.RowIndex];
                            ((Submodulo_Instructor_Promocion)Submodulo_Instructor_Grid.Rows[e.RowIndex].DataBoundItem).OidPromocion = ((Instructor_Promocion)Datos_Promociones.Current).OidPromocion;
                        }
                    }
                }
                break;

                case ("Submodulo_CBC"):
                {
                    if (Datos_Promociones.Current == null)
                    {
                        return;
                    }

                    Instructor_Promocion selected = Entity.Promociones.GetItem(((Instructor_Promocion)Datos_Promociones.Current).Oid);

                    if (selected == null)
                    {
                        foreach (Instructor_Promocion item in Entity.Promociones)
                        {
                            if (item.Oid == ((Instructor_Promocion)Datos_Promociones.Current).Oid)
                            {
                                selected = item;
                                break;
                            }
                        }
                    }

                    Submodulos_Instructores_Promociones lista = selected.Submodulos;


                    if (lista.Count <= e.RowIndex)
                    {
                        lista.Add((Submodulo_Instructor_Promocion)Submodulo_Instructor_Grid.Rows[e.RowIndex].DataBoundItem);
                    }

                    lista[e.RowIndex].OidInstructorPromocion = ((Instructor_Promocion)Datos_Promociones.Current).Oid;
                    lista[e.RowIndex].OidInstructor          = Entity.Oid;
                }
                break;
                }
            }
        }