private ResultTreeNodeModel ConvertToTreeNodeModel(object obj, PropertyData propertyData) { if (propertyData.GetUnderLyingType().IsSimpleType() || obj == null) { return(new ResultTreeNodeModel { Name = propertyData.Name, Value = obj == null ? "null" : obj.ToString(), Type = propertyData.FriendlyTypeName }); } if (obj is IEnumerable enumerable && !(enumerable is BsonDocument)) { int count = enumerable.Cast <object>().Count(); var rowDoc = new ResultTreeNodeModel { Name = propertyData.Name + "[" + count + "]", Value = null, Type = propertyData.FriendlyTypeName }; var innerQueryResult = QueryResult.ToQueryResult(obj); rowDoc.Children.AddRange(ConvertToTreeNodeModels(innerQueryResult)); return(rowDoc); }
public List <ResultTreeNodeModel> ConvertToTreeNodeModels(QueryResult queryResult) { var nodes = new List <ResultTreeNodeModel>(); int rowCounter = 0; if (queryResult.IsBsonDocuments) { foreach (BsonDocument bsonDoc in queryResult.RawResults) { var node = new ResultTreeNodeModel { Name = "(" + rowCounter++ + ") {..}", RawName = bsonDoc["_id"].ToString(), Value = "", Type = bsonDoc.BsonType.ToString(), BsonDocument = bsonDoc, IsValue = false, BsonUpdateQuery = bsonDoc["_id"].ToString() }; node.Children.AddRange(ConvertBsonDocumentToTreeNodeModels(bsonDoc, node)); node.Children.ForEach(c => c.Parent = node); nodes.Add(node); } } else { foreach (List <object> rowResults in queryResult.Results) { var node = new ResultTreeNodeModel { Name = "(" + rowCounter++ + ") {..}", Value = "", Type = queryResult.Type.ToString() .Replace("System.Linq.IQueryable`1[", "") .Replace("MongoSharp.Query.", "") .Replace("]", "") }; node.Children.AddRange(ConvertToTreeNodeModels(rowResults, queryResult.Properties)); nodes.Add(node); } } return(nodes); }
void treeListView1_CellRightClick(object sender, BrightIdeasSoftware.CellRightClickEventArgs e) { if (!IsBsonMode || e.Model == null) { return; } var rootNode = e.Model as ResultTreeNodeModel; if (rootNode == null) { return; } while (rootNode.Parent != null) { rootNode = rootNode.Parent; } _currentModel = rootNode; e.MenuStrip = cmsRightClick; }