| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- //------------------------------------------------------------------------------
- // <copyright file="DataViewManager.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.ComponentModel;
- using System.Collections;
- using System.IO;
- using System.Text;
- using System.Xml;
- [
- Designer("Microsoft.VSDesigner.Data.VS.DataViewManagerDesigner, " + AssemblyRef.MicrosoftVSDesigner)
- ]
- public class DataViewManager : MarshalByValueComponent, IBindingList, System.ComponentModel.ITypedList {
- private DataViewSettingCollection dataViewSettingsCollection;
- private DataSet dataSet;
- private DataViewManagerListItemTypeDescriptor item;
- private bool locked;
- internal int nViews = 0;
- private System.ComponentModel.ListChangedEventHandler onListChanged;
- private static NotSupportedException NotSupported = new NotSupportedException();
- public DataViewManager() : this(null, false) {}
- public DataViewManager(DataSet dataSet) : this(dataSet, false) {}
- internal DataViewManager(DataSet dataSet, bool locked) {
- GC.SuppressFinalize(this);
- this.dataSet = dataSet;
- if (this.dataSet != null) {
- this.dataSet.Tables.CollectionChanged += new CollectionChangeEventHandler(TableCollectionChanged);
- this.dataSet.Relations.CollectionChanged += new CollectionChangeEventHandler(RelationCollectionChanged);
- }
- this.locked = locked;
- this.item = new DataViewManagerListItemTypeDescriptor(this);
- this.dataViewSettingsCollection = new DataViewSettingCollection(this);
- }
- [
- DefaultValue(null),
- ResDescriptionAttribute(Res.DataViewManagerDataSetDescr)
- ]
- public DataSet DataSet {
- get {
- return dataSet;
- }
- set {
- if (value == null)
- throw ExceptionBuilder.SetFailed("DataSet to null");
- if (locked)
- throw ExceptionBuilder.SetDataSetFailed();
- if (dataSet != null) {
- if (nViews > 0)
- throw ExceptionBuilder.CanNotSetDataSet();
- this.dataSet.Tables.CollectionChanged -= new CollectionChangeEventHandler(TableCollectionChanged);
- this.dataSet.Relations.CollectionChanged -= new CollectionChangeEventHandler(RelationCollectionChanged);
- }
- this.dataSet = value;
- this.dataSet.Tables.CollectionChanged += new CollectionChangeEventHandler(TableCollectionChanged);
- this.dataSet.Relations.CollectionChanged += new CollectionChangeEventHandler(RelationCollectionChanged);
- this.dataViewSettingsCollection = new DataViewSettingCollection(this);
- item.Reset();
- }
- }
- [
- DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
- ResDescriptionAttribute(Res.DataViewManagerTableSettingsDescr)
- ]
- public DataViewSettingCollection DataViewSettings {
- get {
- return dataViewSettingsCollection;
- }
- }
- public string DataViewSettingCollectionString {
- get {
- if (dataSet == null)
- return "";
- StringBuilder builder = new StringBuilder();
- builder.Append("<DataViewSettingCollectionString>");
- foreach (DataTable dt in dataSet.Tables) {
- DataViewSetting ds = dataViewSettingsCollection[dt];
- builder.AppendFormat(System.Globalization.CultureInfo.InvariantCulture, "<{0} Sort=\"{1}\" RowFilter=\"{2}\" RowStateFilter=\"{3}\"/>", dt.EncodedTableName, ds.Sort, ds.RowFilter, ds.RowStateFilter);
- }
- builder.Append("</DataViewSettingCollectionString>");
- return builder.ToString();
- }
- set {
- if (value == null || value.Length == 0)
- return;
- XmlTextReader r = new XmlTextReader(new StringReader(value));
- r.WhitespaceHandling = WhitespaceHandling.None;
- r.Read();
- if (r.Name != "DataViewSettingCollectionString")
- throw ExceptionBuilder.SetFailed("DataViewSettingCollectionString");
- while (r.Read()) {
- if (r.NodeType != XmlNodeType.Element)
- continue;
- string table = XmlConvert.DecodeName(r.LocalName);
- if (r.MoveToAttribute("Sort"))
- dataViewSettingsCollection[table].Sort = r.Value;
- if (r.MoveToAttribute("RowFilter"))
- dataViewSettingsCollection[table].RowFilter = r.Value;
- if (r.MoveToAttribute("RowStateFilter"))
- dataViewSettingsCollection[table].RowStateFilter = (DataViewRowState)Enum.Parse(typeof(DataViewRowState),r.Value);
- }
- }
- }
- IEnumerator IEnumerable.GetEnumerator() {
- DataViewManagerListItemTypeDescriptor[] items = new DataViewManagerListItemTypeDescriptor[1];
- ((ICollection)this).CopyTo(items, 0);
- return items.GetEnumerator();
- }
- int ICollection.Count {
- get {
- return 1;
- }
- }
- object ICollection.SyncRoot {
- get {
- return this;
- }
- }
- bool ICollection.IsSynchronized {
- get {
- return false;
- }
- }
- bool IList.IsReadOnly {
- get {
- return true;
- }
- }
- bool IList.IsFixedSize {
- get {
- return true;
- }
- }
- void ICollection.CopyTo(Array array, int index) {
- array.SetValue((object)(new DataViewManagerListItemTypeDescriptor(this)), index);
- }
- object IList.this[int index] {
- get {
- return item;
- }
- set {
- throw ExceptionBuilder.CannotModifyCollection();
- }
- }
- int IList.Add(object value) {
- throw ExceptionBuilder.CannotModifyCollection();
- }
- void IList.Clear() {
- throw ExceptionBuilder.CannotModifyCollection();
- }
- bool IList.Contains(object value) {
- return(value == item);
- }
- int IList.IndexOf(object value) {
- return(value == item) ? 1 : -1;
- }
- void IList.Insert(int index, object value) {
- throw ExceptionBuilder.CannotModifyCollection();
- }
- void IList.Remove(object value) {
- throw ExceptionBuilder.CannotModifyCollection();
- }
- void IList.RemoveAt(int index) {
- throw ExceptionBuilder.CannotModifyCollection();
- }
- // ------------- IBindingList: ---------------------------
- bool IBindingList.AllowNew {
- get {
- return false;
- }
- }
- object IBindingList.AddNew() {
- throw NotSupported;
- }
- bool IBindingList.AllowEdit {
- get {
- return false;
- }
- }
- bool IBindingList.AllowRemove {
- get {
- return false;
- }
- }
- bool IBindingList.SupportsChangeNotification {
- get {
- return true;
- }
- }
- bool IBindingList.SupportsSearching {
- get {
- return false;
- }
- }
- bool IBindingList.SupportsSorting {
- get {
- return false;
- }
- }
- bool IBindingList.IsSorted {
- get {
- throw NotSupported;
- }
- }
- PropertyDescriptor IBindingList.SortProperty {
- get {
- throw NotSupported;
- }
- }
- ListSortDirection IBindingList.SortDirection {
- get {
- throw NotSupported;
- }
- }
- public event System.ComponentModel.ListChangedEventHandler ListChanged {
- add {
- onListChanged += value;
- }
- remove {
- onListChanged -= value;
- }
- }
- void IBindingList.AddIndex(PropertyDescriptor property) {
- // no operation
- }
- void IBindingList.ApplySort(PropertyDescriptor property, ListSortDirection direction) {
- throw NotSupported;
- }
- int IBindingList.Find(PropertyDescriptor property, object key) {
- throw NotSupported;
- }
- void IBindingList.RemoveIndex(PropertyDescriptor property) {
- // no operation
- }
- void IBindingList.RemoveSort() {
- throw NotSupported;
- }
- /*
- string IBindingList.GetListName() {
- return ((System.Data.ITypedList)this).GetListName(null);
- }
- string IBindingList.GetListName(PropertyDescriptor[] listAccessors) {
- return ((System.Data.ITypedList)this).GetListName(listAccessors);
- }
- */
- // [....]: GetListName and GetItemProperties almost the same in DataView and DataViewManager
- string System.ComponentModel.ITypedList.GetListName(PropertyDescriptor[] listAccessors) {
- DataSet dataSet = DataSet;
- if (dataSet == null)
- throw ExceptionBuilder.CanNotUseDataViewManager();
- if (listAccessors == null || listAccessors.Length == 0) {
- return dataSet.DataSetName;
- }
- else {
- DataTable table = dataSet.FindTable(null, listAccessors, 0);
- if (table != null) {
- return table.TableName;
- }
- }
- return String.Empty;
- }
- PropertyDescriptorCollection System.ComponentModel.ITypedList.GetItemProperties(PropertyDescriptor[] listAccessors) {
- DataSet dataSet = DataSet;
- if (dataSet == null)
- throw ExceptionBuilder.CanNotUseDataViewManager();
- if (listAccessors == null || listAccessors.Length == 0) {
- return((ICustomTypeDescriptor)(new DataViewManagerListItemTypeDescriptor(this))).GetProperties();
- }
- else {
- DataTable table = dataSet.FindTable(null, listAccessors, 0);
- if (table != null) {
- return table.GetPropertyDescriptorCollection(null);
- }
- }
- return new PropertyDescriptorCollection(null);
- }
- public DataView CreateDataView(DataTable table) {
- if (dataSet == null)
- throw ExceptionBuilder.CanNotUseDataViewManager();
- DataView dataView = new DataView(table);
- dataView.SetDataViewManager(this);
- return dataView;
- }
- protected virtual void OnListChanged(ListChangedEventArgs e) {
- try {
- if (onListChanged != null) {
- onListChanged(this, e);
- }
- }
- catch (Exception f) {
- //
- if (!Common.ADP.IsCatchableExceptionType(f)) {
- throw;
- }
- ExceptionBuilder.TraceExceptionWithoutRethrow(f);
- // ignore the exception
- }
- }
- protected virtual void TableCollectionChanged(object sender, CollectionChangeEventArgs e) {
- PropertyDescriptor NullProp = null;
- OnListChanged(
- e.Action == CollectionChangeAction.Add ? new ListChangedEventArgs(ListChangedType.PropertyDescriptorAdded, new DataTablePropertyDescriptor((System.Data.DataTable)e.Element)) :
- e.Action == CollectionChangeAction.Refresh ? new ListChangedEventArgs(ListChangedType.PropertyDescriptorChanged, NullProp) :
- e.Action == CollectionChangeAction.Remove ? new ListChangedEventArgs(ListChangedType.PropertyDescriptorDeleted, new DataTablePropertyDescriptor((System.Data.DataTable)e.Element)) :
- /*default*/ null
- );
- }
- protected virtual void RelationCollectionChanged(object sender, CollectionChangeEventArgs e) {
- DataRelationPropertyDescriptor NullProp = null;
- OnListChanged(
- e.Action == CollectionChangeAction.Add ? new ListChangedEventArgs(ListChangedType.PropertyDescriptorAdded, new DataRelationPropertyDescriptor((System.Data.DataRelation)e.Element)) :
- e.Action == CollectionChangeAction.Refresh ? new ListChangedEventArgs(ListChangedType.PropertyDescriptorChanged, NullProp):
- e.Action == CollectionChangeAction.Remove ? new ListChangedEventArgs(ListChangedType.PropertyDescriptorDeleted, new DataRelationPropertyDescriptor((System.Data.DataRelation)e.Element)) :
- /*default*/ null
- );
- }
- }
- }
|