154 lines
3.5 KiB
C#
154 lines
3.5 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.ComponentModel;
|
||
using System.Globalization;
|
||
|
||
/// <summary>
|
||
/// TreeView 的摘要描述
|
||
/// </summary>
|
||
public class TreeView
|
||
{
|
||
public TreeView()
|
||
{
|
||
//
|
||
// TODO: 在這裡新增建構函式邏輯
|
||
//
|
||
}
|
||
public class TreeItem
|
||
{
|
||
public int num { get; set; }
|
||
public string kind { get; set; }
|
||
public int? root { get; set; }
|
||
public int? range { get; set; }
|
||
public List<TreeItem> Children { get; set; }
|
||
public int Level { get; set; }
|
||
|
||
}
|
||
|
||
public List<TreeItem> get_data(List<TreeItem> data, int root, int level)
|
||
{
|
||
var resData = new List<TreeItem>();
|
||
var query = data.Where(x => x.root == root).Select(x => new TreeItem
|
||
{
|
||
kind = x.kind,
|
||
num = x.num,
|
||
root = x.root,
|
||
range = x.range,
|
||
}).ToList();
|
||
|
||
if (query.Any())
|
||
{
|
||
level++;
|
||
query.ForEach(x => {
|
||
x.Children = get_data(data, x.num, level);
|
||
x.Level = level;
|
||
resData.Add(x);
|
||
|
||
});
|
||
}
|
||
return resData;
|
||
}
|
||
public List<TreeItem> get_data2(List<TreeItem> data, int root, int level, List<TreeItem> resData=null)
|
||
{
|
||
if (resData == null)
|
||
{
|
||
resData = new List<TreeItem>();
|
||
}
|
||
var query = data.Where(x => x.root == root).Select(x => new TreeItem
|
||
{
|
||
kind = x.kind,
|
||
num = x.num,
|
||
root = x.root,
|
||
range = x.range,
|
||
}).ToList();
|
||
|
||
if (query.Any())
|
||
{
|
||
level++;
|
||
query.ForEach(x => {
|
||
|
||
resData.Add(x);
|
||
if ( data.Where(s => s.root == x.num).Count() > 0)
|
||
{
|
||
get_data2(data, x.num, level, resData);
|
||
}
|
||
x.Level = level;
|
||
|
||
});
|
||
}
|
||
return resData;
|
||
}
|
||
|
||
public List<int> subKinds(List<TreeItem> data, int root, List<int> resData = null)
|
||
{
|
||
if (resData == null)
|
||
{
|
||
resData = new List<int>();
|
||
}
|
||
|
||
var query = data.Where(x => x.root == root).Select(x => new TreeItem
|
||
{
|
||
num = x.num,
|
||
root = x.root,
|
||
|
||
}).ToList();
|
||
|
||
if (query.Any())
|
||
{
|
||
query.ForEach(x => {
|
||
|
||
resData.Add(x.num);
|
||
subKinds(data, x.num, resData);
|
||
|
||
});
|
||
}
|
||
return resData;
|
||
}
|
||
|
||
|
||
public string kindText(List<TreeItem> data, int? num)
|
||
{
|
||
string txt = "";
|
||
if (num.HasValue)
|
||
{
|
||
var query = data.Where(x => x.num == num.Value).Select(x => new TreeItem
|
||
{
|
||
kind = x.kind,
|
||
num = x.num,
|
||
root = x.root,
|
||
|
||
}).FirstOrDefault();
|
||
|
||
if (query != null)
|
||
{
|
||
if(query.root > 0)
|
||
{
|
||
txt = kindText(data, query.root) + "/"+ query.kind;
|
||
}
|
||
else
|
||
{
|
||
txt = query.kind;
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
return txt;
|
||
}
|
||
public string RptDash(int count)
|
||
{
|
||
string txt = "";
|
||
if(count == 1)
|
||
{
|
||
return "";
|
||
}
|
||
else
|
||
{
|
||
txt ="-" + RptDash(count-1);
|
||
}
|
||
return txt;
|
||
}
|
||
|
||
|
||
} |