111,125
社区成员
发帖
与我相关
我的任务
分享
编号0:0区:第0小学:0年级:0班
编号1:0区:第0小学:0年级:1班
编号3:0区:第0小学:0年级:2班
编号0:0区:第0小学:0年级:3班
编号5:0区:第0小学:4班
编号0:0区:第0小学:0年级:5班
编号2:0区:第0小学:1年级:0班
编号4:0区:第0小学:1年级
...(若干)
编号0:1区:第0小学:0班
...(若干)
编号5:0区:第0小学:1年级:0班
...(若干)
递归绑定
private void bindTreeView3()
{
string sql = "select * from table";
DataTable dt = db.ExecuteDataTable(sql, CommandType.Text, null);
DataRow[] dr = dt.Select("thelevel='0'");
for (int i = 0; i < dr.Length; i++)
{
TreeNode tn = new TreeNode();
tn.Text = dr[i]["name"].ToString();
tn.Tag = dr[i]["id"].ToString();
FillTree3(tn, dt);
treeView3.Nodes.Add(tn);
}
}
private void FillTree3(TreeNode tnn, DataTable dt)
{
DataRow[] dr = dt.Select("paraid='" + tnn.Tag.ToString() + "'");
for (int i = 0; i < dr.Length; i++)
{
TreeNode tn = new TreeNode();
tn.Text = dr[i]["name"].ToString();
tn.Tag = dr[i]["id"].ToString();
FillTree3(tn, dt);
tnn.Nodes.Add(tn);
}
}
private void Form1_Load(object sender, EventArgs e)
{
var a = new List<string>
{
"编号0:0区:第0小学:0年级:0班",
"编号1:0区:第0小学:0年级:1班",
"编号3:0区:第0小学:0年级:2班",
"编号0:0区:第0小学:0年级:3班",
"编号5:0区:第0小学:4班",
"编号0:0区:第0小学:0年级:5班",
"编号2:0区:第0小学:1年级:0班",
"编号4:0区:第0小学:1年级",
//...(若干)
"编号0:1区:第0小学:0班",
//...(若干)
"编号5:0区:第0小学:1年级:0班",
//...(若干)
};
var pattern = @"(编号\d+):(\d+区):(第\d+小学)(?::(\d+年级))?(?::(\d+班))?";
var q = a.Select(x => Regex.Match(x, pattern));
Func<int, Func<Match, string>> keys = i => m => m.Groups[i].Value;
Func<int, string, List<Match>, TreeNode> createNode = null;
createNode = (i, name, list) =>
{
var node = new TreeNode(name);
if (list.Count > 1)
{
var children = list.GroupBy(keys(i)).Select(x => createNode(i + 1, x.Key, x.ToList()));
node.Nodes.AddRange(children.ToArray());
}
return node;
};
var root = createNode(1, "", q.ToList());
this.treeView1.Nodes.AddRange(root.Nodes.OfType<TreeNode>().ToArray());
}