数据库是这样的:
表名: rjb
字段名: rjb_id rjb_name rjb_year rjb_month rjb_day表名: rjb_year
字段名: year_id year_name year_year表名: rjb_month
字段名: month_id month_year month_month表名: rjb_day
字段名: day_id day_month day_day我写的代码全不都在Page_Load里面了,不知道怎样正确的装载节点,请大家帮忙,谢谢!!private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strConnectionString= "data source=(local);initial catalog=rjb;integrated security=SSPI";第二、三个relations被我屏蔽了,不知道怎样装载3、4层的节点。
SqlConnection cnn;
SqlDataAdapter cmUser;
SqlDataAdapter cmYear;
SqlDataAdapter cmMonth;
SqlDataAdapter cmDay;;
DataSet ds=new DataSet(); TreeNode nodeUser;
TreeNode nodeYear;
TreeNode nodeMonth;
TreeNode nodeDay;
cnn=new SqlConnection(strConnectionString);
cnn.Open(); cmUser =new SqlDataAdapter("select rjb_name from rjb", cnn);
cmUser.Fill(ds, "User"); cmYear =new SqlDataAdapter("select year_name,year_year from rjb_year", cnn);
cmYear.Fill(ds, "Year"); cmMonth =new SqlDataAdapter("select month_year,month_month from rjb_month", cnn);
cmMonth.Fill(ds, "Month"); cmDay =new SqlDataAdapter("select day_month,day_day from rjb_day", cnn);
cmDay.Fill(ds, "Day"); DataRelation userYearRel=ds.Relations.Add("userYear", ds.Tables["User"].Columns["rjb_name"], ds.Tables["Year"].Columns["year_name"]);
// DataRelation yearMonthRel=ds.Relations.Add("yearMonth", ds.Tables["Year"].Columns["year_year"], ds.Tables["Month"].Columns["month_year"]);
// DataRelation monthDayRel=ds.Relations.Add("monthDay", ds.Tables["Month"].Columns["month_month"], ds.Tables["Day"].Columns["day_month"]); foreach (DataRow rowUser in ds.Tables["User"].Rows)
{
nodeUser = new TreeNode();
nodeUser.Text = rowUser["rjb_name"].ToString ();
TreeView1.Nodes.Add(nodeUser);
foreach (DataRow rowYear in rowUser.GetChildRows("userYear"))
{
nodeYear=new TreeNode ();
nodeYear.Text =rowYear["year_year"].ToString();
nodeUser.Nodes.Add(nodeYear);
} }
}

解决方案 »

  1.   

    foreach (DataRow rowUser in ds.Tables["User"].Rows)
    {
    nodeUser = new TreeNode();
    nodeUser.Text = rowUser["rjb_name"].ToString ();
    TreeView1.Nodes.Add(nodeUser);
    foreach (DataRow rowYear in rowUser.GetChildRows("userYear"))
    {
    nodeYear=new TreeNode ();
    nodeYear.Text =rowYear["year_year"].ToString();
    nodeUser.Nodes.Add(nodeYear);
    //Start
    DataView dvMonth = ds.Tables["Month"].DefaultView;
    dvMonth.RowFilter="month_year="+rowYear["year_year"].ToString();
    foreach(DataRowView a in dvMonth)
    {
    TreeNode nodeMonth = new TreeNode();
    nodeMonth.Text=a.Row["month_month"].ToString();
    nodeYear.Nodes.Add(nodeMonth); //-------------------------------------
    //再用同样的方法增加天的节点
    } } }
      

  2.   

    请楼主看下这篇文章,相信你在明白了节点加载的原理后,自然能解决问题的。
    http://www.chinabs.net/webdotnet/default.asp?infoid=106
      

  3.   

    感谢vickyyu(心中有片蓝天) 的热心帮助,使我明白的relations的使用中父字段那边的值必须唯一。
    我换个角度问好吗,就是怎么才能获取到当前节点的前一个节点。因为现在主要的问题变成了,怎么把重复的用户名去掉,重复的年月去掉了。
    比如名为“胡风”的用户分别在2005年的8月15日,8月16日各写了一篇日记,那么树的形状就看上去好像
    胡风
        2005年
              8月
                15日
                16日
              8月
                15日
                16日
        2005年
              8月
                15日
                16日
              8月
                15日
                16日
    我想利用一个判断,如果目前想要插入的节点的text值与当前节点前一个节点的text值相等,那么就不插入了。
      

  4.   

    谢谢vickyyu(心中有片蓝天) 的解答,让我花了一天多时间明白了这样做表很麻烦,所以送您20分。
      

  5.   

    谢谢vickyyu(心中有片蓝天)  的解答,让我花了一天多时间明白了这样做表很麻烦,所以送您20分