数据库表TestNumber一个字段是testTime。现在在界面上用树形结构显示出TestNumber的所有记录,要求树形结构按如下格式显示:
或者
可能有人会这样想,先在树形结构中添加每个年份,再添加每个月份,再添加每天,例如 2009年 --1月 --1号 --2号 --3号 .. 如果这样写,那就会造成一种界面上的冗余,这样说吧,可能数据库中根本没有2009年8月份的数据,但是界面上面2009年节点下面还是显示了8月,那如何通过数据库中一个日期字段(而非添加年字段、月字段、日字段等)来达到年-月-日-数据的四级格式的显示呢? 下面是我的做法。 BTestNumber btn = new BTestNumber();//类BTestNumber(自己定义的) private void RefreshTree() { TreeNode parentNode = new TreeNode(); parentNode.Text = "所有"; treeView1.Nodes.Add(parentNode); try { List<TestNumber> ltn = btn.getall_list();//实体TestNumber,getall_list()是类BTestNumber中获得数据库中所有记录并且按日期的降序返回的方法 if (ltn.Count > 0) { int Year, Month, Day; TreeNode YNode, MNode, DNode, Node; YNode = new TreeNode(); YNode.Text = ltn[0].TestTime.Year.ToString() + "年"; parentNode.Nodes.Add(YNode); Year = ltn[0].TestTime.Year; MNode = new TreeNode(); MNode.Text = ltn[0].TestTime.Month.ToString() + "月"; YNode.Nodes.Add(MNode); Month = ltn[0].TestTime.Month; DNode = new TreeNode(); DNode.Text = ltn[0].TestTime.Day.ToString() + "日"; MNode.Nodes.Add(DNode); Day = ltn[0].TestTime.Day; for (int i = 0; i < ltn.Count; i++) { if (ltn[i].TestTime.Year == Year) { if (ltn[i].TestTime.Month == Month) { if (ltn[i].TestTime.Day != Day) { DNode = new TreeNode(); DNode.Text = ltn[i].TestTime.Day.ToString() + "日"; MNode.Nodes.Add(DNode); Day = ltn[i].TestTime.Day; } } else { MNode = new TreeNode(); MNode.Text = ltn[i].TestTime.Month.ToString() + "月"; YNode.Nodes.Add(MNode); Month = ltn[i].TestTime.Month; DNode = new TreeNode(); DNode.Text = ltn[i].TestTime.Day.ToString() + "日"; MNode.Nodes.Add(DNode); Day = ltn[i].TestTime.Day; } } else { YNode = new TreeNode(); YNode.Text = ltn[i].TestTime.Year.ToString() + "年"; parentNode.Nodes.Add(YNode); Year = ltn[i].TestTime.Year; MNode = new TreeNode(); MNode.Text = ltn[i].TestTime.Month.ToString() + "月"; YNode.Nodes.Add(MNode); Month = ltn[i].TestTime.Month; DNode = new TreeNode(); DNode.Text = ltn[i].TestTime.Day.ToString() + "日"; MNode.Nodes.Add(DNode); Day = ltn[i].TestTime.Day; } Node = new TreeNode(); Node.Text = ltn[i].TestTime.ToString(); Node.Tag = ltn[i]; Node.ToolTipText = "测量日期"; DNode.Nodes.Add(Node); } } } catch (Exception ec) { //如果数据加载失败时,仿照MSSQL在树形结构上面给出提示 TreeNode tn = new TreeNode(); tn.Text = "加载数据失败。/n" + ec.Message; parentNode.Nodes.Add(tn); } treeView1.ExpandAll(); } 最终界面如下:
当连接不上数据库时:
思路就是如果下一条记录的年份与上一条记录的年份相同时则不new年份节点,其它月份等类推
本文介绍了一种根据数据库中的日期字段自动构建树形结构的方法,实现年-月-日的四级显示,避免了界面冗余,并确保了展示的数据与数据库内容完全一致。
&spm=1001.2101.3001.5002&articleId=4329597&d=1&t=3&u=3832025e327d4d1ab54887c7333dee18)
8794

被折叠的 条评论
为什么被折叠?



