2 // System.Data.Common.DataColumnMappingCollection
5 // Rodrigo Moya (rodrigo@ximian.com)
6 // Tim Coleman (tim@timcoleman.com)
9 // Copyright (C) Tim Coleman, 2002
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 public DataColumnMapping this [int index] {
51 get { return (DataColumnMapping)(list[index]); }
53 DataColumnMapping mapping = (DataColumnMapping)(list[index]);
54 sourceColumns[mapping] = value;
55 dataSetColumns[mapping] = value;
60 public DataColumnMapping this [string sourceColumn] {
61 get { return (DataColumnMapping) sourceColumns[sourceColumn]; }
62 set { this [list.IndexOf (sourceColumns[sourceColumn])] = value; }
65 object ICollection.SyncRoot {
66 get { return list.SyncRoot; }
69 bool ICollection.IsSynchronized {
70 get { return list.IsSynchronized; }
73 object IColumnMappingCollection.this [string sourceColumn] {
74 get { return this [sourceColumn]; }
76 if (!(value is DataColumnMapping))
77 throw new ArgumentException ();
78 this [sourceColumn] = (DataColumnMapping) value;
82 object IList.this [int index] {
83 get { return this[index]; }
85 if (!(value is DataColumnMapping))
86 throw new ArgumentException ();
87 this [index] = (DataColumnMapping) value;
91 bool IList.IsReadOnly {
95 bool IList.IsFixedSize {
99 #endregion // Properties
103 public int Add (object value)
105 if (!(value is DataColumnMapping))
106 throw new InvalidCastException ();
109 sourceColumns[((DataColumnMapping)value).SourceColumn] = value;
110 dataSetColumns[((DataColumnMapping)value).DataSetColumn] = value;
111 return list.IndexOf (value);
114 public DataColumnMapping Add (string sourceColumn, string dataSetColumn)
116 DataColumnMapping mapping = new DataColumnMapping (sourceColumn, dataSetColumn);
121 public void AddRange (DataColumnMapping[] values)
123 foreach (DataColumnMapping mapping in values)
132 public bool Contains (object value)
134 return (list.Contains (value));
137 public bool Contains (string value)
139 return (sourceColumns.Contains (value));
142 public void CopyTo (Array array, int index)
144 ((DataColumn[])(list.ToArray())).CopyTo (array, index);
147 public DataColumnMapping GetByDataSetColumn (string value)
149 return (DataColumnMapping)(dataSetColumns[value]);
152 [EditorBrowsable (EditorBrowsableState.Advanced)]
153 public static DataColumnMapping GetColumnMappingBySchemaAction (DataColumnMappingCollection columnMappings, string sourceColumn, MissingMappingAction mappingAction)
155 if (columnMappings.Contains (sourceColumn))
156 return columnMappings[sourceColumn];
157 if (mappingAction == MissingMappingAction.Ignore)
159 if (mappingAction == MissingMappingAction.Error)
160 throw new InvalidOperationException (String.Format ("Missing SourceColumn mapping for '{0}'", sourceColumn));
161 return new DataColumnMapping (sourceColumn, sourceColumn);
164 public IEnumerator GetEnumerator ()
166 return list.GetEnumerator ();
169 IColumnMapping IColumnMappingCollection.Add (string sourceColumnName, string dataSetColumnName)
171 return Add (sourceColumnName, dataSetColumnName);
174 IColumnMapping IColumnMappingCollection.GetByDataSetColumn (string dataSetColumnName)
176 return GetByDataSetColumn (dataSetColumnName);
179 public int IndexOf (object value)
181 return list.IndexOf (value);
184 public int IndexOf (string sourceColumn)
186 return list.IndexOf (sourceColumns[sourceColumn]);
189 public int IndexOfDataSetColumn (string value)
191 return list.IndexOf (dataSetColumns[value]);
194 public void Insert (int index, object value)
196 list.Insert (index, value);
197 sourceColumns[((DataColumnMapping)value).SourceColumn] = value;
198 dataSetColumns[((DataColumnMapping)value).DataSetColumn] = value;
201 public void Remove (object value)
203 sourceColumns.Remove(((DataColumnMapping)value).SourceColumn);
204 dataSetColumns.Remove(((DataColumnMapping)value).DataSetColumn);
208 public void RemoveAt (int index)
210 Remove (list[index]);
213 public void RemoveAt (string sourceColumn)
215 RemoveAt (list.IndexOf (sourceColumns[sourceColumn]));
218 #endregion // Methods