您的位置:首页 > 数据库

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

2009-07-07 23:05 811 查看
数据库表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年份节点,其它月份等类推
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐