以TreeView形式显示时间
效果图:
/// <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();
}