现在的位置: 首页 > 综合 > 正文

TreeView如何连接数据库

2014年11月22日 ⁄ 综合 ⁄ 共 2019字 ⁄ 字号 评论关闭

我的数据库是这样设计的:

parent_id(字符型)    this_id(字符型)   this_name    this_url

0                                     1                              根节点1

0                                      2                             根节点2

0                                      3                              根节点3

1                                     11                             父节点1

2                                      21                           父节点2

11                                                                    子节点1       list.aspx

21                                                                     自节点2       list.aspx

首先我们在cs文件的Page_Load中把数据库中的数据全部读到一个DataTable里面,以避免每次都要连接数据库而耗费资源。

首先声明一个类成员变量:

public class WebForm1 : System.Web.UI.Page
 {
  protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
  private DataTable dt;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
  if(!IsPostBack)
   {
        string connString = "provider=Microsoft.Jet.OleDb.4.0;Data Source=c:/inetpub/wwwroot/sjbang/sjbang.mdb";
    string selCmd = "select * from mytree";
    OleDbConnection conn = new OleDbConnection(connString);
    OleDbDataAdapter adapter = new OleDbDataAdapter(selCmd,conn);
    dt = new DataTable();
    adapter.Fill(dt);
    ShowAllNodes("0",TreeView1.Nodes);//调用函数显示节点
       dt.Dispose();//显示了全部节点后销毁dt以减少资源占用。
   }
  }

  private void ShowAllNodes(string ddd,TreeNodeCollection nodes)
  {
   //下面这句必须写,否则会陷入死循环
   DataRow[] rowClass = dt.Select(string.Format("parent_id = '{0}'",ddd));
   if(rowClass.Length>0)
   {
    foreach(DataRow dr in rowClass)
    {
     TreeNode newNode = new TreeNode();
     newNode.Text = dr["this_name"].ToString().Trim();
     string strUrl = dr["this_url"].ToString().Trim();
     string newId = dr["this_id"].ToString().Trim();
     if(strUrl!="" && null!=strUrl)
     {
      newNode.NavigateUrl = strUrl + "?type=" + Server.UrlEncode(dr["this_name"].ToString().Trim()) + "&brand=" + Server.UrlEncode(dr["this_brand"].ToString().Trim());
      newNode.Target="right";
     }
     nodes.Add(newNode);
    //循环递归调用
     ShowAllNodes(newId,newNode.Nodes);
    }
   }
   
  }

抱歉!评论已关闭.