今天写了一个使用TreeView显示年-月-日-数据的四级格式(数据库表只有一个日期字段)

 

数据库表TestNumber一个字段是testTime。现在在界面上用树形结构显示出TestNumber的所有记录,要求树形结构按如下格式显示:

或者

可能有人会这样想,先在树形结构中添加每个年份,再添加每个月份,再添加每天,例如

2009

--1

  --1

  --2

  --3

  ..

如果这样写,那就会造成一种界面上的冗余,这样说吧,可能数据库中根本没有20098月份的数据,但是界面上面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();//实体TestNumbergetall_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年份节点,其它月份等类推

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值