| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- //------------------------------------------------------------------------------
- // <copyright file="DataError.cs" company="Microsoft">
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // </copyright>
- // <owner current="true" primary="true">[....]</owner>
- // <owner current="true" primary="false">[....]</owner>
- // <owner current="false" primary="false">[....]</owner>
- //------------------------------------------------------------------------------
- namespace System.Data {
- using System;
- using System.Diagnostics;
- /// <devdoc>
- /// <para>Represents an custom error that can be associated with a <see cref='System.Data.DataRow'/>.</para>
- /// </devdoc>
- internal sealed class DataError {
- private string rowError = String.Empty;
- // column-level errors
- private int count;
- private ColumnError[] errorList;
- internal const int initialCapacity = 1;
- internal DataError() {
- }
- internal DataError(string rowError) {
- SetText(rowError);
- }
- internal string Text {
- get {
- return rowError;
- }
- set {
- SetText(value);
- }
- }
- internal bool HasErrors {
- get {
- return(rowError.Length != 0 || count != 0);
- }
- }
- //
- // this method resets the error to the new value.
- //
- internal void SetColumnError(DataColumn column, string error) {
- Debug.Assert(column != null, "Invalid (null) argument");
- Debug.Assert(column.Table != null, "Invalid (loose) column");
- if (error == null || error.Length == 0) {
- // remove error from the collection
- Clear(column);
- }
- else {
- if (errorList == null) {
- errorList = new ColumnError[initialCapacity];
- }
- int i = IndexOf(column);
- errorList[i].column = column;
- errorList[i].error = error;
- column.errors++;
- if (i == count)
- count++;
- }
- }
- internal string GetColumnError(DataColumn column) {
- for (int i = 0; i < count; i++) {
- if (errorList[i].column == column) {
- return errorList[i].error;
- }
- }
- return String.Empty;
- }
- internal void Clear(DataColumn column) {
- if (count == 0)
- return;
- for (int i = 0; i < count; i++) {
- if (errorList[i].column == column) {
- System.Array.Copy(errorList, i+1, errorList, i, count-i-1);
- count--;
- column.errors--;
- Debug.Assert(column.errors >= 0, "missing error counts");
- }
- }
- }
- internal void Clear() {
- for (int i = 0; i < count; i++) {
- errorList[i].column.errors--;
- Debug.Assert(errorList[i].column.errors >= 0, "missing error counts");
- }
- count = 0;
- rowError = String.Empty;
- }
- internal DataColumn[] GetColumnsInError() {
- DataColumn[] cols = new DataColumn[count];
- for (int i = 0; i < count; i++) {
- cols[i] = errorList[i].column;
- }
- return cols;
- }
- /// <devdoc>
- /// <para>Sets the error message for the <see cref='System.Data.DataError'/>.</para>
- /// </devdoc>
- private void SetText(string errorText) {
- if (null == errorText) {
- errorText = String.Empty;
- }
- rowError = errorText;
- }
- internal int IndexOf (DataColumn column) {
- // try to find the column
- for (int i = 0; i < count; i++) {
- if (errorList[i].column == column) {
- return i;
- }
- }
- if (count >= errorList.Length) {
- int newCapacity = Math.Min(count*2, column.Table.Columns.Count);
- ColumnError[] biggerList = new ColumnError[newCapacity];
- System.Array.Copy(errorList, 0, biggerList, 0, count);
- errorList = biggerList;
- }
- return count;
- }
- internal struct ColumnError {
- internal DataColumn column;
- internal string error;
- };
- }
- }
|