- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
#region GetObjectTree
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public RootNode getObjectTree() {
using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DSDPortal"].ConnectionString)) {
using (SqlCommand cmd = new SqlCommand("Report.ObjectTree_Read", conn))
using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) {
cmd.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable();
conn.Open();
sda.Fill(dt);
var RootObjects = (from row
in dt.AsEnumerable()
where row.Field<int>("IsAttribute") == 0 && (row.Field<string>("FullName").Split('.').Count() == 1 || !row.Field<string>("FullName").Contains('.'))
select new { Desc = row["Description"].ToString(), FullName = row.Field<string>("FullName"), Type = row.Field<string>("DataType") }).AsEnumerable();
RootNode rt = new RootNode();
foreach (var obj in RootObjects) {
TreeNode o = new TreeNode();
o.data.title = obj.Desc;
o.attr.Name = obj.FullName;
o.attr.Type = obj.Type;
o.children.AddRange(getChildTreeNode(dt, obj.FullName));
rt.data.Add(o);
}
return rt;
}
}
}
private List<TreeNode> getChildTreeNode(DataTable dt, string contextName) {
var nodes = from row
in dt.AsEnumerable()
where row.Field<string>("FullName") != contextName
&& row.Field<string>("FullName").StartsWith(contextName)
&& (contextName).Split('.').Count() + 1 == row.Field<string>("FullName").Split('.').Count()
select new {
Desc = row["Description"].ToString(),
FullName = row["FullName"].ToString(),
Type = row["DataType"].ToString()
};
List<TreeNode> items = new List<TreeNode>();
foreach (var o in nodes) {
TreeNode ob = new TreeNode();
ob.data.title = o.Desc;
ob.attr.Name = o.FullName;
ob.attr.Type = o.Type;
ob.children.AddRange(getChildTreeNode(dt, ob.attr.Name));
if (ob.children.Count == 0) {
ob.children = null;
}
items.Add(ob);
}
return items;
}
#endregion
и весь этот фарш, только чтобы распарсить строки типа PARENT_OBJECT.OBJECT.CHILD_OBJECT.ATTRIB UTE, и показать их в виде дерева, вместо того, чтобы сразу хранить иерархию по человечески :(
Konardo 12.02.2014 16:11 # −5
guest 14.02.2014 22:12 # −1
Stertor 14.02.2014 22:26 # 0
-Что-то не так?
-Не, просто пленка кончилась.
-Потом у меня перепишешь.
MAKAKA 11.03.2021 18:10 # 0
>Sql
>Json
пыхоговно в шарпе
Имея json и sql хранить деревья через точку это пиздец