2 // System.Data.Common.DataColumnMappingCollection
5 // Rodrigo Moya (rodrigo@ximian.com)
6 // Tim Coleman (tim@timcoleman.com)
9 // Copyright (C) Tim Coleman, 2002-2003
13 using System.Collections;
14 using System.ComponentModel;
17 namespace System.Data.Common {
18 public sealed class DataColumnMappingCollection : MarshalByRefObject, IColumnMappingCollection , IList, ICollection, IEnumerable
23 Hashtable sourceColumns;
24 Hashtable dataSetColumns;
30 public DataColumnMappingCollection ()
32 list = new ArrayList ();
33 sourceColumns = new Hashtable ();
34 dataSetColumns = new Hashtable ();
37 #endregion // Constructors
42 [DataSysDescription ("The number of items in the collection")]
43 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
45 get { return list.Count; }
49 [DataSysDescription ("The specified DataColumnMapping object.")]
50 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
51 public DataColumnMapping this [int index] {
52 get { return (DataColumnMapping)(list[index]); }
54 DataColumnMapping mapping = (DataColumnMapping)(list[index]);
55 sourceColumns[mapping] = value;
56 dataSetColumns[mapping] = value;
62 [DataSysDescription ("DataTableMappings_Item")]
63 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
64 public DataColumnMapping this [string sourceColumn] {
66 if (!Contains(sourceColumn)) {
67 throw new IndexOutOfRangeException("DataColumnMappingCollection doesn't contains DataColumnMapping with SourceColumn '" + sourceColumn + "'.");
69 return (DataColumnMapping) sourceColumns[sourceColumn]; }
70 set { this [list.IndexOf (sourceColumns[sourceColumn])] = value; }
73 object ICollection.SyncRoot {
74 get { return list.SyncRoot; }
77 bool ICollection.IsSynchronized {
78 get { return list.IsSynchronized; }
81 object IColumnMappingCollection.this [string sourceColumn] {
82 get { return this [sourceColumn]; }
84 if (!(value is DataColumnMapping))
85 throw new ArgumentException ();
86 this [sourceColumn] = (DataColumnMapping) value;
90 object IList.this [int index] {
91 get { return this[index]; }
93 if (!(value is DataColumnMapping))
94 throw new ArgumentException ();
95 this [index] = (DataColumnMapping) value;
99 bool IList.IsReadOnly {
100 get { return false; }
103 bool IList.IsFixedSize {
104 get { return false; }
107 #endregion // Properties
111 public int Add (object value)
113 if (!(value is DataColumnMapping))
114 throw new InvalidCastException ();
117 sourceColumns[((DataColumnMapping)value).SourceColumn] = value;
118 dataSetColumns[((DataColumnMapping)value).DataSetColumn] = value;
119 return list.IndexOf (value);
122 public DataColumnMapping Add (string sourceColumn, string dataSetColumn)
124 DataColumnMapping mapping = new DataColumnMapping (sourceColumn, dataSetColumn);
131 public void AddRange (Array values)
133 throw new NotImplementedException ();
137 public void AddRange (DataColumnMapping[] values)
139 foreach (DataColumnMapping mapping in values)
148 public bool Contains (object value)
150 return (list.Contains (value));
153 public bool Contains (string value)
155 return (sourceColumns.Contains (value));
158 public void CopyTo (Array array, int index)
160 ((DataColumn[])(list.ToArray())).CopyTo (array, index);
163 public DataColumnMapping GetByDataSetColumn (string value)
165 return (DataColumnMapping)(dataSetColumns[value]);
168 [EditorBrowsable (EditorBrowsableState.Advanced)]
169 public static DataColumnMapping GetColumnMappingBySchemaAction (DataColumnMappingCollection columnMappings, string sourceColumn, MissingMappingAction mappingAction)
171 if (columnMappings.Contains (sourceColumn))
172 return columnMappings[sourceColumn];
173 if (mappingAction == MissingMappingAction.Ignore)
175 if (mappingAction == MissingMappingAction.Error)
176 throw new InvalidOperationException (String.Format ("Missing SourceColumn mapping for '{0}'", sourceColumn));
177 return new DataColumnMapping (sourceColumn, sourceColumn);
182 public static DataColumn GetDataColumn (DataColumnMappingCollection columnMappings, string sourceColumn, Type dataType, DataTable dataTable, MissingMappingAction mappingAction, MissingSchemaAction schemaAction)
184 throw new NotImplementedException ();
188 public IEnumerator GetEnumerator ()
190 return list.GetEnumerator ();
193 IColumnMapping IColumnMappingCollection.Add (string sourceColumnName, string dataSetColumnName)
195 return Add (sourceColumnName, dataSetColumnName);
198 IColumnMapping IColumnMappingCollection.GetByDataSetColumn (string dataSetColumnName)
200 return GetByDataSetColumn (dataSetColumnName);
203 public int IndexOf (object value)
205 return list.IndexOf (value);
208 public int IndexOf (string sourceColumn)
210 return list.IndexOf (sourceColumns[sourceColumn]);
213 public int IndexOfDataSetColumn (string value)
215 return list.IndexOf (dataSetColumns[value]);
218 public void Insert (int index, object value)
220 list.Insert (index, value);
221 sourceColumns[((DataColumnMapping)value).SourceColumn] = value;
222 dataSetColumns[((DataColumnMapping)value).DataSetColumn] = value;
225 public void Remove (object value)
227 sourceColumns.Remove(((DataColumnMapping)value).SourceColumn);
228 dataSetColumns.Remove(((DataColumnMapping)value).DataSetColumn);
232 public void RemoveAt (int index)
234 Remove (list[index]);
237 public void RemoveAt (string sourceColumn)
239 RemoveAt (list.IndexOf (sourceColumns[sourceColumn]));
242 #endregion // Methods