DataColumnMappingCollection.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. //
  2. // System.Data.Common.DataColumnCollection
  3. //
  4. // Author:
  5. // Rodrigo Moya ([email protected])
  6. //
  7. // (C) Ximian, Inc
  8. //
  9. using System;
  10. using System.Collections;
  11. using System.Data;
  12. namespace System.Data.Common
  13. {
  14. /// <summary>
  15. /// Contains a collection of DataColumnMapping objects. This class cannot be inherited.
  16. /// </summary>
  17. public sealed class DataColumnMappingCollection : MarshalByRefObject, IColumnMappingCollection , IList, ICollection, IEnumerable
  18. {
  19. #region Fields
  20. ArrayList list;
  21. Hashtable sourceColumns;
  22. Hashtable dataSetColumns;
  23. #endregion
  24. #region Constructors
  25. public DataColumnMappingCollection ()
  26. {
  27. list = new ArrayList ();
  28. sourceColumns = new Hashtable ();
  29. dataSetColumns = new Hashtable ();
  30. }
  31. #endregion
  32. #region Properties
  33. public int Count {
  34. get { return list.Count; }
  35. }
  36. public DataColumnMapping this[int index] {
  37. get { return (DataColumnMapping)(list[index]); }
  38. set {
  39. DataColumnMapping mapping = (DataColumnMapping)(list[index]);
  40. sourceColumns[mapping] = value;
  41. dataSetColumns[mapping] = value;
  42. list[index] = value;
  43. }
  44. }
  45. public DataColumnMapping this[string sourceColumn] {
  46. get { return (DataColumnMapping)(sourceColumns[sourceColumn]); }
  47. set { this[list.IndexOf (sourceColumns[sourceColumn])] = value; }
  48. }
  49. object ICollection.SyncRoot {
  50. get { return list.SyncRoot; }
  51. }
  52. bool ICollection.IsSynchronized {
  53. get { return list.IsSynchronized; }
  54. }
  55. object IColumnMappingCollection.this[string sourceColumn] {
  56. get { return this[sourceColumn]; }
  57. set {
  58. if (!(value is DataColumnMapping))
  59. throw new ArgumentException ();
  60. this[sourceColumn] = (DataColumnMapping)value;
  61. }
  62. }
  63. object IList.this[int index] {
  64. get { return this[index]; }
  65. set {
  66. if (!(value is DataColumnMapping))
  67. throw new ArgumentException ();
  68. this[index] = (DataColumnMapping)value;
  69. }
  70. }
  71. bool IList.IsReadOnly {
  72. get { return false; }
  73. }
  74. bool IList.IsFixedSize {
  75. get { return false; }
  76. }
  77. #endregion
  78. #region Methods
  79. public int Add (object value)
  80. {
  81. if (!(value is DataColumnMapping))
  82. throw new InvalidCastException ();
  83. list.Add (value);
  84. sourceColumns[((DataColumnMapping)value).SourceColumn] = value;
  85. dataSetColumns[((DataColumnMapping)value).DataSetColumn] = value;
  86. return list.IndexOf (value);
  87. }
  88. public DataColumnMapping Add (string sourceColumn, string dataSetColumn)
  89. {
  90. DataColumnMapping mapping = new DataColumnMapping (sourceColumn, dataSetColumn);
  91. Add (mapping);
  92. return mapping;
  93. }
  94. public void AddRange (DataColumnMapping[] values)
  95. {
  96. foreach (DataColumnMapping mapping in values)
  97. Add (mapping);
  98. }
  99. public void Clear ()
  100. {
  101. list.Clear ();
  102. }
  103. public bool Contains (object value)
  104. {
  105. return (list.Contains (value));
  106. }
  107. public bool Contains (string value)
  108. {
  109. return (sourceColumns.Contains (value));
  110. }
  111. public void CopyTo (Array array, int index)
  112. {
  113. ((DataColumn[])(list.ToArray())).CopyTo (array, index);
  114. }
  115. public DataColumnMapping GetByDataSetColumn (string value)
  116. {
  117. return (DataColumnMapping)(dataSetColumns[value]);
  118. }
  119. public static DataColumnMapping GetColumnMappingBySchemaAction (DataColumnMappingCollection columnMappings, string sourceColumn, MissingMappingAction mappingAction)
  120. {
  121. if (columnMappings.Contains (sourceColumn))
  122. return columnMappings[sourceColumn];
  123. if (mappingAction == MissingMappingAction.Ignore)
  124. return null;
  125. if (mappingAction == MissingMappingAction.Error)
  126. throw new SystemException ();
  127. return new DataColumnMapping (sourceColumn, sourceColumn);
  128. }
  129. public IEnumerator GetEnumerator ()
  130. {
  131. return list.GetEnumerator ();
  132. }
  133. IColumnMapping IColumnMappingCollection.Add (string sourceColumnName, string dataSetColumnName)
  134. {
  135. return Add (sourceColumnName, dataSetColumnName);
  136. }
  137. IColumnMapping IColumnMappingCollection.GetByDataSetColumn (string dataSetColumnName)
  138. {
  139. return GetByDataSetColumn (dataSetColumnName);
  140. }
  141. public int IndexOf (object value)
  142. {
  143. return list.IndexOf (value);
  144. }
  145. public int IndexOf (string sourceColumn)
  146. {
  147. return list.IndexOf (sourceColumns[sourceColumn]);
  148. }
  149. public int IndexOfDataSetColumn (string value)
  150. {
  151. return list.IndexOf (dataSetColumns[value]);
  152. }
  153. public void Insert (int index, object value)
  154. {
  155. list.Insert (index, value);
  156. sourceColumns[((DataColumnMapping)value).SourceColumn] = value;
  157. dataSetColumns[((DataColumnMapping)value).DataSetColumn] = value;
  158. }
  159. public void Remove (object value)
  160. {
  161. sourceColumns.Remove(((DataColumnMapping)value).SourceColumn);
  162. dataSetColumns.Remove(((DataColumnMapping)value).DataSetColumn);
  163. list.Remove (value);
  164. }
  165. public void RemoveAt (int index)
  166. {
  167. Remove (list[index]);
  168. }
  169. public void RemoveAt (string sourceColumn)
  170. {
  171. RemoveAt (list.IndexOf (sourceColumns[sourceColumn]));
  172. }
  173. #endregion
  174. }
  175. }