/// <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); }