效果图:
///
<summary>
/// 绑定时间
/// </summary>
/// <param name="dtSource"> 数据源 </param>
/// <param name="columnName"> 用于显示时间列的列称 </param>
/// <param name="sort"> 排序方式:desc,asc </param>
private void BindTreeViewDate(DataTable dtSource, string columnName, string sort)
{
DataTable dt = new DataTable();
DataColumn[] cols = new DataColumn[ 1 ];
cols[ 0 ] = new DataColumn();
cols[ 0 ].ColumnName = " sortDate " ;
dt.Columns.Add(cols[ 0 ]);
dt.PrimaryKey = cols;
foreach (DataRow row in dtSource.Select( " 1=1 " , columnName + " " + sort))
{
object obj = row[columnName];
if (dt.Rows.Find(obj) == null )
{
dt.Rows.Add(obj);
}
}
tvDate.Nodes.Clear();
TreeNode nodeSelect = new TreeNode();
TreeNode nodeSelectM = new TreeNode();
TreeNode nodeSelectY = new TreeNode();
if (dt != null && dt.Rows.Count > 0 )
{
// 绑定第一行时间
TreeNode tn1 = new TreeNode();
TreeNode tn2 = new TreeNode();
TreeNode tn3 = new TreeNode();
DateTime date = Convert.ToDateTime(dt.Rows[ 0 ][ 0 ].ToString());
tn1.Text = date.Year.ToString() + " 年 " ;
tn1.ToolTip = date.ToShortDateString();
tvDate.Nodes.Add(tn1);
tn2.Text = date.Month.ToString() + " 月 " ;
tn2.ToolTip = date.ToShortDateString();
tn1.ChildNodes.Add(tn2);
tn3.Text = date.Day.ToString() + " 日 " ;
tn3.ToolTip = date.ToShortDateString();
tn2.ChildNodes.Add(tn3);
dt.Rows.RemoveAt( 0 ); // 移除第一行
foreach (DataRow row in dt.Rows)
{
DateTime dateNext = Convert.ToDateTime(row[ 0 ].ToString());
// 绑定年
if ( string .Compare(dateNext.Year.ToString() + " 年 " , tn1.Text) != 0 )
{
tn1 = new TreeNode();
tn2 = new TreeNode();
tn3 = new TreeNode();
tn1.Text = dateNext.Year.ToString() + " 年 " ;
tn1.ToolTip = dateNext.ToShortDateString();
tvDate.Nodes.Add(tn1);
tn2.Text = dateNext.Month.ToString() + " 月 " ;
tn2.ToolTip = dateNext.ToShortDateString();
tn1.ChildNodes.Add(tn2);
tn3.Text = dateNext.Day.ToString() + " 日 " ;
tn3.ToolTip = dateNext.ToShortDateString();
tn2.ChildNodes.Add(tn3);
if (nodeSelectY == null && dateNext.Year.ToString() == DateTime.Now.Year.ToString())
{
nodeSelectY = tn1;
}
}
// 绑定月
else if ( string .Compare(dateNext.Month.ToString() + " 月 " , tn2.Text) != 0 )
{
tn2 = new TreeNode();
tn3 = new TreeNode();
tn2.Text = dateNext.Month.ToString() + " 月 " ;
tn2.ToolTip = dateNext.ToShortDateString();
tn1.ChildNodes.Add(tn2);
tn3.Text = dateNext.Day.ToString() + " 日 " ;
tn3.ToolTip = dateNext.ToShortDateString();
tn2.ChildNodes.Add(tn3);
if (nodeSelectM == null && dateNext.ToString( " yyyyMM " ) == DateTime.Now.ToString( " yyyyMM " ))
{
nodeSelectM = tn2;
}
}
// 绑定日
else
{
tn3 = new TreeNode();
tn3.Text = dateNext.Day.ToString() + " 日 " ;
tn3.ToolTip = dateNext.ToShortDateString();
tn2.ChildNodes.Add(tn3);
if (dateNext.ToShortDateString() == DateTime.Now.ToShortDateString())
{
nodeSelect = tn3;
}
}
}
}
tvDate.CollapseAll();
}
以上时ASP.NET中代码,如果在WinForm中使用,请将“ToolTip”改为“Tag”,将“ChildNodes”改为“Nodes”。
/// 绑定时间
/// </summary>
/// <param name="dtSource"> 数据源 </param>
/// <param name="columnName"> 用于显示时间列的列称 </param>
/// <param name="sort"> 排序方式:desc,asc </param>
private void BindTreeViewDate(DataTable dtSource, string columnName, string sort)
{
DataTable dt = new DataTable();
DataColumn[] cols = new DataColumn[ 1 ];
cols[ 0 ] = new DataColumn();
cols[ 0 ].ColumnName = " sortDate " ;
dt.Columns.Add(cols[ 0 ]);
dt.PrimaryKey = cols;
foreach (DataRow row in dtSource.Select( " 1=1 " , columnName + " " + sort))
{
object obj = row[columnName];
if (dt.Rows.Find(obj) == null )
{
dt.Rows.Add(obj);
}
}
tvDate.Nodes.Clear();
TreeNode nodeSelect = new TreeNode();
TreeNode nodeSelectM = new TreeNode();
TreeNode nodeSelectY = new TreeNode();
if (dt != null && dt.Rows.Count > 0 )
{
// 绑定第一行时间
TreeNode tn1 = new TreeNode();
TreeNode tn2 = new TreeNode();
TreeNode tn3 = new TreeNode();
DateTime date = Convert.ToDateTime(dt.Rows[ 0 ][ 0 ].ToString());
tn1.Text = date.Year.ToString() + " 年 " ;
tn1.ToolTip = date.ToShortDateString();
tvDate.Nodes.Add(tn1);
tn2.Text = date.Month.ToString() + " 月 " ;
tn2.ToolTip = date.ToShortDateString();
tn1.ChildNodes.Add(tn2);
tn3.Text = date.Day.ToString() + " 日 " ;
tn3.ToolTip = date.ToShortDateString();
tn2.ChildNodes.Add(tn3);
dt.Rows.RemoveAt( 0 ); // 移除第一行
foreach (DataRow row in dt.Rows)
{
DateTime dateNext = Convert.ToDateTime(row[ 0 ].ToString());
// 绑定年
if ( string .Compare(dateNext.Year.ToString() + " 年 " , tn1.Text) != 0 )
{
tn1 = new TreeNode();
tn2 = new TreeNode();
tn3 = new TreeNode();
tn1.Text = dateNext.Year.ToString() + " 年 " ;
tn1.ToolTip = dateNext.ToShortDateString();
tvDate.Nodes.Add(tn1);
tn2.Text = dateNext.Month.ToString() + " 月 " ;
tn2.ToolTip = dateNext.ToShortDateString();
tn1.ChildNodes.Add(tn2);
tn3.Text = dateNext.Day.ToString() + " 日 " ;
tn3.ToolTip = dateNext.ToShortDateString();
tn2.ChildNodes.Add(tn3);
if (nodeSelectY == null && dateNext.Year.ToString() == DateTime.Now.Year.ToString())
{
nodeSelectY = tn1;
}
}
// 绑定月
else if ( string .Compare(dateNext.Month.ToString() + " 月 " , tn2.Text) != 0 )
{
tn2 = new TreeNode();
tn3 = new TreeNode();
tn2.Text = dateNext.Month.ToString() + " 月 " ;
tn2.ToolTip = dateNext.ToShortDateString();
tn1.ChildNodes.Add(tn2);
tn3.Text = dateNext.Day.ToString() + " 日 " ;
tn3.ToolTip = dateNext.ToShortDateString();
tn2.ChildNodes.Add(tn3);
if (nodeSelectM == null && dateNext.ToString( " yyyyMM " ) == DateTime.Now.ToString( " yyyyMM " ))
{
nodeSelectM = tn2;
}
}
// 绑定日
else
{
tn3 = new TreeNode();
tn3.Text = dateNext.Day.ToString() + " 日 " ;
tn3.ToolTip = dateNext.ToShortDateString();
tn2.ChildNodes.Add(tn3);
if (dateNext.ToShortDateString() == DateTime.Now.ToShortDateString())
{
nodeSelect = tn3;
}
}
}
}
tvDate.CollapseAll();
}