直接上代码
public void TreeCOMToParent()
{
//每次执行前要清除之前的TreeView的痕迹
treeView.Items.Clear();
//通过在数据库中查到的DataTable为数据源,也可以换做是别的数据源list,xml
var ComTree = SqliteDB.SelectComName("RealTimeData").Rows;
RemoverDate();
foreach (DataRow item in ComTree)
{
Yeardata.Clear();
TreeViewItem comtree = new TreeViewItem();//一级
comtree.IsExpanded = true;
comtree.Tag = 1;
comtree.Header = item.ItemArray[0];
TreeViewItem groupA = new TreeViewItem();//二级
groupA.Tag = 2;
groupA.IsExpanded = true;
groupA.Header = "组1";
//点击事件,为什么不用click ,因为我tmd也找不到这个事件在哪!有大神知道吗!!!!
groupA.MouseUp += GroupA_MouseUp;
SeleteDateTime(comtree.Header.ToString(), groupA); //三级,在三级节点中可以再次添加节点
comtree.Items.Add(groupA); //把二级节点添加到一级节点下
//下面的同上,可以不用看,只是在相同的节点中添加了兄弟节点
TreeViewItem groupB = new TreeViewItem();//二级
groupB.Header = "组2";
groupB.IsExpanded = true;
groupB.MouseUp += GroupA_MouseUp;
groupB.Tag = 2;
SeleteDateTime(comtree.Header.ToString(), groupB);//三级
comtree.Items.Add(groupB);
TreeViewItem groupC = new TreeViewItem();//二级
groupC.Header = "组3";
groupC.IsExpanded = true;
groupC.Tag = 2;
groupC.MouseUp += GroupA_MouseUp;
SeleteDateTime(comtree.Header.ToString(), groupC);//三级
comtree.Items.Add(groupC);
TreeViewItem groupD = new TreeViewItem();//二级
groupD.Header = "组4";
groupD.IsExpanded = true;
groupD.Tag = 2;
groupD.MouseUp += GroupA_MouseUp;
SeleteDateTime(comtree.Header.ToString(), groupD);//三级
comtree.Items.Add(groupD);
treeView.Items.Add(comtree); 把一级节点添加到TreeView节点下
}
}
三级节点就是通过SeleteDateTime方法来实现的。
List Yeardata = new List();
List Monthdata = new List();
//收集年和月做判断节点是否存在,存在就向下添加添加子节点,不存在就添加当前节点,并把节点收集到list中,做下次循环中的判断
public void SeleteDateTime(string treeA, TreeViewItem Groups)
{
Yeardata.Clear();
Monthdata.Clear();
var DateTree = SqliteDB.SelectTime(treeA, Groups.Header.ToString()).Rows;//通过组查询其子集的信息
foreach (DataRow itemtiem in DateTree)
{
var splicdian = itemtiem.ItemArray[0].ToString().Split('.');//分配年.月.日时间
TreeViewItem treeYear = new TreeViewItem();
var istfyear = Yeardata.FirstOrDefault(o => o.Header.ToString().Equals(splicdian[0] + "年"));//判断有没有这 年 份
if (istfyear == null)
{
Monthdata.Clear();
treeYear.Header = splicdian[0] + "年"; //年
treeYear.IsExpanded = true;
Yeardata.Add(treeYear);
Groups.Items.Add(treeYear);
//InsertYearTree(treeYear);//在年下面创建12个月份
TreeViewItem treeMonth = new TreeViewItem();
var istfmonth = Monthdata.FirstOrDefault(o => o.Header.ToString().Equals(splicdian[1] + "月"));//判断有没有这 月 份
if (istfmonth == null)
{
treeMonth.Header = splicdian[1] + "月"; //月
Monthdata.Add(treeMonth);
treeYear.Items.Add(treeMonth);
TreeViewItem Tiemdate = new TreeViewItem();
Tiemdate.Tag = 3;
Tiemdate.Header = itemtiem.ItemArray[0]; //时间总览
Tiemdate.MouseUp += Tiemdate_MouseUp;
treeMonth.Items.Add(Tiemdate);
}
}
else
{
var istfmonth = Monthdata.FirstOrDefault(o => o.Header.ToString().Equals(splicdian[1] + "月")); ;//判断有没有这 月 份
if (istfmonth == null)
{
TreeViewItem treeMonth = new TreeViewItem();
treeMonth.Header = splicdian[1] + "月"; //月
Monthdata.Add(treeMonth);
istfyear.Items.Add(treeMonth);
TreeViewItem Tiemdate = new TreeViewItem();
Tiemdate.Tag = 3;
Tiemdate.Header = itemtiem.ItemArray[0]; //时间总览
Tiemdate.MouseUp += Tiemdate_MouseUp;
treeMonth.Items.Add(Tiemdate);
}
else
{
TreeViewItem Tiemdate = new TreeViewItem();
Tiemdate.Tag = 3;
Tiemdate.Header = itemtiem.ItemArray[0]; //时间总览
Tiemdate.MouseUp += Tiemdate_MouseUp;
istfmonth.Items.Add(Tiemdate);
}
}
}
}