Пример #1
0
        /// <summary>
        /// Valida el grid:
        ///             1. Que tenga al menos un registro
        ///             2. Que no tenga registros repetido
        /// </summary>
        /// <param name="dtg"> DataGrid a validar</param>
        /// <param name="ValidateEmpty">  Validacion de vacio </param>
        /// <param name="NumMinItems">Items minimos permitidos </param>
        /// <param name="NamePluralItem"> Nombre del objeto del grid en plural </param>
        /// <param name="NameSingularItem"> Nombre del objeto del grid en singular </param>
        /// <param name="lstFields"> Campos a validar </param>
        /// <param name="lstItems"> lista de objetos del grid </param>
        /// <returns> TRUE - Todo correcto | FALSE - Alguna validacion no cumplida </returns>
        /// <history>
        /// [vipacheco] 10/Junio/2016 Created
        /// [vipacheco] 14/Sep/2016 Modified -> Se agregó la validacion de repeditos dentro del mismo metodo
        /// </history>
        public static bool Validate <T>(DataGrid dtg, bool ValidateEmpty = true, int NumMinItems = 1, string NamePluralItem = "", string NameSingularItem = "", List <string> lstFields = null, List <T> lstItems = null)
        {
            // si se debe validar que el grid no este vacio
            if (ValidateEmpty)
            {
                // si el numero minimo de elementos es menor de 2
                if (NumMinItems < 2)
                {
                    // validamos que se haya ingresado al menos un registro
                    if (dtg.Items.Count == 0)
                    {
                        UIHelper.ShowMessage("Specify at least one " + NameSingularItem + ".", MessageBoxImage.Information);
                        return(false);
                    }
                }
                // si el numero minimo de elementos es al menos 2
                else
                {
                    // validamos que tenga al menos determinado numero de elementos
                    if (!(dtg.Items.Count >= NumMinItems))
                    {
                        UIHelper.ShowMessage("Specify at least " + NumMinItems + " " + NameSingularItem + ".", MessageBoxImage.Information);
                        return(false);
                    }
                }
            }

            string message        = NamePluralItem + " must not be repeated.\r\n" + NameSingularItem + " repetead is ";
            string valuesRepeated = "";
            int    countRepeated  = 0;

            lstFields.ForEach(field =>
            {
                if (ObjectHelper.AreAnyDuplicates(lstItems, field))
                {
                    // Obtenemos el campo seleccionado
                    var valueSelected = lstItems.GroupBy(e => e.GetType().GetProperty(field).GetValue(e)).Where(w => w.Count() > 1).First();
                    // Obtenemos la columna en el que se encuentra
                    int index = dtg.Columns.Where(w => w.SortMemberPath == field).Select(s => s.DisplayIndex).First();
                    // Obtenemos el valor
                    var ColumnSelected = dtg.Columns[index];

                    if (ColumnSelected is DataGridComboBoxColumn)
                    {
                        DataGridComboBoxColumn column = ColumnSelected as DataGridComboBoxColumn;
                        IEnumerable <object> list     = column.ItemsSource.Cast <object>().ToList();

                        // Recorremos la lista de acuerdo al combo que se haya seleccionado.
                        foreach (var item in list)
                        {
                            // Obtenemos el ID del valor seleccionado.
                            var ValueID = item.GetType().GetProperty(column.SelectedValuePath).GetValue(item, null);

                            if (ValueID.Equals(valueSelected.Key))
                            {
                                // Obtenemos el valor seleccionado
                                valuesRepeated += $"{item.GetType().GetProperty(column.DisplayMemberPath).GetValue(item, null).ToString()}, ";
                                break;
                            }
                        }
                        countRepeated++;
                    }
                }
            });

            if (countRepeated == lstFields.Count())
            {
                message += valuesRepeated.TrimEnd(',', ' ');
                UIHelper.ShowMessage(message, MessageBoxImage.Exclamation, "Intelligence Marketing");
                return(false);
            }

            return(true);
        }