/// <summary> /// /// </summary> /// <param name="root"></param> /// <param name="reader"></param> /// <param name="prefix"></param> public void PopulateTree(CompositeNode root, IDataReader reader, String prefix) { string[] fields = GetFields(reader); int[] indexesToSkip = FindDuplicateFields(fields); IndexedNode indexNode = new IndexedNode(prefix); int row = 0; while(reader.Read()) { CompositeNode node = new CompositeNode(row.ToString()); for(int i=0; i<reader.FieldCount; i++) { // Is in the skip list? if (Array.IndexOf(indexesToSkip, i) >= 0) continue; // Is null? if (reader.IsDBNull(i)) continue; Type fieldType = reader.GetFieldType(i); node.AddChildNode(new LeafNode(fieldType, fields[i], reader.GetValue(i))); } indexNode.AddChildNode(node); row++; } root.AddChildNode(indexNode); }
private static CompositeNode GetParamsNode(int expectedValue) { CompositeNode paramsNode = new CompositeNode("root"); IndexedNode listNode = new IndexedNode("myList"); paramsNode.AddChildNode(listNode); listNode.AddChildNode(new LeafNode(typeof(int), "", expectedValue)); return paramsNode; }
private object ConvertComplexNodesToArray(Type desiredType, IndexedNode parent, out bool conversionSucceeded) { Type arrayElemType = desiredType.GetElementType(); ArrayList validItems = ConvertComplexNodesToList(arrayElemType, parent, out conversionSucceeded); return(conversionSucceeded ? validItems.ToArray(arrayElemType) : Array.CreateInstance(arrayElemType, 0)); }
private IndexedNode GetOrCreateIndexedNode(CompositeNode parent, string nodeName) { Node node = parent.GetChildNode(nodeName); if (node != null && node.NodeType != NodeType.Indexed) { throw new BindingException("Attempt to create or obtain an indexed node " + "named {0}, but a node with the same exists with the type {1}", nodeName, node.NodeType); } if (node == null) { node = new IndexedNode(nodeName); parent.AddChildNode(node); } return((IndexedNode)node); }
/// <summary> /// /// </summary> /// <param name="root"></param> /// <param name="reader"></param> /// <param name="prefix"></param> public void PopulateTree(CompositeNode root, IDataReader reader, String prefix) { string[] fields = GetFields(reader); int[] indexesToSkip = FindDuplicateFields(fields); var indexNode = new IndexedNode(prefix); int row = 0; while (reader.Read()) { var node = new CompositeNode(row.ToString()); for (int i = 0; i < reader.FieldCount; i++) { // Is in the skip list? if (Array.IndexOf(indexesToSkip, i) >= 0) { continue; } // Is null? if (reader.IsDBNull(i)) { continue; } Type fieldType = reader.GetFieldType(i); node.AddChildNode(new LeafNode(fieldType, fields[i], reader.GetValue(i))); } indexNode.AddChildNode(node); row++; } root.AddChildNode(indexNode); }
private ArrayList ConvertComplexNodesToList(Type elemType, IndexedNode parent, out bool conversionSucceeded) { conversionSucceeded = true; var validItems = new ArrayList(); foreach (Node node in parent.ChildNodes) { if (node.NodeType == NodeType.Composite) { var lnode = node as CompositeNode; validItems.Add(InternalBindObject(elemType, parent.Name, lnode, out conversionSucceeded)); if (!conversionSucceeded) { break; } } } return(validItems); }
private ArrayList ConvertComplexNodesToList(Type elemType, IndexedNode parent, out bool conversionSucceeded) { conversionSucceeded = true; ArrayList validItems = new ArrayList(); foreach(Node node in parent.ChildNodes) { if (node.NodeType == NodeType.Composite) { CompositeNode lnode = node as CompositeNode; validItems.Add(InternalBindObject(elemType, parent.Name, lnode, out conversionSucceeded)); if (!conversionSucceeded) { break; } } } return validItems; }
private object ConvertComplexNodesToArray(Type desiredType, IndexedNode parent, out bool conversionSucceeded) { Type arrayElemType = desiredType.GetElementType(); ArrayList validItems = ConvertComplexNodesToList(arrayElemType, parent, out conversionSucceeded); return conversionSucceeded ? validItems.ToArray(arrayElemType) : Array.CreateInstance(arrayElemType, 0); }
private IndexedNode GetOrCreateIndexedNode(CompositeNode parent, string nodeName) { Node node = parent.GetChildNode(nodeName); if (node != null && node.NodeType != NodeType.Indexed) { throw new BindingException("Attempt to create or obtain an indexed node " + "named {0}, but a node with the same exists with the type {1}", nodeName, node.NodeType); } if (node == null) { node = new IndexedNode(nodeName); parent.AddChildNode(node); } return (IndexedNode) node; }