2005-01-27 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Thu, 27 Jan 2005 00:33:01 +0000 (00:33 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Thu, 27 Jan 2005 00:33:01 +0000 (00:33 -0000)
* DataViewSetting.cs,
  DataViewSettingCollection.cs,
  DataViewManager.cs : implemented basic members.

svn path=/trunk/mcs/; revision=39614

mcs/class/System.Data/System.Data/ChangeLog
mcs/class/System.Data/System.Data/DataViewManager.cs
mcs/class/System.Data/System.Data/DataViewSetting.cs
mcs/class/System.Data/System.Data/DataViewSettingCollection.cs

index cb062890273a516dbbc08068ce569fa4348c873e..fa38a81802432e446db4981b1a81473f41690b9b 100644 (file)
@@ -1,3 +1,9 @@
+2005-01-27  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DataViewSetting.cs,
+         DataViewSettingCollection.cs,
+         DataViewManager.cs : implemented basic members.
+
 2005-01-26  Atsushi Enomoto  <atsushi@ximian.com>
 
        * Node.cs, DataColumnPropertyDescriptor.cs, DataTable.cs :
index b62e0a0cca418d9bbb3ce2c300adec055c7d1fff..5cd9f833094e6b16817a849814832c44dbf0f6a1 100644 (file)
@@ -4,9 +4,11 @@
 // Author:
 //   Rodrigo Moya (rodrigo@ximian.com)
 //   Tim Coleman (tim@timcoleman.com)
+//   Atsushi Enomoto (atsushi@ximian.com)
 //
 // (C) Ximian, Inc. 2002
 // Copyright (C) Tim Coleman, 2002
+// Copyright (C) 2005 Novell Inc,
 //
 
 //
@@ -35,6 +37,8 @@
 using System;
 using System.Collections;
 using System.ComponentModel;
+using System.IO;
+using System.Xml;
 
 namespace System.Data
 {
@@ -49,19 +53,22 @@ namespace System.Data
 
                DataSet dataSet;
                DataViewManagerListItemTypeDescriptor descriptor;
+               DataViewSettingCollection settings;
+               string xml;
 
                #endregion // Fields
 
                #region Constructors
 
-               public DataViewManager () 
+               public DataViewManager ()
+                       : this (null)
                {
-                       dataSet = null;
                }
 
-               public DataViewManager (DataSet ds) 
+               public DataViewManager (DataSet ds)
                {
-                       dataSet = ds;
+                       // Null argument is allowed here.
+                       SetDataSet (ds);
                }
 
                #endregion // Constructors
@@ -72,25 +79,33 @@ namespace System.Data
                [DefaultValue (null)]
                public DataSet DataSet {
                        get { return dataSet; }
-                       set { dataSet = value; }
+                       set {
+                               if (value == null)
+                                       throw new DataException ("Cannot set null DataSet.");
+                               SetDataSet (value);
+                       }
                }
 
-               [MonoTODO]
                public string DataViewSettingCollectionString {
-                       get { throw new NotImplementedException (); }
-                       set { throw new NotImplementedException (); }
+                       get { return xml; }
+                       set {
+                               try {
+                                       ParseSettingString (value);
+                                       xml = BuildSettingString ();
+                               } catch (XmlException ex) {
+                                       throw new DataException ("Cannot set DataViewSettingCollectionString.", ex);
+                               }
+                       }
                }
 
-               [MonoTODO]
                [DataSysDescription ("Indicates the sorting/filtering/state settings for any table in the corresponding DataSet.")]
                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Content)]
                public DataViewSettingCollection DataViewSettings {
-                       get { throw new NotImplementedException (); }
+                       get { return settings; }
                }
 
                int ICollection.Count {
-                       [MonoTODO]
-                       get { throw new NotImplementedException (); }
+                       get { return settings.Count; }
                }
 
                bool ICollection.IsSynchronized {
@@ -170,11 +185,91 @@ namespace System.Data
                #endregion // Properties
 
                #region Methods
+               private void SetDataSet (DataSet ds)
+               {
+                       dataSet = ds;
+                       settings = new DataViewSettingCollection (this);
+                       xml = BuildSettingString ();
+               }
+
+               private void ParseSettingString (string source)
+               {
+                       XmlTextReader xtr = new XmlTextReader (source,
+                               XmlNodeType.Element, null);
+
+                       xtr.ReadStartElement ("DataViewSettingCollectionString");
+                       if (xtr.IsEmptyElement)
+                               return; // MS does not change the value.
+
+                       ArrayList result = new ArrayList ();
+                       xtr.Read ();
+                       do {
+                               xtr.MoveToContent ();
+                               if (xtr.NodeType == XmlNodeType.EndElement)
+                                       break;
+                               if (xtr.NodeType == XmlNodeType.Element)
+                                       ReadTableSetting (xtr);
+                               else
+                                       xtr.Skip ();
+                       } while (!xtr.EOF);
+                       if (xtr.NodeType == XmlNodeType.EndElement)
+                               xtr.ReadEndElement ();
+               }
+
+               private void ReadTableSetting (XmlReader reader)
+               {
+                       // Namespace is ignored BTW.
+                       DataTable dt = DataSet.Tables [XmlConvert.DecodeName (
+                               reader.LocalName)];
+                       // The code below might result in NullReference error.
+                       DataViewSetting s = settings [dt];
+                       string sort = reader.GetAttribute ("Sort");
+                       if (sort != null)
+                               s.Sort = sort.Trim ();
+                       string ads = reader.GetAttribute ("ApplyDefaultSort");
+                       if (ads != null && ads.Trim () == "true")
+                               s.ApplyDefaultSort = true;
+                       string rowFilter = reader.GetAttribute ("RowFilter");
+                       if (rowFilter != null)
+                               s.RowFilter = rowFilter.Trim ();
+                       string rsf = reader.GetAttribute ("RowStateFilter");
+                       if (rsf != null)
+                               s.RowStateFilter = (DataViewRowState)
+                                       Enum.Parse (typeof (DataViewRowState), 
+                                       rsf.Trim ());
+
+                       reader.Skip ();
+               }
+
+               private string BuildSettingString ()
+               {
+                       if (dataSet == null)
+                               return String.Empty;
+
+                       StringWriter sw = new StringWriter ();
+                       XmlTextWriter xw = new XmlTextWriter (sw);
+                       xw.WriteStartElement (
+                               "DataViewSettingCollectionString");
+                       foreach (DataViewSetting s in DataViewSettings) {
+                               xw.WriteStartElement (XmlConvert.EncodeName (
+                                               s.Table.TableName));
+                               xw.WriteAttributeString ("Sort", s.Sort);
+                               // LAMESPEC: MS.NET does not seem to handle this property as expected.
+                               if (s.ApplyDefaultSort)
+                                       xw.WriteAttributeString ("ApplyDefaultSort", "true");
+                               xw.WriteAttributeString ("RowFilter", s.RowFilter);
+                               xw.WriteAttributeString ("RowStateFilter", s.RowStateFilter.ToString ());
+                               xw.WriteEndElement ();
+                       }
+                       xw.WriteFullEndElement ();
+                       xw.Flush ();
+                       return sw.ToString ();
+               }
 
-               [MonoTODO]
                public DataView CreateDataView (DataTable table) 
                {
-                       return new DataView (table);
+                       DataViewSetting s = settings [table];
+                       return new DataView (table, s.Sort, s.RowFilter, s.RowStateFilter);
                }
 
                [MonoTODO]
index 262d60f527f36c362d64eae606d497a4589ed383..5fafd57723963d62ee266be34a8606452647eae5 100644 (file)
@@ -4,13 +4,15 @@
 // Authors:
 //   Rodrigo Moya (rodrigo@ximian.com)
 //   Tim Coleman (tim@timcoleman.com)
+//   Atsushi Enomoto (atsushi@ximian.com)
 //
 // (C) Ximian, Inc. 2002
 // Copyright (C) Tim Coleman, 2002
+// Copyright (C) 2005 Novell Inc,
 //
 
 //
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004-05 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -47,17 +49,19 @@ namespace System.Data
 
                bool applyDefaultSort;
                DataViewManager dataViewManager;
-               string rowFilter;
-               DataViewRowState rowStateFilter;
-               string sort;
+               string rowFilter = String.Empty;
+               DataViewRowState rowStateFilter = DataViewRowState.CurrentRows;
+               string sort = String.Empty;
                DataTable dataTable;
 
                #endregion // Fields
 
                #region Constructors
 
-               internal DataViewSetting ()
+               internal DataViewSetting (DataViewManager manager, DataTable table)
                {
+                       dataViewManager = manager;
+                       dataTable = table;
                }
 
                #endregion // Constructors
index 4f1ffcd34c40bb14f3f7edd9efa54065e8792665..b5bc5d4a470ee0a873fbb886c640e023fded7ea5 100755 (executable)
@@ -5,9 +5,11 @@
 //   Rodrigo Moya (rodrigo@ximian.com)
 //   Miguel de Icaza (miguel@gnome.org)
 //   Tim Coleman (tim@timcoleman.com)
+//   Atsushi Enomoto (atsushi@ximian.com)
 //
 // (C) 2002 Ximian, Inc.  http://www.ximian.com
 // Copyright (C) Tim Coleman, 2002
+// Copyright (C) 2005 Novell Inc,
 //
 
 //
@@ -55,6 +57,11 @@ namespace System.Data {
 
                internal DataViewSettingCollection (DataViewManager manager)
                {
+                       settingList = new ArrayList ();
+                       if (manager.DataSet != null)
+                               foreach (DataTable dt in manager.DataSet.Tables)
+                                       settingList.Add (new DataViewSetting (
+                                               manager, dt));
                }
 
                #endregion // Constructors