protected string GetCompareText(List<ColumnType> columnTypes, DataRow dataRow, int i) { if (string.IsNullOrEmpty(dataRow.GetColumnError(i))) return string.Empty; var factory = new CellFormatterFactory(); var formatter = factory.GetObject(columnTypes[i]); return formatter.Format(dataRow.GetColumnError(i)); }
private void GenerateTableErrors(DataTable table) { int count = table.Rows.Count; int num3 = table.Columns.Count; if (count > 0) { for (int i = 0; i < count; i++) { bool flag = false; DataRow row = table.Rows[i]; string prefix = (table.Namespace.Length != 0) ? table.Prefix : string.Empty; if (row.HasErrors && (row.RowError.Length > 0)) { if (!this.fErrors) { this._xmlw.WriteStartElement("diffgr", "errors", "urn:schemas-microsoft-com:xml-diffgram-v1"); this.fErrors = true; } this._xmlw.WriteStartElement(prefix, row.Table.EncodedTableName, row.Table.Namespace); this._xmlw.WriteAttributeString("diffgr", "id", "urn:schemas-microsoft-com:xml-diffgram-v1", row.Table.TableName + row.rowID.ToString(CultureInfo.InvariantCulture)); this._xmlw.WriteAttributeString("diffgr", "Error", "urn:schemas-microsoft-com:xml-diffgram-v1", row.RowError); flag = true; } if (num3 > 0) { for (int j = 0; j < num3; j++) { DataColumn column = table.Columns[j]; string columnError = row.GetColumnError(column); string str3 = (column.Namespace.Length != 0) ? column.Prefix : string.Empty; if ((columnError != null) && (columnError.Length != 0)) { if (!flag) { if (!this.fErrors) { this._xmlw.WriteStartElement("diffgr", "errors", "urn:schemas-microsoft-com:xml-diffgram-v1"); this.fErrors = true; } this._xmlw.WriteStartElement(prefix, row.Table.EncodedTableName, row.Table.Namespace); this._xmlw.WriteAttributeString("diffgr", "id", "urn:schemas-microsoft-com:xml-diffgram-v1", row.Table.TableName + row.rowID.ToString(CultureInfo.InvariantCulture)); flag = true; } this._xmlw.WriteStartElement(str3, column.EncodedColumnName, column.Namespace); this._xmlw.WriteAttributeString("diffgr", "Error", "urn:schemas-microsoft-com:xml-diffgram-v1", columnError); this._xmlw.WriteEndElement(); } } if (flag) { this._xmlw.WriteEndElement(); } } } } }
/// <summary> /// Procesa los mensajes de error en cada columna de la row y los carga en las colecciones /// </summary> /// <param name="row"></param> private void _ProcesarErrores(System.Data.DataRow row) { if (row.HasErrors) { foreach (DataColumn dc in row.GetColumnsInError()) { string tabla = row.Table.TableName; string campo = dc.ColumnName; string mensaje = row.GetColumnError(dc); _detailsErrors.Add(new ItemDatasetError(tabla, campo, mensaje)); } string tablarow = row.Table.TableName; string camporow = "N/A"; string mensajerow = row.RowError; _globalErrors.Add(new ItemDatasetError(tablarow, camporow, mensajerow)); } }
internal static bool RowHasErrors(DataRow row) { int count = row.Table.Columns.Count; if (row.HasErrors && (row.RowError.Length > 0)) { return(true); } for (int i = 0; i < count; i++) { DataColumn column = row.Table.Columns[i]; string columnError = row.GetColumnError(column); if ((columnError != null) && (columnError.Length != 0)) { return(true); } } return(false); }
internal DataRow MergeRow(DataRow row, DataRow targetRow, bool preserveChanges, Index idxSearch) { if (targetRow == null) { targetRow = this.NewEmptyRow(); targetRow.oldRecord = recordManager.ImportRecord(row.Table, row.oldRecord); targetRow.newRecord = targetRow.oldRecord; if(row.oldRecord != row.newRecord) { targetRow.newRecord = recordManager.ImportRecord(row.Table, row.newRecord); } InsertRow(targetRow, -1); } else { // SQLBU 500789: Record Manager corruption during Merge when target row in edit state // the newRecord would be freed and overwrite tempRecord (which became the newRecord) // this would leave the DataRow referencing a freed record and leaking memory for the now lost record int proposedRecord = targetRow.tempRecord; // by saving off the tempRecord, EndEdit won't free newRecord targetRow.tempRecord = -1; try { DataRowState saveRowState = targetRow.RowState; int saveIdxRecord = (saveRowState == DataRowState.Added) ? targetRow.newRecord : saveIdxRecord = targetRow.oldRecord; int newRecord; int oldRecord; if (targetRow.RowState == DataRowState.Unchanged && row.RowState == DataRowState.Unchanged) { // unchanged row merging with unchanged row oldRecord = targetRow.oldRecord; newRecord = (preserveChanges) ? recordManager.CopyRecord(this, oldRecord, -1) : targetRow.newRecord; oldRecord = recordManager.CopyRecord(row.Table, row.oldRecord, targetRow.oldRecord); SetMergeRecords(targetRow, newRecord, oldRecord, DataRowAction.Change); } else if (row.newRecord == -1) { // Incoming row is deleted oldRecord = targetRow.oldRecord; if (preserveChanges) { newRecord = (targetRow.RowState == DataRowState.Unchanged)? recordManager.CopyRecord(this, oldRecord, -1) : targetRow.newRecord; } else newRecord = -1; oldRecord = recordManager.CopyRecord(row.Table, row.oldRecord, oldRecord); // Change index record, need to update index if (saveIdxRecord != ((saveRowState == DataRowState.Added) ? newRecord : oldRecord)) { SetMergeRecords(targetRow, newRecord, oldRecord, (newRecord == -1) ? DataRowAction.Delete : DataRowAction.Change); idxSearch.Reset(); saveIdxRecord = ((saveRowState == DataRowState.Added) ? newRecord : oldRecord); } else { SetMergeRecords(targetRow, newRecord, oldRecord, (newRecord == -1) ? DataRowAction.Delete : DataRowAction.Change); } } else { // incoming row is added, modified or unchanged (targetRow is not unchanged) oldRecord = targetRow.oldRecord; newRecord = targetRow.newRecord; if (targetRow.RowState == DataRowState.Unchanged) { newRecord = recordManager.CopyRecord(this, oldRecord, -1); } oldRecord = recordManager.CopyRecord(row.Table, row.oldRecord, oldRecord); if (!preserveChanges) { newRecord = recordManager.CopyRecord(row.Table, row.newRecord, newRecord); } SetMergeRecords(targetRow, newRecord, oldRecord, DataRowAction.Change); } if (saveRowState == DataRowState.Added && targetRow.oldRecord != -1) idxSearch.Reset(); Debug.Assert(saveIdxRecord == ((saveRowState == DataRowState.Added) ? targetRow.newRecord : targetRow.oldRecord), "oops, you change index record without noticing it"); } finally { targetRow.tempRecord = proposedRecord; } } // Merge all errors if (row.HasErrors) { if (targetRow.RowError.Length == 0) { targetRow.RowError = row.RowError; } else { targetRow.RowError += " ]:[ " + row.RowError; } DataColumn[] cols = row.GetColumnsInError(); for (int i = 0; i < cols.Length; i++) { DataColumn col = targetRow.Table.Columns[cols[i].ColumnName]; targetRow.SetColumnError(col, row.GetColumnError(cols[i])); } }else { if (!preserveChanges) { targetRow.ClearErrors(); } } return targetRow; }
public void PutErrorOnDataSet(System.Data.DataRow row) { _errors.Clear(); if (_rowProductos.HasErrors) { System.Data.DataColumn[] columnasConError = row.GetColumnsInError(); for (int i = 0; columnasConError.Length < i; i++) { ItemDatasetError error = new ItemDatasetError(((System.Data.DataColumn)columnasConError[i]).Table.TableName, ((System.Data.DataColumn)columnasConError[i]).ColumnName, row.GetColumnError(columnasConError[i])); _errors.Add(error); } } }
internal static bool RowHasErrors(DataRow row) { int colCount = row.Table.Columns.Count; if ((row.HasErrors) && (row.RowError.Length > 0)) return true; for (int colNum = 0; colNum < colCount; ++colNum) { DataColumn column = row.Table.Columns[colNum]; string error = row.GetColumnError(column); if (error == null || error.Length == 0) { continue; } return true; } return false; }
/* Constructs the surrogate rowerror, columnsInError and columnErrors. */ private void ConvertToSurrogateRowError(DataRow row, int rowIndex) { Debug.Assert(row != null); Debug.Assert(_rowErrors != null); Debug.Assert(_colErrors != null); if (row.HasErrors) { _rowErrors.Add(rowIndex, row.RowError); DataColumn[] dcArr = row.GetColumnsInError(); if (dcArr.Length > 0) { int[] columnsInError = new int[dcArr.Length]; string[] columnErrors = new string[dcArr.Length]; for (int i = 0; i < dcArr.Length; i++) { columnsInError[i] = dcArr[i].Ordinal; columnErrors[i] = row.GetColumnError(dcArr[i]); } ArrayList list = new ArrayList(); list.Add(columnsInError); list.Add(columnErrors); _colErrors.Add(rowIndex, list); } } }
// IDataErrorInfo stuff string System.ComponentModel.IDataErrorInfo.this[string colName] { get { return(row.GetColumnError(colName)); } }
public void ImportRow(DataRow row) { long logScopeId = DataCommonEventSource.Log.EnterScope("<ds.DataTable.ImportRow|API> {0}", ObjectID); try { int oldRecord = -1, newRecord = -1; if (row == null) { return; } if (row._oldRecord != -1) { oldRecord = _recordManager.ImportRecord(row.Table, row._oldRecord); } if (row._newRecord != -1) { // row not deleted if (row.RowState != DataRowState.Unchanged) { // not unchanged, it means Added or modified newRecord = _recordManager.ImportRecord(row.Table, row._newRecord); } else { newRecord = oldRecord; } } if (oldRecord != -1 || newRecord != -1) { DataRow targetRow = AddRecords(oldRecord, newRecord); if (row.HasErrors) { targetRow.RowError = row.RowError; DataColumn[] cols = row.GetColumnsInError(); for (int i = 0; i < cols.Length; i++) { DataColumn col = targetRow.Table.Columns[cols[i].ColumnName]; targetRow.SetColumnError(col, row.GetColumnError(cols[i])); } } } } finally { DataCommonEventSource.Log.ExitScope(logScopeId); } }
internal void CopyRow(DataTable table, DataRow row) { int oldRecord = -1; int newRecord = -1; if (row != null) { if (row.oldRecord != -1) { oldRecord = table.recordManager.ImportRecord(row.Table, row.oldRecord); } if (row.newRecord != -1) { if (row.newRecord != row.oldRecord) { newRecord = table.recordManager.ImportRecord(row.Table, row.newRecord); } else { newRecord = oldRecord; } } DataRow row2 = table.AddRecords(oldRecord, newRecord); if (row.HasErrors) { row2.RowError = row.RowError; DataColumn[] columnsInError = row.GetColumnsInError(); for (int i = 0; i < columnsInError.Length; i++) { DataColumn column = row2.Table.Columns[columnsInError[i].ColumnName]; row2.SetColumnError(column, row.GetColumnError(columnsInError[i])); } } } }
internal DataRow MergeRow(DataRow row, DataRow targetRow, bool preserveChanges, Index idxSearch) { if (targetRow == null) { targetRow = this.NewEmptyRow(); targetRow.oldRecord = this.recordManager.ImportRecord(row.Table, row.oldRecord); targetRow.newRecord = targetRow.oldRecord; if (row.oldRecord != row.newRecord) { targetRow.newRecord = this.recordManager.ImportRecord(row.Table, row.newRecord); } this.InsertRow(targetRow, -1L); } else { int tempRecord = targetRow.tempRecord; targetRow.tempRecord = -1; try { int oldRecord; int newRecord; int num4; DataRowState rowState = targetRow.RowState; num4 = (rowState == DataRowState.Added) ? targetRow.newRecord : (num4 = targetRow.oldRecord); if ((targetRow.RowState == DataRowState.Unchanged) && (row.RowState == DataRowState.Unchanged)) { oldRecord = targetRow.oldRecord; newRecord = preserveChanges ? this.recordManager.CopyRecord(this, oldRecord, -1) : targetRow.newRecord; oldRecord = this.recordManager.CopyRecord(row.Table, row.oldRecord, targetRow.oldRecord); this.SetMergeRecords(targetRow, newRecord, oldRecord, DataRowAction.Change); } else if (row.newRecord == -1) { oldRecord = targetRow.oldRecord; if (preserveChanges) { newRecord = (targetRow.RowState == DataRowState.Unchanged) ? this.recordManager.CopyRecord(this, oldRecord, -1) : targetRow.newRecord; } else { newRecord = -1; } oldRecord = this.recordManager.CopyRecord(row.Table, row.oldRecord, oldRecord); if (num4 != ((rowState == DataRowState.Added) ? newRecord : oldRecord)) { this.SetMergeRecords(targetRow, newRecord, oldRecord, (newRecord == -1) ? DataRowAction.Delete : DataRowAction.Change); idxSearch.Reset(); num4 = (rowState == DataRowState.Added) ? newRecord : oldRecord; } else { this.SetMergeRecords(targetRow, newRecord, oldRecord, (newRecord == -1) ? DataRowAction.Delete : DataRowAction.Change); } } else { oldRecord = targetRow.oldRecord; newRecord = targetRow.newRecord; if (targetRow.RowState == DataRowState.Unchanged) { newRecord = this.recordManager.CopyRecord(this, oldRecord, -1); } oldRecord = this.recordManager.CopyRecord(row.Table, row.oldRecord, oldRecord); if (!preserveChanges) { newRecord = this.recordManager.CopyRecord(row.Table, row.newRecord, newRecord); } this.SetMergeRecords(targetRow, newRecord, oldRecord, DataRowAction.Change); } if ((rowState == DataRowState.Added) && (targetRow.oldRecord != -1)) { idxSearch.Reset(); } } finally { targetRow.tempRecord = tempRecord; } } if (row.HasErrors) { if (targetRow.RowError.Length == 0) { targetRow.RowError = row.RowError; } else { targetRow.RowError = targetRow.RowError + " ]:[ " + row.RowError; } DataColumn[] columnsInError = row.GetColumnsInError(); for (int i = 0; i < columnsInError.Length; i++) { DataColumn column = targetRow.Table.Columns[columnsInError[i].ColumnName]; targetRow.SetColumnError(column, row.GetColumnError(columnsInError[i])); } return targetRow; } if (!preserveChanges) { targetRow.ClearErrors(); } return targetRow; }
public void ImportRow(DataRow row) { IntPtr ptr; Bid.ScopeEnter(out ptr, "<ds.DataTable.ImportRow|API> %d#\n", this.ObjectID); try { int oldRecord = -1; int newRecord = -1; if (row != null) { if (row.oldRecord != -1) { oldRecord = this.recordManager.ImportRecord(row.Table, row.oldRecord); } if (row.newRecord != -1) { if (row.RowState != DataRowState.Unchanged) { newRecord = this.recordManager.ImportRecord(row.Table, row.newRecord); } else { newRecord = oldRecord; } } if ((oldRecord != -1) || (newRecord != -1)) { DataRow row2 = this.AddRecords(oldRecord, newRecord); if (row.HasErrors) { row2.RowError = row.RowError; DataColumn[] columnsInError = row.GetColumnsInError(); for (int i = 0; i < columnsInError.Length; i++) { DataColumn column = row2.Table.Columns[columnsInError[i].ColumnName]; row2.SetColumnError(column, row.GetColumnError(columnsInError[i])); } } } } } finally { Bid.ScopeLeave(ref ptr); } }
internal void CopyRow(DataTable table, DataRow row) { int oldRecord = -1, newRecord = -1; if (row == null) return; if (row.oldRecord != -1) { oldRecord = table.recordManager.ImportRecord(row.Table, row.oldRecord); } if (row.newRecord != -1) { if (row.newRecord != row.oldRecord) { newRecord = table.recordManager.ImportRecord(row.Table, row.newRecord); } else newRecord = oldRecord; } DataRow targetRow = table.AddRecords(oldRecord, newRecord); if (row.HasErrors) { targetRow.RowError = row.RowError; DataColumn[] cols = row.GetColumnsInError(); for (int i = 0; i < cols.Length; i++) { DataColumn col = targetRow.Table.Columns[cols[i].ColumnName]; targetRow.SetColumnError(col, row.GetColumnError(cols[i])); } } }
internal static bool RowHasErrors(DataRow row) { int count = row.Table.Columns.Count; if (row.HasErrors && (row.RowError.Length > 0)) { return true; } for (int i = 0; i < count; i++) { DataColumn column = row.Table.Columns[i]; string columnError = row.GetColumnError(column); if ((columnError != null) && (columnError.Length != 0)) { return true; } } return false; }
public void ImportRow(DataRow row) { IntPtr hscp; Bid.ScopeEnter(out hscp, "<ds.DataTable.ImportRow|API> %d#\n", ObjectID); try { int oldRecord = -1, newRecord = -1; if (row == null) return; if (row.oldRecord != -1) { oldRecord = recordManager.ImportRecord(row.Table, row.oldRecord); } if (row.newRecord != -1) { // row not deleted if (row.RowState != DataRowState.Unchanged) { // not unchanged, it means Added or modified newRecord = recordManager.ImportRecord(row.Table, row.newRecord); } else newRecord = oldRecord; } if (oldRecord != -1 || newRecord != -1) { DataRow targetRow = AddRecords(oldRecord, newRecord); if (row.HasErrors) { targetRow.RowError = row.RowError; DataColumn[] cols = row.GetColumnsInError(); for (int i = 0; i < cols.Length; i++) { DataColumn col = targetRow.Table.Columns[cols[i].ColumnName]; targetRow.SetColumnError(col, row.GetColumnError(cols[i])); } } } } finally { Bid.ScopeLeave(ref hscp); } }
/// <summary> /// Builds a string out of DataColumns that have errors and gives the name of the /// column where the first error is stored. /// /// </summary> /// <param name="ADataRow">DataRow in which the DataColumn errors should be iterated.</param> /// <param name="AErrorMessages">String containing all DataColumns that have errors, /// separated by two CR+LF's.</param> /// <param name="AFirstErrorControlName">Name of the DataColumn where the first error is /// stored. /// </param> /// <returns>void</returns> public static void IterateErrorsInData(DataRow ADataRow, out String AErrorMessages, out String AFirstErrorControlName) { string ErrorMessage; int ErrorCounter; DataColumn[] ErrorColumns; AErrorMessages = ""; AFirstErrorControlName = ""; ErrorColumns = ADataRow.GetColumnsInError(); for (ErrorCounter = 0; ErrorCounter <= ErrorColumns.Length; ErrorCounter += 1) { ErrorMessage = ADataRow.GetColumnError(ErrorColumns[ErrorCounter]); if (ErrorCounter == 0) { AFirstErrorControlName = ErrorMessage.Substring(ErrorMessage.IndexOf("//[[") + 4, ErrorMessage.IndexOf("]]") - (ErrorMessage.IndexOf("//[[") + 4)); } ErrorMessage = ErrorMessage.Substring(0, ErrorMessage.IndexOf("//[[")); AErrorMessages = AErrorMessages + ErrorMessage + Environment.NewLine + Environment.NewLine; } }