2 // System.Data.Common.DataColumnCollection
5 // Rodrigo Moya (rodrigo@ximian.com)
11 using System.Collections;
14 namespace System.Data.Common
17 /// Contains a collection of DataColumnMapping objects. This class cannot be inherited.
19 public sealed class DataColumnMappingCollection : MarshalByRefObject, IColumnMappingCollection , IList, ICollection, IEnumerable
24 Hashtable sourceColumns;
25 Hashtable dataSetColumns;
31 public DataColumnMappingCollection ()
33 list = new ArrayList ();
34 sourceColumns = new Hashtable ();
35 dataSetColumns = new Hashtable ();
43 get { return list.Count; }
46 public DataColumnMapping this[int index] {
47 get { return (DataColumnMapping)(list[index]); }
49 DataColumnMapping mapping = (DataColumnMapping)(list[index]);
50 sourceColumns[mapping] = value;
51 dataSetColumns[mapping] = value;
56 public DataColumnMapping this[string sourceColumn] {
57 get { return (DataColumnMapping)(sourceColumns[sourceColumn]); }
58 set { this[list.IndexOf (sourceColumns[sourceColumn])] = value; }
61 object ICollection.SyncRoot {
62 get { return list.SyncRoot; }
65 bool ICollection.IsSynchronized {
66 get { return list.IsSynchronized; }
69 object IColumnMappingCollection.this[string sourceColumn] {
70 get { return this[sourceColumn]; }
72 if (!(value is DataColumnMapping))
73 throw new ArgumentException ();
74 this[sourceColumn] = (DataColumnMapping)value;
78 object IList.this[int index] {
79 get { return this[index]; }
81 if (!(value is DataColumnMapping))
82 throw new ArgumentException ();
83 this[index] = (DataColumnMapping)value;
87 bool IList.IsReadOnly {
91 bool IList.IsFixedSize {
100 public int Add (object value)
102 if (!(value is DataColumnMapping))
103 throw new InvalidCastException ();
106 sourceColumns[((DataColumnMapping)value).SourceColumn] = value;
107 dataSetColumns[((DataColumnMapping)value).DataSetColumn] = value;
108 return list.IndexOf (value);
111 public DataColumnMapping Add (string sourceColumn, string dataSetColumn)
113 DataColumnMapping mapping = new DataColumnMapping (sourceColumn, dataSetColumn);
118 public void AddRange (DataColumnMapping[] values)
120 foreach (DataColumnMapping mapping in values)
129 public bool Contains (object value)
131 return (list.Contains (value));
134 public bool Contains (string value)
136 return (sourceColumns.Contains (value));
139 public void CopyTo (Array array, int index)
141 ((DataColumn[])(list.ToArray())).CopyTo (array, index);
144 public DataColumnMapping GetByDataSetColumn (string value)
146 return (DataColumnMapping)(dataSetColumns[value]);
149 public static DataColumnMapping GetColumnMappingBySchemaAction (DataColumnMappingCollection columnMappings, string sourceColumn, MissingMappingAction mappingAction)
151 if (columnMappings.Contains (sourceColumn))
152 return columnMappings[sourceColumn];
154 if (mappingAction == MissingMappingAction.Ignore)
157 if (mappingAction == MissingMappingAction.Error)
158 throw new SystemException ();
160 return new DataColumnMapping (sourceColumn, sourceColumn);
163 public IEnumerator GetEnumerator ()
165 return list.GetEnumerator ();
168 IColumnMapping IColumnMappingCollection.Add (string sourceColumnName, string dataSetColumnName)
170 return Add (sourceColumnName, dataSetColumnName);
173 IColumnMapping IColumnMappingCollection.GetByDataSetColumn (string dataSetColumnName)
175 return GetByDataSetColumn (dataSetColumnName);
178 public int IndexOf (object value)
180 return list.IndexOf (value);
183 public int IndexOf (string sourceColumn)
185 return list.IndexOf (sourceColumns[sourceColumn]);
188 public int IndexOfDataSetColumn (string value)
190 return list.IndexOf (dataSetColumns[value]);
193 public void Insert (int index, object value)
195 list.Insert (index, value);
196 sourceColumns[((DataColumnMapping)value).SourceColumn] = value;
197 dataSetColumns[((DataColumnMapping)value).DataSetColumn] = value;
200 public void Remove (object value)
202 sourceColumns.Remove(((DataColumnMapping)value).SourceColumn);
203 dataSetColumns.Remove(((DataColumnMapping)value).DataSetColumn);
207 public void RemoveAt (int index)
209 Remove (list[index]);
212 public void RemoveAt (string sourceColumn)
214 RemoveAt (list.IndexOf (sourceColumns[sourceColumn]));