今天写了一个使用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年份节点,其它月份等类推
或者
可能有人会这样想,先在树形结构中添加每个年份,再添加每个月份,再添加每天,例如
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年份节点,其它月份等类推
相关文章推荐
- 多行数据用json格式插入到一个字段中,然后再分别显示在不同表格增删改查
- DataGrid使用 —— 数据格式设置表达式 显示不同的日期
- TreeView在显示大容量数据库数据时的使用
- easyui datagrid 数据库日期格式数据在前台显示
- 如何使用 t-sql 更新数据库中日期字段的部分数据(年?月?日?时?分?秒?)
- DataGridView (四)将一个字段绑定到多列逐行显示后取值还原数据格式
- ajax根据ID查询数据库并返回Json格式数据返回js,使用append显示到页面。判断json值为[]或者[[]]的问题。
- 数据库中只有一个时间字段,查找一个时间段的数据问题(mybits)
- excel日期格式数据通过软件导入到数据库中显示数值的问题
- 取从textarea中存到MYSQL的数据以原格式显示问题以及解决MySQL日期处理和标签的使用
- 日历控件Calendar使用技巧--根据数据库数据控制日期背景显示颜色
- 使用一个整数字段保存多个状态位数据
- 创建表空间以及用户,授予权限,查看表空间名称及大小,物理文件的名称及大小,数据库的创建日期和归档方式,数据库的版本,数据库库对象,表空间的使用情况,表空间读写
- GridView、Repeater等数据控件列数字、货币和日期的显示格式
- information_schema数据库的使用 ->查询一个数据的所有记录总数
- ASP.NET基础教程-Web 自定义控件的使用-根据属性值从数据库中提取数据并在页面上自动生成一个表格
- 如何将一个表格的所有数据存到数据库的一个字段里,并如何将这一个数据字段里的数据填充到前端表格里
- ASP.net 从数据库中读取html格式的数据并显示在页面中
- parquet文件格式——本质上是将多个rows作为一个chunk,同一个chunk里每一个单独的column使用列存储格式,这样获取某一row数据时候不需要跨机器获取