Пример #1
0
        private static void UpdateValidation(InternalDataRow dataRow1, InternalDataRow dataRow2)
        {
            if (dataRow2 != null && (bool)dataRow1[DiffUtility.DiffEnabledKey] == true)
            {
                foreach (var item in dataRow1.Table.Columns)
                {
                    if (item is InternalDataColumn dataColumn)
                    {
                        var field1      = dataRow1[dataColumn.ColumnName];
                        var dataColumn2 = GetColumn(dataRow2, dataColumn.Index);
                        var field2      = dataRow2[dataColumn2];

                        DiffDataTable.Validate((CremaDataRow)dataRow1, (CremaDataColumn)dataColumn);
                    }
                }

                if (dataRow1.GetColumnsInError().Any())
                {
                    dataRow1.RowError = rowError;
                }
                else
                {
                    dataRow1.RowError = string.Empty;
                }
            }
        }
Пример #2
0
        private static void Update(InternalDataRow dataRow1, InternalDataRow dataRow2, DiffState defaultState, string[] filters)
        {
            if (dataRow2 == null || (bool)dataRow1[DiffUtility.DiffEnabledKey] == false)
            {
                DiffUtility.SetDiffFields(dataRow1, null);
                DiffUtility.SetDiffState(dataRow1, DiffState.Imaginary);
            }
            else
            {
                var fieldsList = new List <string>(dataRow1.Table.Columns.Count);
                var diffState  = defaultState;

                foreach (var item in dataRow1.Table.Columns)
                {
                    if (item is InternalDataColumn dataColumn)
                    {
                        if (filters.Contains(dataColumn.ColumnName) == true)
                        {
                            continue;
                        }
                        var field1      = dataRow1[dataColumn.ColumnName];
                        var dataColumn2 = GetColumn(dataRow2, dataColumn.Index);
                        var field2      = dataRow2[dataColumn2];

                        if (object.Equals(field1, field2) == false)
                        {
                            fieldsList.Add(dataColumn.ColumnName);
                        }

                        DiffDataTable.Validate((CremaDataRow)dataRow1, (CremaDataColumn)dataColumn);
                    }
                    else if (item is InternalAttribute attribute)
                    {
                        if (attribute.ColumnMapping == MappingType.Hidden || filters.Contains(attribute.AttributeName) == true)
                        {
                            continue;
                        }
                        var field1 = dataRow1[attribute.AttributeName];
                        var field2 = dataRow2[attribute.AttributeName];

                        if (object.Equals(field1, field2) == false)
                        {
                            fieldsList.Add(attribute.AttributeName);
                        }
                    }
                }

                if (dataRow1.GetColumnsInError().Any())
                {
                    dataRow1.RowError = rowError;
                }
                else
                {
                    dataRow1.RowError = string.Empty;
                }

                if ((bool)dataRow2[DiffUtility.DiffEnabledKey] == true)
                {
                    if (fieldsList.Any() == true || object.Equals(dataRow1[CremaSchema.Index], dataRow2[CremaSchema.Index]) == false)
                    {
                        diffState = DiffState.Modified;
                    }
                    else
                    {
                        diffState = DiffState.Unchanged;
                    }

                    DiffUtility.SetDiffFields(dataRow1, fieldsList);
                    DiffUtility.SetDiffState(dataRow1, diffState);
                }
                else
                {
                    DiffUtility.SetDiffFields(dataRow1, null);
                    DiffUtility.SetDiffState(dataRow1, diffState);
                }
            }
        }