Browse Source

2002-12-02 Ville Palo <[email protected]>

	* System.Xml/XmlDataDocument.cs : some fixes and some imlemented
	methods.

svn path=/trunk/mcs/; revision=9353
Ville Palo 23 years ago
parent
commit
4a5b2db435
2 changed files with 60 additions and 26 deletions
  1. 5 0
      mcs/class/System.Data/ChangeLog
  2. 55 26
      mcs/class/System.Data/System.Xml/XmlDataDocument.cs

+ 5 - 0
mcs/class/System.Data/ChangeLog

@@ -1,3 +1,8 @@
+2002-12-02  Ville Palo <[email protected]>
+
+	* System.Xml/XmlDataDocument.cs : some fixes and some imlemented 
+	methods.
+	
 2002-12-01  Tim Coleman <[email protected]>
 	* System.Data.SqlClient/SqlDataReader.cs:
 		Change to reflect TdsSchemaInfo -> TdsDataColumnCollection

+ 55 - 26
mcs/class/System.Data/System.Xml/XmlDataDocument.cs

@@ -218,7 +218,7 @@ namespace System.Xml {
 
 					if (reader.Name == DataSet.Tables [i].TableName) {
 
-						dt = DataSet.Tables [i];
+ 						dt = DataSet.Tables [i];
 						dt.ColumnChanged += new DataColumnChangeEventHandler (OnDataTableColumnChanged);
 						dt.RowDeleted += new DataRowChangeEventHandler (OnDataTableRowDeleted);
 						dt.RowChanged += new DataRowChangeEventHandler (OnDataTableRowChanged);
@@ -228,20 +228,30 @@ namespace System.Xml {
 				// TODO: Findout what kind of exception 
 				if (dt == null) 
 					throw new Exception (); // there were no correct table
-				
+
+				// Read rows to table
+				DataRow tempRow = dt.NewRow ();
 				while ((reader.NodeType != XmlNodeType.EndElement ||
 					reader.Name != dt.TableName) && reader.Read()) {
 					
 					switch (reader.NodeType) {
 						
 				        case XmlNodeType.Element:
-						dt.Rows.Add (LoadRow (reader, dt.NewRow ()));
-						
+						// Add column to DataRow
+						LoadRow (reader, ref tempRow);
 						break;
 				        default:
 						break;
 					}			
-				}		
+				}
+
+				// Every row must have unique id.
+				tempRow.XmlRowID = dataRowID;
+				dataRowIDList.Add (dataRowID);
+				dt.Rows.Add (tempRow);
+				dataRowID++;					
+				
+				
 			} while (reader.Read ());
 
 			base.Load (textReader);
@@ -323,11 +333,16 @@ namespace System.Xml {
 					OnDataTableRowAdded (eventArgs);
 					break;
 
+			        case DataRowAction.Rollback:
+					OnDataTableRowRollback (eventArgs);
+					break;
 			        default:
 					break;
 			} 
 		}
 
+		// Added
+		[MonoTODO]
 		private void OnDataTableRowAdded (DataRowChangeEventArgs args)
 		{
 			// If XmlRowID is != 0 then it is already added
@@ -339,52 +354,66 @@ namespace System.Xml {
 			row.XmlRowID = dataRowID;
 			dataRowID++;
 			XmlElement element = CreateElement (args.Row.Table.TableName);
-			Console.WriteLine ("-" + args.Row.Table.TableName);
-			
 			DocumentElement.AppendChild (element);
 			
 			XmlElement rowElement = null;
 			for (int i = 0; i < row.Table.Columns.Count; i++) {
-								
-				Console.WriteLine (row.Table.Columns [i].ToString () + " " + row[i]);
+
 				rowElement = CreateElement (row.Table.Columns [i].ToString ());
 				rowElement.InnerText = (string)row [i];
 				element.AppendChild (rowElement);
 			}
 		}
 
+		// Rollback
+		[MonoTODO]
+		private void OnDataTableRowRollback (DataRowChangeEventArgs args)
+		{
+			DataRow row = args.Row;
+			
+			int rowid = dataRowIDList.IndexOf (row.XmlRowID);
+			
+			// find right element in xmldocument
+			XmlNode node = GetElementsByTagName (row.Table.TableName) [rowid];
+
+			int rowValue = 0;
+			for (int i = 0; i < node.ChildNodes.Count; i++) {
+
+				XmlNode child = node.ChildNodes [i];
+				if (child.NodeType != XmlNodeType.Whitespace)				
+					child.InnerText = (string)row [rowValue++];
+				
+			}
+			
+		}
+
 		#endregion // DataSet event handlers
 
 		#region Private methods
 
 		[MonoTODO]
-		private DataRow LoadRow (XmlReader reader, DataRow row)
-		{
+		private void LoadRow (XmlReader reader, ref DataRow row)
+		{			
+			// dt.Rows.Add (LoadRow (reader, dt.NewRow ()));
 			// This method returns DataRow filled by values
 			// from xmldocument
 			string rowname = reader.Name;
 			string column = "";
-			     		
+			
 			if (reader.NodeType == XmlNodeType.Element)
 				column = reader.Name;
-
+			
 			reader.Read ();
-
+			
 			if (reader.NodeType == XmlNodeType.Text) {
-
-					string val = reader.Value;
-					if (row.Table.Columns.Contains (column))
-						row [column] = val;
+				
+				string val = reader.Value;
+				if (row.Table.Columns.Contains (column))
+					row [column] = val;
 			}
-
-			// Every row must have unique id.
-			row.XmlRowID = dataRowID;
-			dataRowIDList.Add (dataRowID);
-			dataRowID++;					
-
-			return row;
 		}
-
+		
 		#endregion // Private methods
 	}
 }
+